Если на ассоциированном виде выделить линию и в контекстном меню выбрать "Свойства компонента", то в табличке можно прочитать свойства и их значения.
Как программно имея объект линии получить (выйти на) свойства компонента? Возможно ли это?
Хотя бы "в каком направлении копать"...
Спасибо.
Свойство компонента.jpg
Конечно можно, например FindObj, даже выделять не надо, выделенный Groupp=0 - группа селектирования.
Цитата: Nipal от 23.10.23, 16:26:51Конечно можно, например FindObj, даже выделять не надо, выделенный Groupp=0 - группа селектирования.
Спасибо.
Я понял, в примере из SDK показано, что найдется линия, ближайшая к точке. А компонент сборки как определить?
{
reference pLine;
LineSeg(0, 0, 50, 50, 1);
LineSeg(50, 50, 70, 20, 1);
pLine = FindObj(20, 20, 5);
LightObj(pLine, 1);
}
А думать?
Цитата: Nipal от 23.10.23, 16:41:20А думать?
Думать готов )
Могу определить вид, определить сборку, открыть сборку, пройти по компонентам. А как связать геометрический объект на виде с компонентом в сборке пока не пойму.
Пожалуйста, пользуйтесь ПОИСКОМ по Форуму.
Вот отлично помню, что на ЭТУ тему уже была дискуссия...
Цитата: p3452 от 23.10.23, 19:42:37Пожалуйста, пользуйтесь ПОИСКОМ по Форуму.
Вот отлично помню, что на ЭТУ тему уже была дискуссия...
А некоторые темы, удачно удалили.
Вот тут можно извлечь имена объектов
https://forum.ascon.ru/index.php?topic=38281.0
Затем открыть в хелпе, берем IAssociationView у него есть метод FindFace который возвращает IModelObject от него и получите все данные.
вот тут https://forum.ascon.ru/index.php?topic=38258.0 полуфабрикатное приведение имен.
Цитата: p3452 от 23.10.23, 19:42:37Пожалуйста, пользуйтесь ПОИСКОМ по Форуму.
Вот отлично помню, что на ЭТУ тему уже была дискуссия...
p3452, вероятно, Ваш ПОИСК изысканнее моего. Но я подозреваю, что Вы и не искали.
Потому что ссылки от Вас не последовало.
Я думаю, что Вы можете реабилитироваться в моих глазах, если приведете ссылку, найденную в результате Вашего ПОИСКА на ЭТУ тему.
А отличная память - не аргумент в дискуссии. Вы и сами это должны понимать.
Цитата: feron от 23.10.23, 21:27:15Вот тут можно извлечь имена объектов
https://forum.ascon.ru/index.php?topic=38281.0
Затем открыть в хелпе, берем IAssociationView у него есть метод FindFace который возвращает IModelObject от него и получите все данные.
вот тут https://forum.ascon.ru/index.php?topic=38258.0 полуфабрикатное приведение имен.
У меня КОМПАС-3D V19
В SDK такая информация:
ЦитироватьIAssociationView - методы
В этом разделе:
CreateLocalView - Местный вид
Метод
FindFace отсутствует.
Пока просматриваю
FindObjectsByPoint - Найти объекты по точке из методов IPart7...
Вероятно, надо понять, как точка на виде соотносится с точкой в модели (по координатам разумеется).
1. Вот с ЭТОГО надо было начинать:
Цитата: lavgirb от 24.10.23, 09:33:41У меня КОМПАС-3D V19
2. Мой "поиск" действительно "изысканней":
Для v20.png
Цитата: p3452 от 24.10.23, 09:55:031. Вот с ЭТОГО надо было начинать:
Если надо, то всем.
Цитата: p3452 от 24.10.23, 09:55:032. Мой "поиск" действительно "изысканней":
Для v20.png
К сожалению, это не ссылка после Вашего ПОИСКА по Форуму ЭТОЙ темы.
lavgirb, специально для Вас - выделено "синеньким" и даже три '+' перед названием ТЕМЫ поставлены - та самая "дискуссия" о которой упоминалось!!!
Цитата: p3452 от 24.10.23, 13:06:25lavgirb, специально для Вас - выделено "синеньким" и даже три '+' перед названием ТЕМЫ поставлены - та самая "дискуссия" о которой упоминалось!!!
А это у Вас так форум отображается. Понятно.
Только вопрос остался. У меня пока КОМПАС V19.
Считаю что нужно добавить в IAssociationViewElements возможность переносить на чертеж атрибуты/свойства -> граней/ребер/вершин и затем возможность по ним проходится.
Цитата: feron от 24.10.23, 18:37:26Считаю что нужно добавить в IAssociationViewElements возможность переносить на чертеж атрибуты/свойства -> граней/ребер/вершин и затем возможность по ним проходится.
ProjectionMatrix - Матрица ассоциативного вида, это не оно?
Nipal, а как получить дерево объектов ? И например извлечь имена их ?
ProjectionMatrix - мало чего написано в хелпе..
1.jpg
Это точка в проекциях.
В К16 есть библиотека расстановки позиций она каким то образом понимает сколько и какие объекты расположены на виде более того она высчитывает площади их и предоставляет опцию расстановки по наибольшей площади..
Я смотрю в хелпе по типу документа/ окна документа/ объекты навигации затем начал искать по возможным свойствам и нет не чего что бы привело к дереву чертежа.
1.jpg
Цитата: Nipal от 24.10.23, 18:47:37ProjectionMatrix - Матрица ассоциативного вида, это не оно?
Этого нет в К16..
Я так понимаю остается только одно - приведение интерфейса какой то части сборки к чертежу (QueryInterface) но не выходит..
Цитата: feron от 24.10.23, 19:50:47Этого нет в К16..
Я так понимаю остается только одно - приведение интерфейса какой то части сборки к чертежу (QueryInterface) но не выходит..
Остаётся откатится на легендарную версию 5.11.
Цитата: Nipal от 24.10.23, 19:55:37Остаётся откатится на легендарную версию 5.11.
А как это версия поможет разобраться в вопросе ?
Цитата: feron от 24.10.23, 20:17:30А как это версия поможет разобраться в вопросе ?
Будете у истоков стоять.
Цитата: Nipal от 24.10.23, 20:32:42Будете у истоков стоять.
В таком случае она должна быть чуть ли не в исходном коде.. хотя даже если и увижу его, там мне еще месяцы все рассортировать что бы понять что и как строить.
Установил, просмотрел папку AppTools - нашел примеры и хелп но пока не чего не увидел по навигации в дереве чертежа. По той библиотеке которая работает с простановкой позиций - я так понял она И через спецификацию работает - как только ее обнулил библиотека сгенерировала пустые позиции. Открыл ее в редакторе библиотек - там что то много всяких расчетов ведутся но так и не увидел как она извлекает объекты и проходится по ним. Полагал что вопрос достигается только инструментами К а там все я так понял высчитывается.. :%:
В общем, думаю, алгоритм может быть таким. Для КОМАПАС-3D V19 )
1 Определяем reference ближайшей линии (даже не линии, а любого объекта изображения) по координатам точки в сборочном чертеже (например, конца линии-выноски).
2 Открываем сборку и последовательно исключаем из расчета детали, каждый раз проверяя reference в своей точке в чертеже.
3 Как только reference в нашей точке не совпадет с первым это и будет означать, что точка лежит на изображении последней детали, исключенной из расчета.
4 То есть мы нашли компонент сборки на котором лежит точка в чертеже, ближайшая к линии.
Это идея. Реализация, наверное, может быть разной, в зависимости от задач.
Кажись так себе идея - вот получили reference линии она же образующая цилиндрической поверхности и как ее у модели потом извлечь?
Допустим - есть ЛСК у вида (вид/разрез/местный вид) получаем параметры вида и затем получаем координаты x, y, z точки что лежит внутри объекта и по этим координатам находим деталь в сборке ?
Дополнение: опять же как найти на виде третью координату ?
Цитата: feron от 26.10.23, 09:32:48Кажись так себе идея - вот получили reference линии она же образующая цилиндрической поверхности и как ее у модели потом извлечь?
Мне нужно решить другую задачу, изложенную выше: зная точку или линию на виде чертежа сборки определить на каком компоненте сборки она лежит.
Не думаю, что для моей задачи идея так уж и плоха. Буду пробовать. )
Так я об этом и пишу:
Цитата: feron от 26.10.23, 09:32:48вот получили reference линии она же образующая цилиндрической поверхности и как ее у модели потом извлечь?
Цитата: feron от 26.10.23, 10:17:27Так я об этом и пишу:
Вы пишите о своем. А я свой вопрос задал в этой теме другой.
Цитата: undefinedКак по линии на ассоциированном виде выйти на свойства компонента?
Думаю, не стоит настаивать на своем, когда об никто не спрашивал.
Если есть вопрос, то лучше его задавать не в чужой теме, а в своей, в новой.
Вероятность получить квалифицированный ответ будет выше.
lavgirb Вам нужно научиться изъясняться яснее.. а не спрашивать то незнамо что.. филькину грамоту развели -> да абы да кабы.
за это время уже можно было раза три наброска кода сделать ..
А то что вы предложили - это полная ХЕРЬНЯ.. (с языка сорвалось)
такой огород городить не кому не нужно.
Цитата: feron от 26.10.23, 11:55:01lavgirb Вам нужно научиться изъясняться яснее.. а не спрашивать то незнамо что.. филькину грамоту развели -> да абы да кабы.
за это время уже можно было разы три наброска кода сделать ..
А то что вы предложили - это полная ХЕРЬНЯ.. (с языка сорвалось)
такой огород городить не кому не нужно.
Кому не нужно, то сюда не пишет
Цитата: lavgirb от 26.10.23, 12:24:28Кому не нужно, то сюда не пишет
оно и видно аж пальцев одной руки хватит..
скорее всего всем кому надо было - они уже мертвы в этом скоростном рынке.
на этом тему можно закрывать.
Кстати, по линии можно получить объект спецификации - может это как-то поможет.
specification_base_objects.GetSpecificationObjectsForGeom
Наверно есть еще способ..
Цитата: midreyk от 27.10.23, 16:19:26Кстати, по линии можно получить объект спецификации - может это как-то поможет.
specification_base_objects.GetSpecificationObjectsForGeom
Спасибо.
Но там не один объект, а массив. Как его разобрать не понятно.
Да и с объектами спецификации не очень охота связываться.
Цитата: feron от 27.10.23, 18:01:56Наверно есть еще способ..
У меня в сборочном чертеже нет спецификации - там при выборе редактирование объектов - пустой лист. И в этом случае библиотека позиций работает.
НО есть в контекстном меню - 2 команды: 1) Выделить компонент 2) Выделить тело - но как к ним программно прийти не понятно - в хелпе не чего подобного не находится.
Снимок2.PNG
Цитата: lavgirb от 26.10.23, 08:36:36В общем, думаю, алгоритм может быть таким. Для КОМАПАС-3D V19 )
1 Определяем reference ближайшей линии (даже не линии, а любого объекта изображения) по координатам точки в сборочном чертеже (например, конца линии-выноски).
2 Открываем сборку и последовательно исключаем из расчета детали, каждый раз проверяя reference в своей точке в чертеже.
3 Как только reference в нашей точке не совпадет с первым это и будет означать, что точка лежит на изображении последней детали, исключенной из расчета.
4 То есть мы нашли компонент сборки на котором лежит точка в чертеже, ближайшая к линии.
Это идея. Реализация, наверное, может быть разной, в зависимости от задач.
Попробовал.
При исключении из расчета компонентов исключаются из расчета производные объекты, которые тоже пропадают с вида.
Это не позволит использовать предполагаемый алгоритм.
Цитата: lavgirb от 26.10.23, 08:36:36В общем, думаю, алгоритм может быть таким. Для КОМАПАС-3D V19 )
1 Определяем reference ближайшей линии (даже не линии, а любого объекта изображения) по координатам точки в сборочном чертеже (например, конца линии-выноски).
2 Открываем сборку и последовательно исключаем из расчета детали, каждый раз проверяя reference в своей точке в чертеже.
3 Как только reference в нашей точке не совпадет с первым это и будет означать, что точка лежит на изображении последней детали, исключенной из расчета.
4 То есть мы нашли компонент сборки на котором лежит точка в чертеже, ближайшая к линии.
Это идея. Реализация, наверное, может быть разной, в зависимости от задач.
Всё проще.
Думаю, оптимальный вариант - ExecuteKompasCommand.
PS. Но команды не документированы.
Цитата: Nipal от 02.11.23, 10:13:21Всё проще.
Думаю, оптимальный вариант - ExecuteKompasCommand.
PS. Но команды не документированы.
На нет и суда нет )
Нам установили V22. Там эта проблема отпала, надеюсь.
Вероятно, в нем ссылка в номере позиции на полке линии-выноски как-то указывает на номер позиции в атрибуте "Позиция" компонента.
Проставил на сборочном чертеже номера позиций.
Потом программно поменял их в "Позиции" у компонентов в сборке.
На сборочном чертеже номера позиций поменялись в соответствии со сделанными изменениями. Прикольно )
Процесс пошел не от чертежа к свойствам компонента сборки, а от компонента сборки к чертежу.
Но главное результат: номера позиций в спецификации Excel соответствуют номерам позиций в сборочном чертеже КОМПАС.
Без дополнительных усилий со стороны конструктора.
Цитата: lavgirb от 02.11.23, 13:04:22На нет и суда нет )
Нам установили V22. Там эта проблема отпала, надеюсь.
Вероятно, в нем ссылка в номере позиции на полке линии-выноски как-то указывает на номер позиции в атрибуте "Позиция" компонента.
Проставил на сборочном чертеже номера позиций.
Потом программно поменял их в "Позиции" у компонентов в сборке.
На сборочном чертеже номера позиций поменялись в соответствии со сделанными изменениями. Прикольно )
Удачи.
Цитата: lavgirb от 02.11.23, 13:04:22Нам установили V22. Там эта проблема отпала, надеюсь.
Вероятно, в нем ссылка в номере позиции на полке линии-выноски как-то указывает на номер позиции в атрибуте "Позиция" компонента.
Проставил на сборочном чертеже номера позиций.
Потом программно поменял их в "Позиции" у компонентов в сборке.
На сборочном чертеже номера позиций поменялись в соответствии со сделанными изменениями. Прикольно )
Добавлю. Чтобы номер позиции на сборочном чертеже проставлялся из атрибута "Позиция" компонента сборки, надо в чертеже удалить описания спецификаций в окне по команде Управление > Спецификация > Описания спецификаций.
В противном случае номера позиций на чертеже проставляются из спецификации КОМПАС, чего нам не надо.
Цитата: Nipal от 02.11.23, 10:13:21Думаю, оптимальный вариант - ExecuteKompasCommand.
PS. Но команды не документированы.
Вот же жизнь странная штука видео записать и выложить время нашлось а черкануть эти команды - нет.. я запустил цикл из -10 000 до 10 000 так у меня Компас паркинсон поймал :)
Я конечно исключил команды из хелпа.
Цитата: feron от 09.11.23, 17:22:22Вот же жизнь странная штука видео записать и выложить время нашлось а черкануть эти команды - нет.. я запустил цикл из -10 000 до 10 000 так у меня Компас паркинсон поймал :)
Я конечно исключил команды из хелпа.
Извиняйте, я потратил на это дня три, правда не напрягался, сделал себе спец приложение, не только для этой задачи, оказалось я зря потратил время.
PS. Ищите, только в минус уходить не надо.
Да и цикл вещь хорошая, но в данном случае нужно щупать, четко за вымя.
Цитата: Nipal от 09.11.23, 17:29:33Извиняйте, я потратил на это дня три, правда не напрягался, сделал себе спец приложение, не только для этой задачи, оказалось я зря потратил время.
Согласен! НО вот почему то не кто не понимает намеки на то что бы ну скинуть да хотябы 1000 руб на пиво :) за этот вечер и написал бы скрипт корректировки штриховки. Не понимают или не хотят или вопрос не стоит того.
Цитата: Nipal от 09.11.23, 17:29:33Ищите, только в минус уходить не надо.
а я уже сталкивался с подобной задачей и там отрицательные значения что то выполняли..
Тут есть товариШ
alex_python, он монетизирует знания форума и как то вот не вот.
Цитата: feron от 09.11.23, 17:34:49Согласен! НО вот почему то не кто не понимает намеки на то что бы ну скинуть да хотябы 1000 руб на пиво :) за этот вечер и написал бы скрипт корректировки штриховки. Не понимают или не хотят или вопрос не стоит того.
Тут есть товариШ alex_python, он монетизирует знания форума и как то вот не вот.
Вам это никто не запрещает, создайте тему делаю любые программы за ПИВО.
Можете с ним объединится
alex_python, я посмотрел ничего сверхъестественного не увидел.
Цитата: Nipal от 09.11.23, 17:37:54Вам это никто не запрещает, создайте тему делаю любые программы за ПИВО.
я уже все интырнеты написал и видосы тоже выкладывал с эзгибицианизмом кода :) Не идет спрос..
Цитата: feron от 09.11.23, 17:41:22я уже все интырнеты написал и видосы тоже выкладывал с эзгибицианизмом кода :) Не идет спрос..
Тут свои видео прикрепите, только в отдельной своей теме, мы посмотрим.
Былоб очень удобно проходится по дереву чертежа.
_Снимок13.jpg
IProductDataManager
Screenshot_1.bmp
Результат выполнения - на ассоциативном виде выделилась геометрия принадлежащая детали трубка.
Screenshot_2.bmp
Я все гадал что же такое "дерево СЧИ"..
Цитата: Михаил88 от 11.11.23, 14:24:56IProductDataManager
Screenshot_1.bmp
Слишком много букв, одна строка кода ExecuteKompasCommand.
Отчего текст программы в виде картинки и его нельзя скопировать?
Мой проект 1 2023-11-13_10-34-48.gif
ExecuteKompasCommandКак свойство компонента получать по выделенному объекту нашел команду, как подсвечивать компонент и тело по выделенному объекту тоже нашел команду. В дереве компонент подсвечивается, но пока не нашел команду показать в дереве, чтобы дерево само раскрывалось.
В поисках мне помогла Ваша подсказка
Цитата: Nipal от 09.11.23, 17:29:33Да и цикл вещь хорошая, но в данном случае нужно щупать, четко за вымя.
Спасибо!
PS:
Если делать выделение через IProductDataManager то деталька будет подсвечиваться на всех ассоциативных видах(если на виде присутствует геометрия этой детали), а не только на одном.
ExecuteKompasCommand
Мой проект 1 2023-11-13_23-11-12.gif
Нашел и команду - показать в дереве и скрыть компонент.
Как и писал Nipal, команды не задокументированы, но они есть.
Там много, что есть.
А, если не секрет,
Цитата: Nipal от 13.11.23, 22:02:11Там много, что есть.
"Там" - это где?
Цитата: p3452 от 13.11.23, 22:41:25А, если не секрет,"Там" - это где?
ExecuteKompasCommand - команды не задокументированы, но они есть.
Цитата: Nipal от 13.11.23, 23:22:41ExecuteKompasCommand - команды не задокументированы, но они есть.
Речь идет о том, что описано в:
- ProcessTypeEnum,
- ksKompasCommandEnum,
или о неких командах, которые ЕСТЬ, но не описаны в этих двух "перечислениях" (enum)?
О неких командах, которые ЕСТЬ, но не описаны.
Благодарю!
(может, примерный, диапазон commandID подскажите, чтобы не "тыкаться" с 1?)
Цитата: Nipal от 14.11.23, 00:17:06О неких командах, которые ЕСТЬ, но не описаны.
В моей практике был случай (не из программирования), когда серьезная фирма применяла изделия в условиях, выходящих за пределы документированных.
Когда поставщик-изготовитель по разным причинам поменял комплектующие, параметры изделия не вышли из ТУ, но у покупателя начались проблемы.
В недокументированных условиях изделие переставало работать.
Так, что-то вспомнилось...
Цитата: lavgirb от 14.11.23, 08:52:26В моей практике был случай (не из программирования), когда серьезная фирма применяла изделия в условиях, выходящих за пределы документированных.
Когда поставщик-изготовитель по разным причинам поменял комплектующие, параметры изделия не вышли из ТУ, но у покупателя начались проблемы.
В недокументированных условиях изделие переставало работать.
Так, что-то вспомнилось...
Так пощупал за вымя КОМПАС-3D, работает начиная с v18.1
Цитата: Nipal от 14.11.23, 15:45:46Так пощупал за вымя КОМПАС-3D, работает начиная с v18.1
Метод "научного тыка" использовали? )
Цитата: lavgirb от 14.11.23, 16:09:49Метод "научного тыка" использовали? )
Зачем?
Всё известно, просто проверка на Компас-3D.
Test_Kompas.png
Цитата: Nipal от 09.11.23, 17:29:33Извиняйте, я потратил на это дня три, правда не напрягался, сделал себе спец приложение, не только для этой задачи, оказалось я зря потратил время.
PS. Ищите, только в минус уходить не надо.
Да и цикл вещь хорошая, но в данном случае нужно щупать, четко за вымя.
Кажется, дошло, о чем речь. )
До 10000, вероятно, не все команды можно посмотреть.
По константам команд в SDK V22, числа констант команд лежат в диапазоне 32403-46541.
Видимо, диапазон от 32000 до 47000 может включать все основные команды.
Если исключить известные команды, количество проверок уменьшается.
Не только этот диапазон, т.ч. играйтесь.
Цитата: Nipal от 27.11.23, 09:18:55Не только этот диапазон, т.ч. играйтесь.
Пока острой нужды нет, но если приспичит, то идея понятна. Спасибо.
Цитата: Михаил88 от 13.11.23, 08:39:44Если делать выделение через IProductDataManager то деталька будет подсвечиваться на всех ассоциативных видах(если на виде присутствует геометрия этой детали), а не только на одном.
Добрый день! А возможно сделать так, чтобы компонент подсвечивался только на одном виде, допустим на активном? В целом, если я правильно понимаю, в Компасе нет глобальных слоев для всех видов сразу, поэтому мне необходимо обойти все виды, в каждом виде выбрать нужные компоненты и перенести их на определенный слой каждого вида.
Все-таки удобная это вещь ExecuteKompasCommand
Хотелось бы вернуться к этой теме.
Как бы подобраться к поиску команд, например, к нажатию на нужные кнопки?
Например выделить линию и запустить команду.
application.ExecuteKompasCommand(46533, False)
Цитата: lavgirb от 13.12.24, 17:39:35Все-таки удобная это вещь ExecuteKompasCommand
Хотелось бы вернуться к этой теме.
Как бы подобраться к поиску команд, например, к нажатию на нужные кнопки?
Всё элементарно, просто спаяйте свой компьютер и тогда, у Вас проблем не будет.
Попробуйте на открытой Модели или Сборке вот эту команду:
ExecuteKompasCommand(76326, false)
Анимация, однако! :angel:
Получается то же самое, что и в просмотровщике нажать эту команду.
Цитата: Михаил88 от 13.12.24, 17:59:20Например выделить линию и запустить команду.
application.ExecuteKompasCommand(46533, False)
Здорово! Можно быстро находить компоненты в дереве вида. Воспользуюсь. Спасибо.
selcomp.JPG
Вот хотелось бы получить команду, имитирующую нажатие на кнопку "Линия-выноска".
Можно как-то найти CommandID этой команды?
leaderbutton.JPG
10071
Цитата: Михаил88 от 14.12.24, 15:35:38Получается то же самое, что и в просмотровщике нажать эту команду.
Так в том-то и "фишка", что получаем ЭТО в обычном Компасе.