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

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

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

Сообщение Ручей » 21 авг 2014 07:35

evgeniyart писал(а):При написаниии прототипов/типов ящиков/фасадов у разработчиков очень много переменных задаётся латиницей и наверняка этому есть причины.
Для меня легче печатаются и воспринимаются буквы отечественного производства,
Не возникнет ли проблем в дальнейшем если все переменные у меня будут на кириллице?

Я думаю, что макросы писали разные люди. Кто-то писал русскими, кто-то латинскими. От этого такое разнообразие.
Сколько я с этим работаю, с русскими буквами проблем не возникало.
Ручей
 
Сообщения: 878
Зарегистрирован: 15 июл 2011 19:55

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

Сообщение bel62 » 14 сен 2014 08:35

Подскажите где ошибка в коде?
Цель - выбрать объекты с "PriceID==8160" и "PriceID==8161", затем удалить все выбранное
Код: Выделить всё
//Удаляем все профили с "PriceID==8160 и 8161"
i=1;
loop:
i=i+1;
selbyattr "PriceID==8160"&&"PriceID==8161" all done;
obj2=getselnum(i);     //-- Берем то, что выбрали
delete obj2 done;
goto loop;
bel62
 
Сообщения: 160
Зарегистрирован: 29 май 2012 12:12

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

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

bel62 писал(а):Подскажите где ошибка в коде?
Цель - выбрать объекты с "PriceID==8160" и "PriceID==8161", затем удалить все выбранное

Главная ошибка в логике выбора. НЕ 8160" и 8161 , А ИЛИ
Так не бывает что бы у объекта было присвоено два атрибута с одинаковым именем и разными значениями
Код: Выделить всё
//Удаляем все профили с "PriceID==8160 и 8161"
global protopath;
i=1;

