Loop. Using The Get... Commands

Средства работы с базами знаний.

Loop. Using The Get... Commands

Сообщение Dmitrysvoboda » 18 апр 2012 09:03

В катийной документации по использованию данного функционала написано:
Код: Выделить всё
1.Click the Loop icon and enter 1 in the To field.
2.In the Script Editor, enter the following script and click OK. A pad is created.
    myChamferDocument isa CATPart
    {
             myPart isa Part
             {
                        PartBody isa BodyFeature
                        {
                                 P isa Pad
                                 {
                                 }

                        }
             }
    }

3.From the Window menu, select Cascade.
4.Under the P isa Pad block, add F isa Chamfer(){}, position the cursor between the parenthesis, then right-click and select Get Axis, and select an edge in your geometrical surface. The script must be as follows:
    myChamferDocument isa CATPart
    {
             myPart isa Part
             {
                        PartBody isa BodyFeature
                        {
                              P isa Pad
                              {
                              }
                              F isa Chamfer("Edge:(Face:(Brp:(P;0:(Brp:(Sketch.1;2)));
                              None:());Face:(Brp:(P;0:(Brp:(Sketch.1;3)));None:());
                              None:(Limits1:();Limits2:()))"){}
                        }
              }

    }

5.Click OK. The chamfer is created.

Создаю новый парт, захожу в Knowledge advisor и следую указаниям документации. С первыми 3-мя пунктами все хорошо. Результат: открыты 2 окна - в одном - парт с циклом, в другом - созданный парт с призмой. Открыты так, чтобы не перекрывать/загораживать друг друга.
Выполняю п.4. Захожу в цикл и добавляю нужную строку в нужное место. Выставляю курсор между круглых скобок, щелкаю ПКМ между ними, выбираю Get Axis, навожу курсор на ребро призмы, щелкаю ЛКМ - но код, определяющий это ребро, не добавляется в тело цикла. Происходит просто переключение с активного окна на другое - в котором призма. (пробовал и с не сохраненными файлами и с сохраненными)
Вопрос: что делаю не так? или что надо делать, чтобы работало так как написано в документации?
Dmitrysvoboda
Новичок
Новичок
 
Сообщения: 49
Зарегистрирован: 24 апр 2011 23:09

Re: Loop. Using The Get... Commands

Сообщение zerganalizer » 18 апр 2012 10:59

Какая же ось у ребра призмы? Юзайте Get Edge. Только непонятно - зачем? В цикле такой loop не даст вам запустить серийную операцию по созданию чего-то массово: выбор кромки как и выбор любой другой топологии через Brep-имя - пустое занятие в массовых операциях, для которых loop был когда-то предназначен. У не-датумного объекта Brep-имена могут быть и такими:

(BEdge:(Brp:(Поворотная.3;(Brp:(Поворотная.3_GSMRotate.36;(Brp:(Поворотная.3_GSMTranslate.47;(Brp:(Поворотная.3_GSMSplit.110;(Brp:(Theory.1;(Brp:(Theory.1_GSMLoft.1;(Brp:(Theory.1_Крутка-Профиль.1;(Brp:(Theory.1_Инт_NACA_трансформер.1;(Brp:(Theory.1_GSMCurveSmooth.997;(Brp:(Theory.1_GSMCurveSmooth.994;(Brp:(Theory.1_GSMMonoDim.1005;1);Brp:(Theory.1_AxisSystem.2;1)));Brp:(Theory.1_AxisSystem.2;1);Brp:(Theory.1_GSMCurvePar.3;(Brp:(Theory.1_GSMPlane.360);Brp:(Theory.1_GSMLine.3028)))))))" & "));Brp:(Theory.1_Крутка-Профиль.7;(Brp:(Theory.1_Инт_NACA_трансформер.7;(Brp:(Theory.1_GSMCurveSmooth.1027;(Brp:(Theory.1_GSMCurveSmooth.1024;(Brp:(Theory.1_GSMMonoDim.1035;1);Brp:(Theory.1_AxisSystem.20;1)));Brp:(Theory.1_AxisSystem.20;1);Brp:(Theory.1_GSMCurveSmooth.1024;(Brp:(Theory.1_GSMMonoDim.1035;3);Brp:(Theory.1_AxisSystem.20;1)));Brp:(Theory.1_GSMCurvePar.33;(Brp:(Theory.1_GSMPlane.414);Brp:(Theory.1_GSMLine.3178)))))))));Brp:(Theory.1_Верхняя.1;(Brp:(Theory.1_ICMSweepLT.2;2:(Brp:(Theory.1_GSMCurve" & "Smooth.1032;(Brp:(UdfFeatureOutput.4870;(Brp:(Theory.1_GSMMonoDim.1041;2)));Brp:(Theory.1_GSMLine.3198)))))));Brp:(Theory.1_Задние.1;(Brp:(Theory.1_ICMSweepLT.4;2:(Brp:(UdfFeatureOutput.4865;(Brp:(Theory.1_GSMIntersect.115;(Brp:(Theory.1_GSMExtrude.22;0:(Brp:(Theory.1_GSMCurveSmooth.1030;(Brp:(UdfFeatureOutput.4869;(Brp:(Theory.1_GSMMonoDim.1040;3)));Brp:(Theory.1_GSMLine.3197)))));Brp:(Theory.1_ICMSweepLT.1;(Brp:(Theory.1_GSMCurveSmooth.1029;(Brp:(UdfFeatureOutput.4870;(Brp:(Theory.1_GSMMonoDim.1041;2)));B" & "rp:(Theory.1_GSMLine.3195)));Brp:(Theory.1_GSMLine.3194);Brp:(Theory.1_GSMLine.3188)))))))))))))));Brp:(Поворотная.3_GSMPlane.437)))))))));None:(Limits1:();Limits2:();+1);Cf11:());Поворотная.3;Z0;G3978)")

