Вопросы по МАКРОЯЗЫКу.

Модераторы: Лабутин Сергей Евгеньевич, Алек(андр

Re: Вопросы по МАКРОЯЗЫКу.

Сообщение evgeniyart » 11 мар 2014 12:26

Формулировать полную картитнку долго, попробую кратко другими словами
-вместо того чтобы заново описывать в макросе все свойства панели/профиля я хотел скопировать панель/профиль который есть в макросе, но скажем так вытащить его где мне удобно а не сразу после создания и таким образом немного сократить текст.
Сейчас в таких случаях в сцену вкидываю новый объект.
Аватара пользователя
evgeniyart
 
Сообщения: 313
Зарегистрирован: 21 апр 2013 20:36

Re: Вопросы по МАКРОЯЗЫКу.

Сообщение Igor » 14 мар 2014 09:00

Есть такие команды: GetPan6Par(21 и 26 - чтение параметров крепежа или линии крепежа.
При этом команда setPan6Par(21,fxb) всегда только создаёт новую линию крепежа. А варианта для редактирования существующей линии - нет. Также невозможно определить к какой линии крепежа относится выбранный объект. Прошу добавить эти возможности
Igor
 
Сообщения: 69
Зарегистрирован: 30 ноя 2009 10:36
Откуда: Московская область

Re: Вопросы по МАКРОЯЗЫКу.

Сообщение Алек(андр » 16 мар 2014 21:35

evgeniyart писал(а):Формулировать полную картитнку долго, попробую кратко другими словами
-вместо того чтобы заново описывать в макросе все свойства панели/профиля я хотел скопировать панель/профиль который есть в макросе, но скажем так вытащить его где мне удобно а не сразу после создания и таким образом немного сократить текст.
Сейчас в таких случаях в сцену вкидываю новый объект.


Свойства не надо описывать каждый раз.
Созданному объекту можно присвоить идентификатор и обращаться к нему.

например так


macro ProtoPath+"SetProfC.mac" Prof 0 0 0 0 180 45 45 ColProf;
macro ProtoPath+"MakeProf.mac" xn yn zn xn yn zn+h ;
objident last 1 profEVG ;

эта строка означает: единственному последнему созданному объекту присвоить идентификатор profEVG

созданный Вами профиль имеет идентификатор profEVG .

теперь Вы можете к нему обратиться в любом месте макроса.

удалить delete profEVG done;
переместить move nocopy profEVG done x y z
Аватара пользователя
Алек(андр
 
Сообщения: 1208
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

Re: Вопросы по МАКРОЯЗЫКу.

Сообщение evgeniyart » 16 мар 2014 22:23

Спасибо огромное, вопрос решён !!
Аватара пользователя
evgeniyart
 
Сообщения: 313
Зарегистрирован: 21 апр 2013 20:36

Re: Вопросы по МАКРОЯЗЫКу.

Сообщение Алек(андр » 17 мар 2014 08:38

Igor писал(а):Есть такие команды: GetPan6Par(21 и 26 - чтение параметров крепежа или линии крепежа.
При этом команда setPan6Par(21,fxb) всегда только создаёт новую линию крепежа. А варианта для редактирования существующей линии - нет. Также невозможно определить к какой линии крепежа относится выбранный объект. Прошу добавить эти возможности

Для начала немного лирики.
На сегодняшний день описание макроязыка это 500+10...20 страниц очень сжатого описания. Расширять функционал , который можно выполнить существующими методами считаю не верным.

Теперь по существу. Вы хотите произвести манипуляции с существующей панелью изменив в ней только часть параметров. Это может быть все что угодно и в том числе крепеж по какой то линии.


Открываю руководство K3-Макро 71.pdf / Мебельные команды и функции / Работа с мебельной панелью
39. 5. 5 Пересоздание панели
M b P a n e l e x e c u t e < Ob j e c t P a n e l >
Команда пересоздает (создает с учетом внесенных изменений) панель < Ob j e c t P a n e l > .
Для внесения изменений в панели используются функции установки свойств мебельной панели

Вот пример, но можно набрать в поиске файлов найти файлы содержащие текст MBPanel execute
У себя в шатном PROTO нашел 17 файлов , где использована эта команда
YachCorr.MAC
RS_MirPan.mac
Duct.mac
spolka.mac
UsorMills3.mac
RS_Textur_Fas_Gnut_V.mac
RS_Textur_Fas_Splosh_V.mac
PutMill.mac
PutCutrEx.mac
JointPlan.mac
Back_d.mac
PropADD.MAC
DecorateEdit.mac
PropSN.mac
PutBiblCut.mac
TestSpotsKor.mac
TestSpotsKrom.mac
Код: Выделить всё
  NULLOUT=InitArray(arr,0);
  arr[1]=pnt1; // Указатель на панель
  err=GetPan6Par(1,arr); // Инициализация существующей панели
  if (err==1)
  {
    if (Side==1)
    {
      SideN=7;
      gosub ChKro;
    }
    if (Side==2)
    {
      SideN=3;
      gosub ChKro;
    }
  ......
    MBPanel execute pnt1 ;
    err=SetPan6Par(999,arr);

exit;
//-----------------------------------------------------
// Подпрограмма замены кромки в g_panels6 по стороне SideN
ChKro:
arr[1]=SideN;
err=GetPan6Par(3,arr);
arr[1]=SideN;
arr[2]=I_kro;
err=SetPan6Par(3,arr);
return
  }
Аватара пользователя
Алек(андр
 
Сообщения: 1208
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

Re: Вопросы по МАКРОЯЗЫКу.

Сообщение Алек(андр » 17 мар 2014 08:56

Igor писал(а):..... Также невозможно определить к какой линии крепежа относится выбранный объект. Прошу добавить эти возможности

Я не знаю как вы его выбрали, но допустим есть указатель на ДЕТАЛЬ КРЕПЕЖА.

Есть функция GetObjHold
LOGICAL GetObjHold ( OBJECT < Ob j > , VARNAME < Ho l d > )
Функция присваивает переменной < Hold > ссылку на родителя объекта < Obj > . Функция
возвращает:
1 – присвоение прошло успе шно
0 – ошибка (объект не имеет родителя и пр .)

Пользуясь этой функцией можно найти линию крепежа. У нее атрибут FURNTYPE = "800400" и есть атрибут FixSide = например "1;3" это ID контура и ID стороны
Для чтения атрибута функция getattr
Как разобрать строку смотрите применение функции splitbydelim

смотрите в описании и ищите примеры в макросах в папке PROTO
Аватара пользователя
Алек(андр
 
Сообщения: 1208
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

Re: Вопросы по МАКРОЯЗЫКу.

Сообщение Igor » 17 мар 2014 08:58

Спасибо! Всё просто супер! Осталось только определить: к какой именно линии крепежа, т.е. её номер, принадлежит выбранный в макросе по геокоординатам объект крепежа, и понять как изменить параметры именно этой линии крепежа (с номером, допустим, 3).
Igor
 
Сообщения: 69
Зарегистрирован: 30 ноя 2009 10:36
Откуда: Московская область

Re: Вопросы по МАКРОЯЗЫКу.

Сообщение Алек(андр » 17 мар 2014 09:07

Igor писал(а):Спасибо! Всё просто супер! Осталось только определить: к какой именно линии крепежа, т.е. её номер, принадлежит выбранный в макросе по геокоординатам объект крепежа, и понять как изменить параметры именно этой линии крепежа (с номером, допустим, 3).

Наверное это сообщение появилось, когда Вы не успели прочитать предыдущее. Зачем координаты? У вас деталь крепежа принадлежит группе крепежа которая принадлежит линии крепежа , которая в свою очередь входит в состав панели.
Вы же сами написали про SetPan6Par(21
Я не стал это "разжевывать"
FixSide дает вам информацию по IDконтура и сегменту

считайте существующие с помощью getpan6par(21,arr)
внесите изменения в массив arr
выполните setpan6par(21,arr)
mbpanel execute ...

И все!
Аватара пользователя
Алек(андр
 
Сообщения: 1208
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

Re: Вопросы по МАКРОЯЗЫКу.

Сообщение Igor » 17 мар 2014 09:13

Успел. Координаты использовались только при выборе объекта - крепеж, и забыли про них. Вы верно поняли, что получен указатель на крепеж. Но Вы далее отвечаете не на мой вопрос.
1. Команда SetPan6Par(21...) изменяет линию крепежа с номером 1, а требуется, например, с номером 3. Как?
2. Да я могу получить список и значения атрибутов линии крепежа, к которой принадлежит выбранный объект. Но это знание бесполезно, т.к. не содержит информации о номере этой линии. Где?
Igor
 
Сообщения: 69
Зарегистрирован: 30 ноя 2009 10:36
Откуда: Московская область

Re: Вопросы по МАКРОЯЗЫКу.

Сообщение Алек(андр » 17 мар 2014 09:49

Igor писал(а):Успел. Координаты использовались только при выборе объекта - крепеж, и забыли про них. Вы верно поняли, что получен указатель на крепеж. Но Вы далее отвечаете не на мой вопрос.
1. Команда SetPan6Par(21...) изменяет линию крепежа с номером 1, а требуется, например, с номером 3. Как?
2. Да я могу получить список и значения атрибутов линии крепежа, к которой принадлежит выбранный объект. Но это знание бесполезно, т.к. не содержит информации о номере этой линии. Где?

< A r r a y> [ 1 ] - Иде нтификатор (I D) контур а. Иде нтификатор главного контур а пане ли
возвр ащае тся опе р ацие й с кодом 1 (см. Инициализация пане ли ). Иде нтификатор
контур а вр е зки возвр ащае тся опе р ацие й с кодом 9 (см. Добавле ние вр е зки в пане ль
).
< A r r a y> [ 2 ] - Иде нтификатор (I D) эле ме нта контур а.

Получается если это главный контур, то будет
arr[1]=1 //это номер контура которому принадлежит линия крепежа он в атрибуте FixLine "1;3"
arr[2]=3 // это и есть номер линии крепежа он в атрибуте FixLine "1;3"
SetPan6Par(21,arr)
Аватара пользователя
Алек(андр
 
Сообщения: 1208
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

Re: Вопросы по МАКРОЯЗЫКу.

Сообщение Алек(андр » 17 мар 2014 09:51

Igor писал(а):.... не содержит информации о номере этой линии. Где?

О каком номере речь? атрибут Fixline чего не хватает?
Допускаю что чего то не понимаю.
Может все таки распишите задачу поподробнее. в идеале пример панели и стрелочки/галочки с подписями и стрелками стратегии :)
Аватара пользователя
Алек(андр
 
Сообщения: 1208
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

Re: Вопросы по МАКРОЯЗЫКу.

Сообщение Igor » 17 мар 2014 10:08

"arr[2]=3 // это и есть номер линии крепежа он в атрибуте FixLine "1;3" " - это номер стороны/угла панели. :-((
Igor
 
Сообщения: 69
Зарегистрирован: 30 ноя 2009 10:36
Откуда: Московская область

Re: Вопросы по МАКРОЯЗЫКу.

Сообщение Igor » 17 мар 2014 10:11

"О каком номере речь? "
Посмотрите команду GetPan6Par(26,arr).
Igor
 
Сообщения: 69
Зарегистрирован: 30 ноя 2009 10:36
Откуда: Московская область

Re: Вопросы по МАКРОЯЗЫКу.

Сообщение Алек(андр » 17 мар 2014 12:32

Igor писал(а):"arr[2]=3 // это и есть номер линии крепежа он в атрибуте FixLine "1;3" " - это номер стороны/угла панели. :-((

Это номер сегмента.
Если панель прямоугольная и первое число 1 (главный полилайн) , то 1 3 5 7 соответствуют D C E B
2 4 6 8 углы
смотрите в макросах да и в описании все это где то есть
Аватара пользователя
Алек(андр
 
Сообщения: 1208
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

Re: Вопросы по МАКРОЯЗЫКу.

Сообщение Алек(андр » 17 мар 2014 12:34

Igor писал(а):"О каком номере речь? "
Посмотрите команду GetPan6Par(26,arr).

Игорь, Вам очень тяжело помогать! Вы можете внятно написать что Вам там не понятно, что мне там смотреть?
Аватара пользователя
Алек(андр
 
Сообщения: 1208
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

Пред.След.

Вернуться в К3-Мебель. Программа для производства и продажи мебели.

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

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

cron