Создание «объекта» в чертеже

Автор BD11, 18.06.14, 15:51:18

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

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

BD11

Здравствуйте. Возможно ли создать «объект» в чертеже, не просто нарисовать примитив (круг или квадрат), а иметь возможность в дальнейшем управлять (узнавать/менять его местоположение) этой геометрией?

Например при создании в чертеже произвольного вида 3D детали, как раз создается такой объект. Если быть точнее, то создается новый вид (в менеджере документа) с которым связана геометрия (проекция) детали [рисунок 01]. При перемещении мышью такого объекта вместе с ним перемещается и вид, и геометрия [рисунок 02]. Я могу переместить такой объект, всегда узнать его местоположение даже если объект был передвинут мышкой (пользователем), используя интерфейс IView.

Как мне создать такой же объект, чтобы я мог и управлять его положением в документе (программно или мышкой), и узнать где он находиться?

Если создать новый вид и в нем нарисовать какую-либо геометрию (например круг), то они будут существовать отдельно друг от друга. При перемещении мышкой геометрии, вид остается неподвижен, перемещается только геометрия. Я не смогу в дальнейшем узнать местоположение геометрии, так как она будет разнесена с видом в пространстве. Можно заходить в настройки вида и менять его координаты расположения, но это очень не удобно. Удобно мышкой хватать геометрию (привязываться к какой-нибудь вершине) и тащить куда надо. Возможно ли создать некий макроэлемент, который может включать в себя помимо геометрии еще и вид? Может есть другое решение данной задачи?

PS

ЦитироватьЕсли создать новый вид и в нем нарисовать какую-либо геометрию (например круг), то они будут существовать отдельно друг от друга. При перемещении мышкой геометрии, вид остается неподвижен, перемещается только геометрия. Я не смогу в дальнейшем узнать местоположение геометрии, так как она будет разнесена с видом в пространстве.
Вы можете перемещать не только объект, но и целеком вид. Тогда положение объекта относительно вида меняться не будет.
Но не понятно что Вы хотите в итоге иметь?
+ Благодарностей: 1

Если нужно переместить  вид, нажимаем на рамку вида и всё, что принадлежит виду выделится, далее перемещаем за рамку, куда надо.
+ Благодарностей: 1

студент

Цитата: BD11 от 18.06.14, 15:51:18

Как мне создать такой же объект, чтобы я мог и управлять его положением в документе (программно или мышкой), и узнать где он находиться?



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

BD11

Цитата: Sabahs от 19.06.14, 16:10:31
Если нужно переместить  вид, нажимаем на рамку вида и всё, что принадлежит виду выделится, далее перемещаем за рамку, куда надо.
Я про это и говорю, что это работает только при создании вида 3Д детали. Но как мне создать такую же рамку, которая включает в себя и геометрию (которую я сам нарисую) и вид? Я хочу нарисовать геометрию, создать вид и объединить их, но не знаю как. Создать такой макроэлемент к сожалению не выходит. Возможно я зря зациклился на интерфейсе IView, но я не нашел другого решения своей задачи.



Цитата: студент от 19.06.14, 16:33:35
Вид выделяете кликом в дереве чертежа и тягайте как угодно.
Угу, работает, но не удобно как то  8-)


BD11

Цитата: Sabahs от 19.06.14, 23:57:20
Причём 3D?
https://yadi.sk/d/MCd2WO-9U8QSW
К сожалению только завтра смогу посмотреть, что вы прислали  88))



Цитата: PS от 18.06.14, 16:12:55
Вы можете перемещать не только объект, но и целеком вид. Тогда положение объекта относительно вида меняться не будет.
Но не понятно что Вы хотите в итоге иметь?
Я почему то не заметил вчера ваше сообщение  8-)

Я хочу программно нарисовать какую то геометрию и иметь возможность доступа к этой геометрии, а именно узнавать/задавать местоположение на чертеже, причем пользователь может мышкой перемещать эту геометрию. Когда программно я рисую геометрию, я ее могу объединить в макроэлемент, для того чтобы она представляла одно целое. Но макроэлемент не имеет нужных свойств (позиционирования), да и вообще он не имеет ссылку на себя, т.е. при рисовании геометрии объединил ее в макроэлемент и забыл. Поэтому я ищу какой-либо способ решения проблемы. Я думаю надо думать в сторону IView, но может есть еще решения?

В принципе, я могу программно создавать новый вид и в этом виде программно рисовать нужную геометрию. Также я могу программно получать координаты созданного вида или менять их. При программном изменении координат вида вместе с ним перемещается и геометрия. Но если взять мышкой геометрию и потащить в нужное место, то произойдет рассинхронизация вида и геометрии. Как предлагаете вы (PS) и студент - можно вручную менять местоположение вида, заходя в дерево чертежа и выбирая нужный вид (тогда выделяется и вид и принадлежащая ему геометрия), но это решение не удобно с точки зрения пользователя.

Можете посмотреть в сторону интерфейса событий объектов графических документов ksObject2DNotify/ IObject2DNotify.
При взаимодействии с объектом будут возникать события, в обработчиках которых можно сделать, чтобы при перемещении одного объекта, перемещался весь вид.
+ Благодарностей: 1

Starik

Что то пролистал эту тему, и не понял, имеет ли она отношение к программированию приложений. Это я с точки зрения, в правильном ли месте тема находится? Может её перенести куда то?

В правильном месте, просто пока топик стартер теорию изучает.

BD11

Цитата: Starik от 20.06.14, 09:22:21
Что то пролистал эту тему, и не понял, имеет ли она отношение к программированию приложений. Это я с точки зрения, в правильном ли месте тема находится? Может её перенести куда то?
Имеет, имеет. Я прошу подсказать в сторону каких интерфейсов Компас API мне нужно смотреть. Я лично вижу решение задачи так, как было изложено выше, через использование видов (интерфейс IView).

Цитата: Sabahs от 20.06.14, 09:05:04
Можете посмотреть в сторону интерфейса событий объектов графических документов ksObject2DNotify/ IObject2DNotify.
При взаимодействии с объектом будут возникать события, в обработчиках которых можно сделать, чтобы при перемещении одного объекта, перемещался весь вид.
Не совсем представляю как это сделать. Я же не смогу обработать событие перемещение макроэлемента, так как даже не создать объект типа макроэлемент. Если пользователь кликнет на каком то макроэлементе, я даже не узнаю на каком. Хотя можно будет узнавать какому виду принадлежит макроэлемент... Мне кажется, что такая реализация очень сложна и терниста. Нельзя ли создать некий бокс, который включает в себя геометрию с видом, точно такой же получается при создании вида по 3Д детали (вид и геометрия не разрывны). Или вообще есть другие пути?

Обработчик на сдвиг объекта objRef - указатель сдвигаемого объекта, который может быть и макроэлементом.
//koBeginMove       // Начало сдвига объекта, false - запрещает сдвиг
  function BeginMove( objRef : Reference ) : WORDBOOL; virtual; stdcall;
Подробнее смотрите пример c:\Program Files\ASCON\KOMPAS-3D V15\SDK\Pascal\Delphi\step12\
+ Благодарностей: 1