Выбор объекта по Brep-имени - метод указать Кате ВРУЧНУЮ какое ребро или грань вам нужны, и при каждом выборе имя это меняется по определенным законам, какие автоматом отследить трудно.

Вывод. В loop этот метод выбора объекта годится "на один раз". Любой loop, содержащий подобное Brep-имя не будет работать с объектами, уже построенными ранее, ибо такое имя, что вы получите на этапе программирования loop не найдется ни в одном объекта вашей модели проверьте и убедитесь сами.

В некоторых местах катийный хелп - издевательство над юзером... Насколько я правильно прочел Brep-имя в хелпе, что вы цитируете - вы выберете таким именем третье ребро второй грани призмы, производной от эскиза.1 и на нем построите фаску (неуказанных размеров). Обалденная массовая автоматизация!!!
Последний раз редактировалось zerganalizer 18 апр 2012 11:30, всего редактировалось 1 раз.
Автоматизирую все, что логично.
Аватара пользователя
zerganalizer
Moderator
 
Сообщения: 901
Зарегистрирован: 20 май 2008 15:20

Re: Loop. Using The Get... Commands

Сообщение Dmitrysvoboda » 18 апр 2012 11:29

zerganalizer писал(а):Какая же ось у ребра призмы? Юзайте Get Edge. Только непонятно - зачем? В цикле такой loop не даст вам запустить серийную операцию по созданию чего-то массово: выбор кромки как и выбор любой другой топологии через Brep-имя - пустое занятие в массовых операциях, для которых loop был когда-то предназначен. У не-датумного объекта Brep-имена могут быть и такими:

(BEdge:(Brp:(Поворотная.3;(Brp:(Поворотная.3_GSMRotate.36;(Brp:(Поворотная.3_GSMTranslate.47;(Brp:(Поворотная.3_GSMSplit.110;(Brp:(Theory.1;(Brp:(Theory.1_GSMLoft.1;(Brp:(Theory.1_Крутка-Профиль.1;(Brp:(Theory.1_Инт_NACA_трансформер.1;(Brp:(Theory.1_GSMCurveSmooth.997;(Brp:(Theory.1_GSMCurveSmooth.994;(Brp:(Theory.1_GSMMonoDim.1005;1);Brp:(Theory.1_AxisSystem.2;1)));Brp:(Theory.1_AxisSystem.2;1);Brp:(Theory.1_GSMCurvePar.3;(Brp:(Theory.1_GSMPlane.360);Brp:(Theory.1_GSMLine.3028)))))))" & "));Brp:(Theory.1_Крутка-Профиль.7;(Brp:(Theory.1_Инт_NACA_трансформер.7;(Brp:(Theory.1_GSMCurveSmooth.1027;(Brp:(Theory.1_GSMCurveSmooth.1024;(Brp:(Theory.1_GSMMonoDim.1035;1);Brp:(Theory.1_AxisSystem.20;1)));Brp:(Theory.1_AxisSystem.20;1);Brp:(Theory.1_GSMCurveSmooth.1024;(Brp:(Theory.1_GSMMonoDim.1035;3);Brp:(Theory.1_AxisSystem.20;1)));Brp:(Theory.1_GSMCurvePar.33;(Brp:(Theory.1_GSMPlane.414);Brp:(Theory.1_GSMLine.3178)))))))));Brp:(Theory.1_Верхняя.1;(Brp:(Theory.1_ICMSweepLT.2;2:(Brp:(Theory.1_GSMCurve" & "Smooth.1032;(Brp:(UdfFeatureOutput.4870;(Brp:(Theory.1_GSMMonoDim.1041;2)));Brp:(Theory.1_GSMLine.3198)))))));Brp:(Theory.1_Задние.1;(Brp:(Theory.1_ICMSweepLT.4;2:(Brp:(UdfFeatureOutput.4865;(Brp:(Theory.1_GSMIntersect.115;(Brp:(Theory.1_GSMExtrude.22;0:(Brp:(Theory.1_GSMCurveSmooth.1030;(Brp:(UdfFeatureOutput.4869;(Brp:(Theory.1_GSMMonoDim.1040;3)));Brp:(Theory.1_GSMLine.3197)))));Brp:(Theory.1_ICMSweepLT.1;(Brp:(Theory.1_GSMCurveSmooth.1029;(Brp:(UdfFeatureOutput.4870;(Brp:(Theory.1_GSMMonoDim.1041;2)));B" & "rp:(Theory.1_GSMLine.3195)));Brp:(Theory.1_GSMLine.3194);Brp:(Theory.1_GSMLine.3188)))))))))))))));Brp:(Поворотная.3_GSMPlane.437)))))))));None:(Limits1:();Limits2:();+1);Cf11:());Поворотная.3;Z0;G3978)")

