Jump to content

параметрические объекты СПДС


Recommended Posts

А в теле самой функции тогда что писать?

Наверное можно там и вычислить

Rsumm = Rsumm_old + R;

Xsumm = Xsumm_old + X;

Я же не вижу всего скрипта :-(

Link to comment
Share on other sites

>>В форме получается настроить правильное отображение, если я из OnMakeParameter скопирую ту же формулу в OnChangeDialog

вынеси формулу в отдельную функцию и из функций OnMakeParameter , "OnChangeDialog" вызывай ее

посмотри в справке какие стандартные функции по какому событию вызываются и в каком порядке

Edited by doctorraz
  • Like 1
Link to comment
Share on other sites

Спасибо попробую!

А еще не подскажете, как именно передать параметр при подключаеии (не взять зависимость а передать чтоли)?

Ну вот подключаю я гайку к блоту (а не наоборот, и вот если у меня гайка большего диаметра то при присоединении её к болту,она передавать должна свой диаметр и болт соответственно подстраивает себя на такой же диаметр.

Link to comment
Share on other sites

но один маленький затык... какое событие в скрипте будет обновлять координату при зеркалировании?

 

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

 

В итоге жизнь заставила что-то с этим сделать, кто-то у нас понарисовал отраженными объектами с текстом хренову гору материала, и пришлось убить вопрос.

Не стал морочиться с автоматикой, сделал вручную:

Добавил 2 переменные "Отзеркалить по X" и "По Y" для работы из Свойств и 2 рабочих плоскости из точки вставки. При смене значения 0 на любое другое, объект зеркалится вокруг оси, а переменная возвращается обратно в 0.

Поскольку целевые объекты подразумевают только расположение по X и Y без поворотов, то проверка на то "отражен объект сейчас извне или нет" простая: по значению угла между рабочими плоскостями и осями чертежа. Да, можно и усложнить, но для локального исправления ошибок одной кнопкой мне пока хватит:

function OnChangeParameters {
	if(new.mirx!=mirx){
xPnt1=pntOrigin:x;
vecDirection=-vecDirection;
WP1=Plane(pntOrigin,vecDirection);
q=angleTwoPi(vector(1,0,0);vector(WP1));
if (q==0) pntOrigin:x = xPnt1-x;
if (q==180) pntOrigin:x = xPnt1+x;
mirx=0
};

if(new.miry!=miry){
xPnt1=pntOrigin:y;
vecPlane=-vecPlane;
WP2=Plane(pntOrigin,vecPlane);
q=angleTwoPi(vector(0,1,0);vector(WP2));
if (q==0) pntOrigin:y = xPnt1-y;
if (q==180) pntOrigin:y = xPnt1+y;
miry=0
};
};

 

Вдруг кому пригодится.

 

UPD: Хотя сейчас понимаю, что именно для исправления ошибок, проверку "отражен объект сейчас извне или нет" надо проводить ДО отзеркаливания, и если проверка проходит, то просто НЕ зеркалить объект. Это позволит не искать кривые объекты, а просто выделить всё и нажав 2 кнопки одну кнопку, исправить ошибки там, где они есть.

Edited by Mитька
  • Like 1
Link to comment
Share on other sites

И на выходе получить вот такое:

if(new.mirx!=mirx){
 xPnt1=pntOrigin:x;
 yPnt1=pntOrigin:y;
 q1=angleTwoPi(vector(1,0,0);vector(WP1));
 if (q1==180) {
  pntOrigin:x = xPnt1-x;
  vecDirection=-vecDirection;
  WP1=Plane(pntOrigin,vecDirection)
  };
 q2=angleTwoPi(vector(0,1,0);vector(WP2));
 if (q2==180) {
  pntOrigin:y = yPnt1-y;
  vecPlane=-vecPlane;
  WP2=Plane(pntOrigin,vecPlane)
  };
 mirx=0;

  • Like 1
Link to comment
Share on other sites

А не подскажете, как привязать таблицу к Объекту спдс? Ну вот при вставке какого нибудь шаблона таблицы из базы (Экспликации например) она может жестко привязаться к формату, так что потом не удалишь без удаления формата. Как сделать так же только к какому то другому объекту? Не нашел видео о привязке таблице геометрически при вставке.

Link to comment
Share on other sites

так что потом не удалишь без удаления формата.

Выбрать в таблицу и в контекстном меню указать "Отвязать формат"

img-2019-06-17-10-30-35.png

Как сделать так же только к какому то другому объекту?

Нельзя.

Link to comment
Share on other sites

так что потом не удалишь без удаления формата.

Выбрать в таблицу и в контекстном меню указать "Отвязать формат"

img-2019-06-17-10-30-35.png

Как сделать так же только к какому то другому объекту?

Нельзя.

Ясно спасибо.

  • Like 1
Link to comment
Share on other sites

Спасибо попробую! А еще не подскажете, как именно передать параметр при подключаеии (не взять зависимость а передать чтоли)? Ну вот подключаю я гайку к блоту (а не наоборот, и вот если у меня гайка большего диаметра то при присоединении её к болту,она передавать должна свой диаметр и болт соответственно подстраивает себя на такой же диаметр.

 

Сам себе отвечу :)

Для этого необходимо использовать функцию OnAddObject (стандартная функция). И там прописать какие параметры взять из объекта, который подключается к данному. (Вдруг кому пригодится, очень полезная как оказалась функция).

 

И второй вопрос. Не могу понять зачем нужна функция OnUpdateGraphics. В описании в справке, ни в вордовском документе про нее ни слова.

 

И третий. Как можно в скрипте вытянуть индекс плоскости, к которой совершено подключение? Вот у меня есть объект у него есть плоскости WP2, WP3, WP4, WP5, WP6. И к нему подключаются несколько других объектов. Подключаются к плоскостям WP3, WP4, WP6. И вот как мне вытянуть названия плоскостей этих. Если выбрать объект и нажать "Управление зависимостями" там будет список состоявшихся зависимостей и к каким его плоскостям какие объекты подключены. Вот мне нужно вытянуть номера (или хотяб названия) этих плоскостей.

Edited by Ruyke
  • Like 1
Link to comment
Share on other sites

Еще раз доброго дня. Подскажите не могу сообразить.

Есть 2 файла (1 - шина (Bus) к которая создает подключаемые плоскости и массив переменных Pn), (2 - коннектор (Connector), который подключается к одной из плоскостей шины, коннекторов можно подключить несколько).

Так вот когда к шине подключаются коннекторы, она с них считывает переменную Pn и записывает в свой массив в соответствии с индексом подключенной плоскости Pn. В итоге в объекте Bus формируется массив из чисел, взятых из подключенных объектов либо нулей, в случае если ничего не подключено. То есть примерно имеем следующий масси Pn[25, 0, 13, 250, 113, 225] и.т.д, в зависимости какое значение будет в Connector ах.

И вот теперь дилема как сложить все эти числа.

Хотелось бы конечно какое то оптимальное решение, но я даже пробовал через тупое суммирование вручную, но это даже не точно складывает.

В функции OnMakeParam вписывыаю следующее:

Pns = Pn[1]+Pn[2]+Pn[3]+Pn[4]+Pn[5]+Pn[6]+Pn[7]+Pn[8]+Pn[9]+Pn[10]

Но результат получается не совсем корректный, а именно допустим у меня сформировался массив Pn[0,0,0,5,0,5,0,5,0], то по логике должно быть 15, но получается 14,85612312. Я не понимаю почему.

Ну или можно как то изящнее это сделать чтобы работало?

 

Файлы в приложении.

 

P.S. Я там после этой суммы забыл добавить точку с запятой, но добавил и все осталось без изменений.

Bus v2.rar

Link to comment
Share on other sites

Хотелось бы конечно какое то оптимальное решение, но я даже пробовал через тупое суммирование вручную, но это даже не точно складывает.

В функции OnMakeParam вписывыаю следующее:

Pns = Pn[1]+Pn[2]+Pn[3]+Pn[4]+Pn[5]+Pn[6]+Pn[7]+Pn[8]+Pn[9]+Pn[10]

Но результат получается не совсем корректный, а именно допустим у меня сформировался массив Pn[0,0,0,5,0,5,0,5,0], то по логике должно быть 15, но получается 14,85612312. Я не понимаю почему.

Ну или можно как то изящнее это сделать чтобы работало?

 

Помнится что вот тут пост #605 было сложение после цикла.

 

http://www.youtube.com/watch?v=cppncdkjrIU

  • Like 1
Link to comment
Share on other sites

Ну я там глянул у него все переменные не через массив определены, а просто, и сумма высоты слоев выполняется вручную так сказать (h1+h2+h3...+...hn).

И я попробовал объявить Pn по отдельности, и вроде получилось. Сумма теперь корректно считается. Странно, видимо с массивами как то криво работает программа. Очень неудобно, придется 50 переменных прописывать и описывать вручную :(

  • Like 1
Link to comment
Share on other sites

В общем проблема. У меня несколько объектов в цепи подсоеденины, есть прямые зависимости в OnConnect, так и обратные в OnAddObject, и допустим мне нужно произвести перевставку первого объекта в цепи, соответственно остальная цепь от него отваливается, чтобы проицепить обратно я использую команду "Соединить объекты". Он почему то соединяет все то что указанно в OnConnect, А у меня же еще есть обратные зависимости в OnAddObject. И он их не соединяет почему то.

В ролике я увидел что в этих трубных блоках и отводах обратная зависимость то же работает (когда там менялся диаметр перехода, все объекты до него тоже поменялись, То есть объекты становятся опять связанные и двигаются при перемещении одного из них, и зависимости прямые восстанавливаются, а обратные нет почему то :(

Как при присоединении обновить OnAddObject?

Edited by Ruyke
Link to comment
Share on other sites

В общем проблема. У меня несколько объектов в цепи подсоеденины, есть прямые зависимости в OnConnect, так и обратные в OnAddObject, и допустим мне нужно произвести перевставку первого объекта в цепи, соответственно остальная цепь от него отваливается, чтобы проицепить обратно я использую команду "Соединить объекты". Он почему то соединяет все то что указанно в OnConnect, А у меня же еще есть обратные зависимости в OnAddObject. И он их не соединяет почему то.

В ролике я увидел что в этих трубных блоках и отводах обратная зависимость то же работает (когда там менялся диаметр перехода, все объекты до него тоже поменялись, То есть объекты становятся опять связанные и двигаются при перемещении одного из них, и зависимости прямые восстанавливаются, а обратные нет почему то :(

Как при присоединении обновить OnAddObject?

 

Не знаю, поможет ли оно вам, но...

Там 3 объекта: два отвода (1 и 2) и воздуховод (ВВ). Которые точно так же выстраиваются последовательно в цепь: ВВ-отвод1-ВВ. Все свойства, соответсвенно, передаются по всей цепочке. А вот отвод2 встраивается как раз между двумя уже существующими ВВ. Т.е. строим цепочку, удаляем из середины отвод1, вставляем отвод2, коннектимся к обоим ВВ (главное с порядком не пролететь) и всё работает, связи восстанавливаются, свойства по-прежнему летают туда-сюда по цепочке.

 

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

 

Хрен его знает, как у меня тогда это получилось, но насколько я помню, OnAddObject я не использовал в принципе (т.к. не знал о нём), все связи сделаны за счёт остальных обработчиков, возможно у меня там как-то OnConnect в обе стороны работает, я не помню... Наверняка, там много ненужного, неправильного, переусложненного и т.д., но гляньте, вдруг, чем поможет...

Воздуховод.rar

  • Like 2
Link to comment
Share on other sites

В общем проблема. У меня несколько объектов в цепи подсоеденины, есть прямые зависимости в OnConnect, так и обратные в OnAddObject, и допустим мне нужно произвести перевставку первого объекта в цепи, соответственно остальная цепь от него отваливается, чтобы проицепить обратно я использую команду "Соединить объекты". Он почему то соединяет все то что указанно в OnConnect, А у меня же еще есть обратные зависимости в OnAddObject. И он их не соединяет почему то.

В ролике я увидел что в этих трубных блоках и отводах обратная зависимость то же работает (когда там менялся диаметр перехода, все объекты до него тоже поменялись, То есть объекты становятся опять связанные и двигаются при перемещении одного из них, и зависимости прямые восстанавливаются, а обратные нет почему то :(

Как при присоединении обновить OnAddObject?

 

Не знаю, поможет ли оно вам, но...

Там 3 объекта: два отвода (1 и 2) и воздуховод (ВВ). Которые точно так же выстраиваются последовательно в цепь: ВВ-отвод1-ВВ. Все свойства, соответсвенно, передаются по всей цепочке. А вот отвод2 встраивается как раз между двумя уже существующими ВВ. Т.е. строим цепочку, удаляем из середины отвод1, вставляем отвод2, коннектимся к обоим ВВ (главное с порядком не пролететь) и всё работает, связи восстанавливаются, свойства по-прежнему летают туда-сюда по цепочке.

 

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

 

Хрен его знает, как у меня тогда это получилось, но насколько я помню, OnAddObject я не использовал в принципе (т.к. не знал о нём), все связи сделаны за счёт остальных обработчиков, возможно у меня там как-то OnConnect в обе стороны работает, я не помню... Наверняка, там много ненужного, неправильного, переусложненного и т.д., но гляньте, вдруг, чем поможет...

Спасибо попробую.

Link to comment
Share on other sites

Подскажите, может я не совсем в ту тему пишу, но всеже.

Хочу сделать подобный объект (как на скрине) только в виде маркера.

И не могу понять как мне с выносной линией сделать так, чтобы она начиналась от края объекта (круга), а не от центра.

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

Видел в некоторых видосах вводится какая то функция системная mcArrowSize которая регулирует размер стрелки, может там есть еще какие то функции чтобы сделать как я описал?

111Untitled.png

Link to comment
Share on other sites

>>И не могу понять как мне с выносной линией сделать так, чтобы она начиналась от края объекта (круга), а не от центра.

точку вставки маркера (при создании) задавай на окружности

Link to comment
Share on other sites

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

Случайно так не устроит?

img-2019-06-24-13-51-07.png

 

Маркер так сделать не получится

Без имени0.dwg

  • Like 1
Link to comment
Share on other sites

или сохрани узловую выноску. как шаблон upd узловая не про то))

или сохрани ее как группу, если нужны табличные параметры и логика

Edited by doctorraz
Link to comment
Share on other sites

>>Маркер так сделать не получится

млин, я качать кинулся и пробовать, думаю КААКК это сделано, потом дошло, что это за объект)))

а вот параметрику так можно сделать))) у меня типо так расчет зоны молниезащиты работает

Edited by doctorraz
Link to comment
Share on other sites

>>Маркер так сделать не получится

млин, я качать кинулся и пробовать, думаю КААКК это сделано, потом дошло, что это за объект)))

а вот параметрику так можно сделать))) у меня типо так расчет зоны молниезащиты работает

А там логика какая тогда должна быть? 2 исполнения объеденить в одном объекте? линия и круг?

Link to comment
Share on other sites

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

Случайно так не устроит?

img-2019-06-24-13-51-07.png

 

Маркер так сделать не получится

Жаль :(

Link to comment
Share on other sites

Ruyke

 

 

 

уот так

Нет я говорю про параметрику. Если в параметрике пробовать такое реализовать.

У меня 2018 не открывает чертежи :(

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Tell a friend

    Love Официальный форум компании Нанософт Разработка? Tell a friend!
×
×
  • Create New...