• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Привязать выносной элемент к виду.

Автор krugerogk, 15.08.15, 19:29:17

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

krugerogk

Создаю вид на чертеже.

  FillChar( par, SizeOf(par), 0 );
  par.x     := 80;                           
  par.y     := 50;
  par.scale := 2;                           
  par.ang   := 0;                           
  par.color := RGB( 10, 20, 10 );             
  par.state := stACTIVE;                     
  number    := 2;
  CreateSheetView( Addr(par), number );

Как привязать к этому виду выносной элемент и показать надпись вида (обозначение+масштаб)?


krugerogk

Не могу понять как описать указатель на объект Выносной элемент через IDesignation.RefObject

С масштабом разобрался

pKompasDocument2D := newKompasAPI.ActiveDocument As IKompasDocument2D;
pViewsAndLayersManager := pKompasDocument2D.ViewsAndLayersManager;
ppViews:=pViewsAndLayersManager.Views;
ppView := ppViews.ActiveView;
IDesignation := ppView as IViewDesignation;
IDesignation.ShowScale:=true; //масштаб вида

ppView.Update;




DrawingText - Надпись вида
RefObject - Ссылка на объект "Стрелка вида", "Линия разреза" или "Выносной элемент", судя по справке указатель на один из выше перечисленных объектов.

krugerogk

Если в Компасе жмякнуть на кнопку в свойствах вида "Вставить ссылку" то список доступных элементов(разрез, выносной элемент) уже есть.
Отсюда и вопрос нужно указатель на элемент списка? или на сам объект.



krugerogk


Контейнер может предоставить 100% информацию, но Вы можете оперировать данными и решать их судьбу, на свой взгляд.

krugerogk

#8
Пробую так. Ничего не происходит... Идей больше нет =((((

var
   pKompasDocument2D : IKompasDocument2D;
   pViewsAndLayersManager : IViewsAndLayersManager;
   ppViews : IViews;
   ppView  : IView;
   IDesignation : IViewDesignation;
  // p : iDrawingObject;
   p : OleVariant;
   symbCont      : ISymbols2DContainer;
   pRemoteElements:IRemoteElements;
begin
Application.Handle := GetHWindow;
GetNewKompasAPI;
pKompasDocument2D := newKompasAPI.ActiveDocument As IKompasDocument2D;
pViewsAndLayersManager := pKompasDocument2D.ViewsAndLayersManager;
ppViews:=pViewsAndLayersManager.Views;
ppView := ppViews.ViewByNumber[1];
symbCont := ppView As ISymbols2DContainer;
pRemoteElements:=symbCont.RemoteElements;
p:=pRemoteElements.RemoteElement[1];

ppView := ppViews.ViewByNumber[2];
IDesignation := ppView as IViewDesignation;
IDesignation.ShowScale:=true;
IDesignation.RefObject:=p;
ppView.Update;


end;

Система образования меня хочет списать, я ответ дам но не сегодня, устал я, от ...
+ Благодарностей: 1

krugerogk

Надеюсь удалось отдохнуть на выходных от глупых вопросов  :)

Я ещё, не отдохнул, но у Вас я не вижу индекса ноль, в коде, а это развивает фантазию, т.е. давайте полную  информацию.
PS. Вы знаете, что в программировании ноль - это информация, он бежит по шинам и пытается сказать, что он успел, но буфер говорит, что он опоздал.

krugerogk

Индекс вида? индекс выносного элемента? p:=pRemoteElements.Item[1] //пробовал 0 и 1

IDesignation.RefObject:=1;
IDesignation.RefObject:=0;
IDesignation.RefObject[1];
IDesignation.RefObject[0];
IDesignation.RefObject[p];
IDesignation.RefObject:=p;

Метод научного тыка тут точно не подходит(извините, что глупости пишу)

Сколько у Вас видов?
Желательно, прикрепите файл, чтобы не гадать на кофейной гуще.

krugerogk

#14
Видов 3
0 - системный (в нем ничего нет)
1 - Вид с выносным элементом
2 - Вид к которому нужно привязать выносной элемент

ppView := ppViews.ViewByNumber[2];
IDesignation := ppView as IViewDesignation;
IDesignation.ShowScale:=true;

Эта часть кода работает, масштаб вида №2 показывает

Файлы вложил.. Не стану Вас загружать полной версией программы. Вырезал только то что касается этого вопроса

Нужно так:
var
p:IRemoteElement;
...
IDesignation.RefObject:=p.Reference;
+ Благодарностей: 1

krugerogk

Спасибо, работает!!! Выложу итоговый вариант, может кому интересно будет

procedure Svoystvavida;
var
   IDesignation : IViewDesignation;
   p:IRemoteElement;
begin
Application.Handle := GetHWindow;
GetNewKompasAPI;
pKompasDocument2D := newKompasAPI.ActiveDocument As IKompasDocument2D;
pViewsAndLayersManager := pKompasDocument2D.ViewsAndLayersManager;
ppViews:=pViewsAndLayersManager.Views;
ppView := ppViews.ViewByNumber[1];
symbCont := ppView As ISymbols2DContainer;
pRemoteElements:=symbCont.RemoteElements;
p:=pRemoteElements.RemoteElement[0];
ppView := ppViews.ViewByNumber[2];
IDesignation := ppView as IViewDesignation;
IDesignation.ShowScale:=true;
IDesignation.RefObject:=p.Reference;
ppView.Update;
end;