Выбор объекта по Brep-имени - метод указать Кате ВРУЧНУЮ какое ребро или грань вам нужны, и при каждом выборе имя это меняется по определенным законам, какие автоматом отследить трудно.

Вывод. В loop этот метод выбора объекта годится "на один раз". Любой loop, содержащий подобное Brep-имя не будет работать с объектами, уже построенными ранее, ибо такое имя, что вы получите на этапе программирования loop не найдется ни в одном объекта вашей модели проверьте и убедитесь сами.

В некоторых местах катийный хелп - издевательство над юзером...

Да, я вас понял. А есть ли способ создать с помощью цикла более 1 документа CATPart?
На прикрепленном вложении работающая конструкция, если количество итераций цикла равно 1. Если же сделать количество итераций больше 1 - то после создания первого документа выскакивает ошибка:
No such prototype CATPart
есть ли возможность в loop сделать более 1 документа CATPart - по количеству итераций?
Вложения
Dmitrysvoboda
Новичок
Новичок
 
Сообщения: 49
Зарегистрирован: 24 апр 2011 23:09

Re: Loop. Using The Get... Commands

Сообщение zerganalizer » 18 апр 2012 11:36

Хотите создать несколько деталей, в имени которых будет номер из цикла? Я не пробовал с деталями, но с другими объектами пробовал. Между фигурных скобок нет операций, значит, loop не сработает массово. Формат команд собственно операций я на память вот так сразу не скажу.
Автоматизирую все, что логично.
Аватара пользователя
zerganalizer
Moderator
 
Сообщения: 901
Зарегистрирован: 20 май 2008 15:20

Re: Loop. Using The Get... Commands

Сообщение Dmitrysvoboda » 18 апр 2012 11:49

zerganalizer писал(а):Хотите создать несколько деталей, в имени которых будет номер из цикла? Я не пробовал с деталями, но с другими объектами пробовал. Между фигурных скобок нет операций, значит, loop не сработает массово. Формат команд собственно операций я на память вот так сразу не скажу.

Да, хотелось бы.
Если добавлять что-то между фигурными скобоками - то ситуацию это не меняет.
Если все выражение заключать в фигурные скобки - то выскакивает синтаксическая ошибка: Syntax Error!!!
Dmitrysvoboda
Новичок
Новичок
 
Сообщения: 49
Зарегистрирован: 24 апр 2011 23:09

Re: Loop. Using The Get... Commands

Сообщение zerganalizer » 18 апр 2012 12:18

Все, я похоже, разобрался. Сначала задается открываемый тип, внутрь которого можно зайти через фигурные скобки действа и там задавать дочерние объекты, которые могут содержаться в открытом выше объекте. Чтобы создать несколько партов, нужно открыть сначала Продукт, после в фигурных скобках задать вашу строку с именованием. В браузере объектов нет интерфейса к Product, раздел ProductPackage пуст. Это значит, что, похоже, создавать парты массово не выйдет. Ваш loop создает парт и входит в него. Чтобы повторить создание парта, надо сменить контекст на тот парт, из которого вы loop запустили. Если вы в вашем loop зададите поле контекста, сразу получите ту ошибку, а при задании контекстом сборку, где лежит ваш парт с loop - то, что на скрине. Финита, похоже...

