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

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

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

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

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

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

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

Нахождение тел в детали

Автор SAVe, 09.02.25, 22:40:23

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

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

SAVe

Здравствуйте.
Мне нужно скриптом запустить нарезку передачи. Сделал деталь с заготовкой для нарезки. Но рейка сделана в отдельном файле и добавлена в деталь командой в меню "Моделирование" -> "Добавить деталь заготовку..." Потом выполнил команду "Взять в документ". Скрипт должен искать два твердых тела делать вычитание на каждом шаге в цикле. Но в детали я вижу только одно тело. Поиск тел делаю так:
private static IBody7 FindBody(Part7 part7, string bodyName)
{
    IFeature7 feature7 = part7 as IFeature7;

    foreach (var body in feature7.ResultBodies) //Падает тут. Не может привести feature7.ResultBodies к IEnamerable
    {
        if (body.Name.Equals(bodyName))
            return body;
    }
    return null;
}
Скрипт падает на приведении feature7.ResultBodies к IEnamerable.
Причем в файле другой детали где 2 тела этот же скрипт их находит без проблем.
Как находить тела в таком файле ? Или возможно есть способ преобразовать рейку в отдельное тело (что бы их стало 2 в детали) ?
Скрипт и файл приложил. Версия 23.

Doom2


UU

#2
ResultBodies возвращает вариантный массив, когда одно тело массив принимает значение VT_DISPATCH, когда больше VT_ARRAY or VT_DISPATCH.
Air:=pFeature7.ResultBodies;
if(VarType(Air)=VT_DISPATCH)then pKompasApiObject:=IDispatch(Air) as IKompasApiObject
else if(VarType(Air)=(VT_ARRAY or VT_DISPATCH))then pKompasApiObject:=IDispatch(Air[0]) as IKompasApiObject;
PS. Файл глючный, Вам удалось построить рейку, которая телом не является и Компас её, как тело не воспринимает.

SAVe

ЦитироватьPS. Файл глючный, Вам удалось построить рейку, которая телом не является и Компас её, как тело не воспринимает.

Это часть проблемы. Как я написал - рейка построена в другом файле и добавлена через меню "Моделирование" -> "Добавить деталь заготовку...". Можно ли как то сделать, что бы Компас стал считать её телом в этом файле? Может можно как то скопировать например?

UU

Цитата: SAVe от 10.02.25, 15:47:46Это часть проблемы. Как я написал - рейка построена в другом файле и добавлена через меню "Моделирование" -> "Добавить деталь заготовку...". Можно ли как то сделать, что бы Компас стал считать её телом в этом файле? Может можно как то скопировать например?
Так постройте всё в одном файле, разными телами, картинка выше.

SAVe

ЦитироватьТак постройте всё в одном файле, разными телами, картинка выше.

Так можно... Но очень не удобно т.к. возможно придется делать несколько последовательных нарезок. Удобно располагать полученные детали в отдельных файлах.
Через UI я могу выполнить нужные операции. Для перемещения рейки делаю двойной клик в дереве "Деталь" -> "Изменение положения 3" и Компас переходит в какой то "оранжевый" режим редактирования. И вот там можно перемещать рейку. И булева операция после перемещения выполняется без проблем. Находит рейку как "Тело 2". А вот как скриптом подобраться - пока не нашел.

UU

Цитата: SAVe от 10.02.25, 20:36:00Так можно... Но очень не удобно т.к. возможно придется делать несколько последовательных нарезок. Удобно располагать полученные детали в отдельных файлах.
Через UI я могу выполнить нужные операции. Для перемещения рейки делаю двойной клик в дереве "Деталь" -> "Изменение положения 3" и Компас переходит в какой то "оранжевый" режим редактирования. И вот там можно перемещать рейку. И булева операция после перемещения выполняется без проблем. Находит рейку как "Тело 2". А вот как скриптом подобраться - пока не нашел.
 
Тогда работайте ручками.

Doom2

Цитата: UU от 10.02.25, 07:07:19ResultBodies возвращает вариантный массив, когда одно тело массив принимает значение VT_DISPATCH, когда больше VT_ARRAY or VT_DISPATCH.
Код Выделить Развернуть
Air:=pFeature7.ResultBodies;
if(VarType(Air)=VT_DISPATCH)then pKompasApiObject:=IDispatch(Air) as IKompasApiObject
else if(VarType(Air)=(VT_ARRAY or VT_DISPATCH))then pKompasApiObject:=IDispatch(Air[0]) as IKompasApiObject;


С миру по нитке -голому рубашка!