selbyattr partly "PriceID==8160"||"PriceID==8161" all done;
n=sysvar(61)
if n>0 {
defarr arr[n];
macro protopath+"arrobj.mac" n arr ;
delete partly
loop:
let i=i+1
if i<n {
arr[i]
goto loop
}
done;
}
Аватара пользователя
Алек(андр
 
Сообщения: 1164
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

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

Сообщение bel62 » 14 сен 2014 13:04

Алек(андр писал(а):
bel62 писал(а):Подскажите где ошибка в коде?
Цель - выбрать объекты с "PriceID==8160" и "PriceID==8161", затем удалить все выбранное

Главная ошибка в логике выбора. НЕ 8160" и 8161 , А ИЛИ
Так не бывает что бы у объекта было присвоено два атрибута с одинаковым именем и разными значениями
Код: Выделить всё
//Удаляем все профили с "PriceID==8160 и 8161"
global protopath;
i=1;

selbyattr partly "PriceID==8160"||"PriceID==8161" all done;
n=sysvar(61)
if n>0 {
defarr arr[n];
macro protopath+"arrobj.mac" n arr ;
delete partly
loop:
let i=i+1
if i<n {
arr[i]
goto loop
}
done;
}

Спасибо, но программа ругается на этот код.
https://yadi.sk/i/YA67csiRbTyYR
bel62
 
Сообщения: 160
Зарегистрирован: 29 май 2012 12:12

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

Сообщение Алек(андр » 14 сен 2014 13:41

bel62 писал(а):
Алек(андр писал(а):
bel62 писал(а):Подскажите где ошибка в коде?
Цель - выбрать объекты с "PriceID==8160" и "PriceID==8161", затем удалить все выбранное

Главная ошибка в логике выбора. НЕ 8160" и 8161 , А ИЛИ
Так не бывает что бы у объекта было присвоено два атрибута с одинаковым именем и разными значениями

Спасибо, но программа ругается на этот код.
https://yadi.sk/i/YA67csiRbTyYR

Код: Выделить всё
//Удаляем все профили с "PriceID==8160 и 8161"
global protopath;
i=1;

selbyattr "PriceID==8160||PriceID==8161"  partly all done;
n=sysvar(61)
if n>0 {
defarr arr[n];
macro protopath+"arrobj.mac" n arr ;
delete partly
loop:
let i=i+1
if i<n {
arr[i]
goto loop
}
done;
}



Ну да! В selbyattr надо сначала фильтр потом ключ.

но вообщем то можно сделать и по другому одной строкой

delete partly attribute "PriceID==8160||PriceID==8161" done;
Аватара пользователя
Алек(андр
 
Сообщения: 1164
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

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

Сообщение bel62 » 14 сен 2014 17:48

Подскажите какой командой в макро можно удалить все "плоские области" в сцене?
https://yadi.sk/d/K8mRHDOrbUBUY
bel62
 
Сообщения: 160
Зарегистрирован: 29 май 2012 12:12

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

Сообщение Алек(андр » 14 сен 2014 18:35

bel62 писал(а):Подскажите какой командой в макро можно удалить все "плоские области" в сцене?
https://yadi.sk/d/K8mRHDOrbUBUY


Это если из интерактива, то
delete partly filter (Удалить частично дополнительно по типу объекта)
появится окно выбора типов объектов
жмем кнопку сброс и выбираем только плоская полилиния

Говорим Ок правая кнопка ВСЕ или all в командной строке
и все. Их больше нет.

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

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

Сообщение bel62 » 14 сен 2014 18:49

Алек(андр писал(а):
bel62 писал(а):Подскажите какой командой в макро можно удалить все "плоские области" в сцене?
https://yadi.sk/d/K8mRHDOrbUBUY


Это если из интерактива, то
delete partly filter (Удалить частично дополнительно по типу объекта)
появится окно выбора типов объектов
жмем кнопку сброс и выбираем только плоская полилиния

Говорим Ок правая кнопка ВСЕ или all в командной строке
и все. Их больше нет.



Хотелось бы без интерактива. Просто прописать в макро и автоматом без карточек удалять
bel62
 
Сообщения: 160
Зарегистрирован: 29 май 2012 12:12

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

Сообщение Алек(андр » 14 сен 2014 20:05

bel62 писал(а):
Алек(андр писал(а):
bel62 писал(а):Подскажите какой командой в макро можно удалить все "плоские области" в сцене?
https://yadi.sk/d/K8mRHDOrbUBUY


Это если из интерактива, то
delete partly filter (Удалить частично дополнительно по типу объекта)
появится окно выбора типов объектов
жмем кнопку сброс и выбираем только плоская полилиния

Говорим Ок правая кнопка ВСЕ или all в командной строке
и все. Их больше нет.



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


У них тип -12

просканируйте сцену и затем удалите все все объекты у которых getobjtype(obj) вернет -12
Аватара пользователя
Алек(андр
 
Сообщения: 1164
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

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

Сообщение bel62 » 15 сен 2014 12:42

Алек(андр писал(а):
bel62 писал(а):Подскажите какой командой в макро можно удалить все "плоские области" в сцене?
https://yadi.sk/d/K8mRHDOrbUBUY

У них тип -12
просканируйте сцену и затем удалите все все объекты у которых getobjtype(obj) вернет -12

Тип 12 на это не реагирует.
Код: Выделить всё
//-- Программа для выбора и удаления объектов
global ProtoPath;
visible all;
defarr obj3[1000];
qAll=sysvar(60); //== Общее количество елементов
n=0;
i=0; //== Счетчик
Loop: //== Цикл по всем объектам для заполнения массивов
i=i+1;
if (i<=qAll)
  {
  obj1=getobjnum(i);  //== Получаем порядковый номер элемента в сцене
  obj2=GetObjType(obj1);  //== Получаем тип объекта
   if (obj2==12) {n=n+1; obj3[n]=obj1;}     //== 12-если объект сплайн
goto Loop;
  }
//== Удаляем все выбранное
i=0;
loop1:
i=i+1;
if (i<=n) {delete obj3[i]; goto loop1;}
exit;
bel62
 
Сообщения: 160
Зарегистрирован: 29 май 2012 12:12

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

Сообщение Алек(андр » 15 сен 2014 12:57

bel62 писал(а):
Алек(андр писал(а):
bel62 писал(а):Подскажите какой командой в макро можно удалить все "плоские области" в сцене?
https://yadi.sk/d/K8mRHDOrbUBUY

У них тип -12
просканируйте сцену и затем удалите все все объекты у которых getobjtype(obj) вернет -12

Тип 12 на это не реагирует.
Код: Выделить всё
//-- Программа для выбора и удаления объектов
global ProtoPath;
visible all;
defarr obj3[1000];
qAll=sysvar(60); //== Общее количество елементов
n=0;
i=0; //== Счетчик
Loop: //== Цикл по всем объектам для заполнения массивов
i=i+1;
if (i<=qAll)
  {
  obj1=getobjnum(i);  //== Получаем порядковый номер элемента в сцене
  obj2=GetObjType(obj1);  //== Получаем тип объекта
   if (obj2==12) {n=n+1; obj3[n]=obj1;}     //== 12-если объект сплайн
goto Loop;
  }
//== Удаляем все выбранное
i=0;
loop1:
i=i+1;
if (i<=n) {delete obj3[i]; goto loop1;}
exit;


не +12 , а -12
Вот в этом месте у Вас не так
if (obj2==-12)
Аватара пользователя
Алек(андр
 
Сообщения: 1164
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

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

Сообщение evgeniyart » 13 окт 2014 14:59

Прописываю новый тип фасада МДФ 16 мм, с наклеенным пластиком, и всё это в алюминиевом кромочном профиле
Материал фасада - МДФ
Материал вставки - Пластик
Ручка по умолчанию устанавливается по толщине материала, а требуется толщина МДФ+Толщина пластика + 2 мм.
Подскажите пожалуйста, как разумнее всего решить этот вопрос ??
Изображение
_______________________
на данный момент вопрос решен, ручка ставится по чуть измененной макропрограмме установки ручки.
Аватара пользователя
evgeniyart
 
Сообщения: 313
Зарегистрирован: 21 апр 2013 20:36

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

Сообщение Алек(андр » 14 окт 2014 09:52

evgeniyart писал(а):Прописываю новый тип фасада МДФ 16 мм, с наклеенным пластиком, и всё это в алюминиевом кромочном профиле
Материал фасада - МДФ
Материал вставки - Пластик
Ручка по умолчанию устанавливается по толщине материала, а требуется толщина МДФ+Толщина пластика + 2 мм.
Подскажите пожалуйста, как разумнее всего решить этот вопрос ??
Изображение
_______________________
на данный момент вопрос решен, ручка ставится по чуть измененной макропрограмме установки ручки.

Может просто в самой модели ручки ошибка?!

Вообщем то саму дверь создает макрос makedoorwing.mac
Там есть такой кусок, где ставится ручка.
Код: Выделить всё
macro Protopath+"GetFasThin.mac" ByRef h_fas FasadType, ARMX, ARMZ;
if (Handle!=0)
{
  HND_mac=PriceInfo(DoorKonst,"HNDMac",PriceInfo(FasadType,"HNDMac","",2),2);
  if (Len(HND_Mac)!=0) //-- Если задано имя макропрограммы установки ручки
  {
     //-- Особенная установка ручки
    macro Protopath+HND_Mac
        x1-R_Fas,y1+h_fas,z1-D_Fas,         //-- Базовый угол двери
        W1+R_Fas+L_Fas,H1+U_Fas+D_Fas,abs(Variant)  //-- Ширина, высота и сторона открывания двери
      Handle,ARMX,ARMZ,ARMA;  //-- Тип ручки и параметры положения
  }
  else
  {
     //-- Установка ручки по-умолчанию
    macro Protopath+"DoorHND.mac"
        x1-R_Fas,y1+h_fas,z1-D_Fas,         //-- Базовый угол двери
        W1+R_Fas+L_Fas,H1+U_Fas+D_Fas,abs(Variant)  //-- Ширина, высота и сторона открывания двери
      Handle,ARMX,ARMZ,ARMA;  //-- Тип ручки и параметры положения
  }
}


Как видим у типа фасада может быть определен макрос который ставит ручку .
Он определяется свойством HNDMac.
Если это свойство неопределено, то используется DoorHND.mac

поскольку позиция ручки определена y1+h_fas с учетом толщины фасада, то в Вашем случае либо толщина определяется неверно, либо макрос не тот или ручка в файле сдвинута по y/
Аватара пользователя
Алек(андр
 
Сообщения: 1164
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

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

Сообщение VEB » 17 дек 2014 09:42

Стоит следующая задача. Есть фасад в алюминиевой рамке. Есть профиля для этой рамки, заведённые в номенклатуре по цветам и внесённые в группу "Профили алюминиевых фасадов". Один из этих профилей назначен для фасада материалом по умолчанию.
Необходимо при установке двери выбрать цвет профиля из группы "Цвет профиля", передать его в макрос построения фасада, найти в номенклатуре профиль, соответствующего цвета и с таким же типом профиля как профиль по умолчанию, назначить в качестве материала рамки найденный профиль.
С выбором из списка и передачей проблем нет, а вот поиск нужного профиля вызвал затруднение.
Заранее благодарен за помощь в решении вопроса.
ООО "Артмакс Лайф"
ПКМ 7.3
Аватара пользователя
VEB
 
Сообщения: 118
Зарегистрирован: 24 фев 2014 07:10

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

Сообщение Роман Николаевич » 17 дек 2014 10:43

VEB писал(а):Необходимо при установке двери выбрать цвет профиля из группы "Цвет профиля", передать его в макрос построения фасада, найти в номенклатуре профиль, соответствующего цвета и с таким же типом профиля как профиль по умолчанию, назначить в качестве материала рамки найденный профиль. С выбором из списка и передачей проблем нет, а вот поиск нужного профиля вызвал затруднение.

Для поиска нужного профиля используйте команду NPGetByWhere. Первым критерием для поиска у Вас будет свойство "Тип профиля", по которому Вы сможете найти в базе все профили, относящиеся к определенному типу. Что касается цвета, то тут нужно определиться по какому признаку Вы будете сопоставлять цвет из группы "Цвет профиля" с цветом профиля из Номенклатуры. Варианты могут быть разные.
Например, у всех цветов группы "Цвет профиля" в Номенклатуре заводите свойство "Текстура" и такое же свойство с соответствующими значениями назначаете профилям. Тогда можно, сопоставляя свойство "Текстура", находить профиль нужного цвета в базе.
Или же можно "зашиться" на название профилей в Номенклатуре, как это сделано в системах дверей. Т.е. в названии профиля в конце последним словом писать название цвета. Сопоставление в данном случае можно делать по названию цвета в группе "Цвет профиля" и по последнему слову в названии самого профиля.
Так же можно завести свое собственное свойство и делать поиск профиля так же, как и при использовании свойства "Текстура".
Техническая поддержка К3-Мебель roman@k3info.ru
Центр "ГеоС", Нижний Новгород
http://www.k3-mebel.ru
Аватара пользователя
Роман Николаевич
 
Сообщения: 799
Зарегистрирован: 30 ноя 2010 12:29

Пред.След.

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

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

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

cron