Кстати, я как-то писал, вроде, про loop, что он создает множественные объекты только внутри парта.
Вложения
Автоматизирую все, что логично.
Аватара пользователя
zerganalizer
Moderator
 
Сообщения: 901
Зарегистрирован: 20 май 2008 15:20

Re: Loop. Using The Get... Commands

Сообщение Dmitrysvoboda » 18 апр 2012 12:53

Благодарю. Вероятнее всего так и есть, но попробую еще покопаться немного.
Dmitrysvoboda
Новичок
Новичок
 
Сообщения: 49
Зарегистрирован: 24 апр 2011 23:09

Re: Loop. Using The Get... Commands

Сообщение browser1 » 20 май 2012 21:34

Добрый день
Прошу прощения за возможно глупый вопрос, но я только начал изучать циклы Loop. Возможно это и устаревшая команда, но с чего-то надо начинать.
Я понимаю, что строить ферменные конструкции лучше всего в Structure Design. Но эта ветка заглохла и последний ответ на вопрос, как настроить катию для этого модуля остался без ответа 2 года назад.
viewtopic.php?f=155&t=1144
Есть вопрос о возможностях самого цикла.
Есть гипотетическая ферменная конструкция, вернее осевые линии для фермы (файл SweepLoop). В нем 6 линий , т.е осевые. В этом- же файле есть шаблон (UDF). Этот шаблон, просто цилиндрическая поверхность, поверхность типа sweep (цилиндр с вводными параметрами, линией и радиусом). Для простоты эксперимента оставим радиус в покое, и для определения этой поверхности вводим только осевую линию. Натянуть эту поверхность (цилиндр) вдоль 6 линий (осевых) с помощью цикла я смог (в детали деактивированный цикл Loop1), но все дело в том, что эти поверхности генерятся в одной детали, т.е я получил в одной детали 6 шаблонов (UDF) . А можно ли придумать цикл, который бы генерил бы отдельный part с одним шаблоном. Т.е получалась бы сборка состоящая как минимум из 6 деталей (6 осевых).
Часть этой проблемы мы решили, мне показали, как написать цикл, который создает Сборку с N количество деталей, но детальки получаются пустые, а надо, что бы в них было по одному шаблону (UDF). Я пробовал это решить одним циклом, он в сборке и деактивирован т.к не работает. Если из него убрать
import "C:\Загрузки\SweepLoop.CATPart";
Pipe_$i$ isa Pip
,то он работает, но детали создаются пустые.
Возможно, можно заставить этот цикл работать или возможно это должно быть несколько разных цикла, один создает пустые детали, другой делает в них UDF. Возможно надо, что бы первый цикл «возбуждал» второй. В общем, я понятия не имею куда бежать.
Вот и вопрос, можно ли эту проблему решить или это не возможно в принципе решить с помощью Loop. Во всяком случае со слов zerganalizer я так понял, что нельзя. Обидно если в самом деле так.
Спасибо
Вложения
NewProduct.rar
(32.48 КБ) Скачиваний: 443
Аватара пользователя
browser1
Участник
Участник
 
Сообщения: 184
Зарегистрирован: 17 сен 2007 11:44

Re: Loop. Using The Get... Commands

Сообщение zerganalizer » 03 июл 2012 13:35

Когда вы генерите внутри парта, то из него читаете udf, расставляя его по вашим данным. Чтобы это прокатило в новом парте, вам нужно создать парт (это можно), после чего в теле лупы СМЕНИТЬ КОНТЕКСТ и далее вы оказываетесь в парте, где ссылка на udf-definition отсутствует (решается, если ссылка из внешнего каталога, читаем в хелпе) и тут труба - парт-то пуст! На что udf одевать будем? А команды copy/paste as link в loop не предусмотрено, как и в нолиджах. Уже после решения этого вам надо будет снова менять контекст на ваш парт, продолжить генерацию, создавать следующий парт и далее по написанному.

Набор команд loop слабоват для решения таких задач, вам будет проще выкачать с инета макрос, делающий из многотельной детали сборку и переделать, чтоб он из ваших udf сборку лепил, но каверза в том, что loop как-то умеет обновляться, подчищая старое, заменяя на новое, а как это макросом делать - убей-те - не знаю, муторно это - вручную повторять возможности в сборке reuse pattern...
Автоматизирую все, что логично.
Аватара пользователя
zerganalizer
Moderator
 
Сообщения: 901
Зарегистрирован: 20 май 2008 15:20

Re: Loop. Using The Get... Commands

Сообщение browser1 » 03 июл 2012 14:11

Спасибо, понятно.
Аватара пользователя
browser1
Участник
Участник
 
Сообщения: 184
Зарегистрирован: 17 сен 2007 11:44


Вернуться в Knowledge

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2