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

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

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

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

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

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

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

C# WinForm API7 Привязка к центру координат и размер от линии до точки

Автор zaytsev, 27.08.24, 13:07:10

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

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

zaytsev

Всем привет!
продолжая разборки с апи7 пара вопросов знатокам
во вложении рабочий пример параметризированного снизу вверх конуса (чисто кодом)

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

вопрос второй (по коду)
- сделал (с помощью техподдержки на примере питона) размер от линии до точки - работает но ничего не понял как работает!!!)))
//параллельный размер (три ограничения длинная линия совпадение точек и точка на коротком отрезке)
ILineDimension parallellineDim = symbols2dContainer.LineDimensions.AddLineSegmentAndPointDimension();
ILineSegmentAndPointDimension parallellineDimnExt = (ILineSegmentAndPointDimension)parallellineDim;
//линия (длинная левая)
parallellineDimnExt.SetBaseObjectPoint(0, line.X1, line.Y1);
parallellineDimnExt.SetBaseObjectPoint(1, line.X2, line.Y2);
//точка (правая на короткой нижней линии)   
parallellineDim.X2 = line3.X2;
parallellineDim.Y2 = line3.Y2;
parallellineDim.Update();

есть основной объект (ILineDimension) + вспомогательный (ILineSegmentAndPointDimension) + два его метода
SetBaseObject - Установить базовый объект
SetBaseObjectPoint - Установить координаты точек базового объекта

подскажите человеческим языком - что они делают?
в описании (SDK) очень мало намеков для экстрасенсов...
по идее SetBaseObject должен бы указывать линию а SetBaseObjectPoint точку до которой строим размер

но на практике
линия указывается через SetBaseObjectPoint(ILineSegmentAndPointDimension ) а точка напрямую через координаты ILineDimension....

при этом при указании линии SetBaseObjectPoint - параметры конца и начала - не отображаются в свойствах этого объекта - а существуют где-то ... не знаю где
по идее (судя по всему) они улетают в родителя (ILineDimension) parallellineDim.X1 и parallellineDim.Y1 но и там их не вижу в отладчике... ))) но работает))) но как???
, и в голове полная непонятность процесса))

какая логика простановки этого размера - у кого есть опыт? 

картинка + проект см.вложение
Компас23 API7 + MSVisualStudio 2022 C# -> WinForm .NET Framework 4.8 Windows10
(папка в проекте с Common =  API Компас *.dll сюда (в тикет) не влезла... - возьмите у себя из C:\Program Files\ASCON\KOMPAS-3D v23\SDK\Samples\Common\*.* или из своего расположения и обновите ссылки в проекте)

p3452

1. Obj3dType или ksObj3dTypeEnum.o3d_pointCS - точка начала системы координат (для любого API)
2. КУЧА информации на форуме и есть STEPы (3шт.) (Работа с API компас в C#. Получение размеров детали.)
3. Интересно в v23 исправили косяк в наименовании линейных размеров? Все размеры назывались одинаково: "Линейный от отрезка до точки".

+ Благодарностей: 1

zaytsev

1. ок, но для простановки размера (ILineDimension) через ограничения (т.е. без указания координат .X1,2 .Y1,2)  +фиксация +внешняя переменная - мне нужен тип IPoint (для центра  координат)
IPoint point = drawingContainer.Points.Add();
который я передаю дальше в parametritic_constraint.Partner (ограничение размера)

...
parametritic_constraint.Comment = "ksCMergePoints 11 Совпадение двух точек";
parametritic_constraint.ConstraintType = (ksConstraintTypeEnum)cnstrType;
parametritic_constraint.Index = 0;           //objBaseIndex;
parametritic_constraint.Partner = point;     //objPartner;
parametritic_constraint.PartnerIndex = 0;    //objPartnerIndex;
parametritic_constraint.Create();

...
при попытке получить точку через перечисление
IPoint point = (IPoint)part7.DefaultObject[ksObj3dTypeEnum.o3d_pointCS];
получаю ошибку - "Невозможно привести COM-объект типа "System.__ComObject" к интерфейсному типу "KompasAPI7.IDrawingObject" Интерфейс не поддерживается... (пока не понимаю как преобразовать o3d_pointCS в IPoint для  parametritic_constraint.Partner)...
мне же нужна точка 2d? я же в эскизе нахожусь...

2 тему с примерами смотрел, но иду от ILineSegmentAndPointDimension (примеров данного интерфейса не нашел)
ps изначально смотрю только на api7

3. косяк в наименовании линейных размеров (в версии 23)? - это где посмотреть (скину скрин)
ps сам компас не использую (нет такой задачи), просто через sdk пишу базовые действия (естественно неоптимально и в лоб)

p3452

1. Трансляция интерфейсов из API5 в API7...
2. Сами виноваты - кто же использует API от крайней версии.
3. Дал же ссылку, там есть скрин, на нем ВСЕ видно! Наименование линейных размеров.png

zaytsev

1,2 no comments - во всех софтах работаю на последних версиях и с техподдержками ловлю их баги )) судьба такой
3 скиньте (zaytsev@cad.ru) этот проект из скрина (желательно на c# или питоне) - покажу как выглядит на 23

p3452

Цитата: zaytsev от 27.08.24, 22:02:153 скиньте (zaytsev@cad.ru) этот проект из скрина (желательно на c# или питоне)
"Ответ - отрицательный" :o: