Delphi и чертеж компаса

Автор wapdimon72ru, 26.11.25, 07:23:01

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

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

wapdimon72ru

А можете еще подсказать такой момент, это уже так для общего  развития, вот в старом апи чтобы выделить объект на чертеже я бы сделал

doc.ksLightObj(ref, 1);

то есть у документ по ссылке на объект включить или выключить выделение.

А как подобное будет в API7, то есть как подсветить объект и наоборот снять подсветку не подскажите?

Kolos

На API5 в группу 0 добавил, а на API7 - pSelectionManager.Select(Obj);
PS. Всё это в справке написано.
+ Благодарностей: 1

wapdimon72ru

Добрый день, возвращаясь к вчерашнему вопросу.

А как получить все объекты?

Я так понял придется работать с этим? полный код в приложенном проекте. Но у меня при таком подходе часть линий выносок пропускается. На примере вчерашнего же чертежа, линии выноски с номерами 7 8 9 11 12 13 почему то не выводятся, можете подсказать почему?

pKompasDocument2D:IKompasDocument2D;
pViewsAndLayersManager:IViewsAndLayersManager;
pViews:IViews;
pView:IView;
pDrawingContainer:IDrawingContainer;

pKompasDocument2D := KompasAPI.ActiveDocument As IKompasDocument2D;

pViewsAndLayersManager:=pKompasDocument2D.ViewsAndLayersManager;
pViews:=pViewsAndLayersManager.Views;
pView:=pViews.ActiveView;
pDrawingContainer:= pView As IDrawingContainer;

Air:=pDrawingContainer.Objects[ksDrPosLeader];

Kolos

Потому, что линии выноски с номерами 7 8 9 11 12 13, принадлежат другому виду.
Нужно пробежаться по всем видам и каждого получить IDrawingContainer.
+ Благодарностей: 1

Soultaker

Потому что они на другом виде. Вы же IView приводите к контейнеру и получаете из него стрелки.
+ Благодарностей: 1

wapdimon72ru

Ну а направление то правильное ? то есть нужно работать по схеме IKompasDocument2D ->  IViewsAndLayersManager -> Views -> IDrawingContainer ? или по другому?

Kolos

Всё правильно.
for I:=0 to pViews.Count-1 do pView:=pViews.View[I];А потом IView -> IDrawingContainer.
+ Благодарностей: 1

wapdimon72ru

Этот момент получился, спасибо за информацию, и только с выделенными, и со всеми объектами определенного типа теперь можно работать.

Хотелось бы еще узнать про такой момент как события, справку я почитал, но вопросы остались.

Хотелось бы подписаться на событие клика на чертеже и понять на объекте какого типа произошел клик.

Подписываться нужно самому компонету KGAX? или KompasObject, который в нем? еще вообще ни первое не второе?

Kolos

#28
Если подписка на события Компаса, то нужно DLL писать.
Для поставленной задачи достаточно событий TKGAX, в справке почитайте и необязательно делать делать клик.
+ Благодарностей: 1

wapdimon72ru

Вопрос такой, а не должен ли компонент TKGAX быть доступным к выбору как компонент, то есть должен выбираться из списка со скрина? У меня его просто там нету.

Хотя я могу его объявить kompasAX: TKGAX;

и могу с ним работать, только кодом

  kompasAX:= TKGAX.Create(nil);
  kompasAX.Parent:= PanelKompas;
  kompasAX.Align:= alClient;
  kompasAX.AddDocument('C:\Users\zhilin\Desktop\Weldings_7517.cdw');

  Kompas:=kompasAX.GetKompasObject;

Просто в справке сказано что при установке компаса автоматические все его компоненты регистрируются в системе.



Просто если бы этот был компонент физически который можно выбрать со скрина, там есть вкладка события и там можно уже работать. А если его нет для выбора как быть с событиями, или как его заставить появится в списке у дэлфи?

Kolos

Раньше он так и устанавливался.
Сейчас нужно с ним поиграться, а на это нужно время.
PS. Это уже вопрос не по Компас, а по языку программирования.

p3452

KGAX имело смысл использовать где-то до 19 весии Компаса...

Kolos

Цитата: p3452 от 27.11.25, 16:08:00KGAX имело смысл использовать где-то до 19 весии Компаса...
Озвучьте пожалуйста весь список проблем, как Гуру - нам, простым смертным.

p3452

Цитата: Kolos от 27.11.25, 16:36:00Озвучьте пожалуйста весь список проблем, как Гуру - нам, простым смертным.
Посмотрите что находится в "памяти" при подключениие KGAX и при стандартном подключении к Компас...

Kolos

Цитата: p3452 от 27.11.25, 18:03:20Посмотрите что находится в "памяти" при подключениие KGAX и при стандартном подключении к Компас...
Отвечу, чуть позже, хочу отдохнуть.

Soultaker

Я не знаю какие у вас проблемы с KGAX, с чем там надо играться и почему его использовать можно только до 19 версии. Но я на KGAX делал вот такое https://rutube.ru/video/private/42b6ca0dd5080dd2b1343f83c6e2077c/?p=tfDKIChUwPGYv9SIxFiK3w

Kolos

#36
Цитата: Soultaker от 28.11.25, 08:02:53Я не знаю какие у вас проблемы с KGAX, с чем там надо играться и почему его использовать можно только до 19 версии.

У меня их нет, играйтесь.
Компас v24 - должно и на других работать.
Делал через событие TKGAX.OnKgMouseUp(ASender: TObject; nButton: Smallint; nShiftState: Smallint; x: Integer; y: Integer; out proceed: WordBool);

PositionLeader.zip

Kolos

Цитата: p3452 от 27.11.25, 18:03:20Посмотрите что находится в "памяти" при подключениие KGAX и при стандартном подключении к Компас...
На данном форуме - нельзя ковырять, пользоваться можно.