DIESEL
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > DIESEL

DIESEL

Ответ
Поиск в этой теме
Непрочитано 10.10.2006, 11:34 #1
DIESEL
plaz
 
Проектирование обустройства нефтяных месторождений
 
Самара
Регистрация: 28.08.2003
Сообщений: 352

Вопрос знатокам!
Создал кнопку:
Код:
[Выделить все]
^C^C_modemacro;$M=$(strcat "M1:" $(rtos,$(getvar,UserR1)));
но в командной строке появляется надпись:
Код:
Во первых лишний пробел между ":" и "50", а самое главное чо за вопросы?
Где собака порылась? Help!!!
Просмотров: 6931
 
Автор темы   Непрочитано 10.10.2006, 11:45
#2
plaz

Проектирование обустройства нефтяных месторождений
 
Регистрация: 28.08.2003
Самара
Сообщений: 352


Кстати еще в тему. Каким образом записать макрос чтобы работало условие: если UserR1>0, то одно значение в ком.строке, если меньше 0 то другое. Сам попробовал написать - херня получатся:
Код:
[Выделить все]
^C^C_modemacro;$M=$(if,$(>,$(gevar,userr1),0),$(strcat "M1:" $(getvar,userr1)),$(strcat "M" $(/,1,$(getvar,userr1)) ":1")));
plaz вне форума  
 
Непрочитано 10.10.2006, 11:48
#3
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


Спробуй
Код:
[Выделить все]
^C^C_modemacro;"M1:"$(rtos,$(getvar,"Userr1"));
ДОбавлено:
А полное решение:
Код:
[Выделить все]
^C^C^P_modemacro;"M1:"$(if,$(>,$(getvar,"userr1"),0),$(rtos,$(getvar,"userr1")),"1")
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.10.2006, 11:59
#4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Код:
[Выделить все]
^C^C_modemacro;M1:$M=$(if,$(>,$(getvar,UserR1),0),$(rtos,$(getvar,UserR1)),"ZZZ");
VVA вне форума  
 
Автор темы   Непрочитано 10.10.2006, 12:00
#5
plaz

Проектирование обустройства нефтяных месторождений
 
Регистрация: 28.08.2003
Самара
Сообщений: 352


Цитата:
Сообщение от kpblc
Спробуй
Код:
[Выделить все]
^C^C_modemacro;"M1:"$(rtos,$(getvar,"Userr1"));
ДОбавлено:
А полное решение:
Код:
[Выделить все]
^C^C^P_modemacro;"M1:"$(if,$(>,$(getvar,"userr1"),0),$(rtos,$(getvar,"userr1")),"1")
Спасибо за наводку! Только работать будет так:
Код:
[Выделить все]
^C^C_modemacro;M1:$M=$(rtos,$(getvar,Userr1));
plaz вне форума  
 
Непрочитано 10.10.2006, 12:07
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


Я пробовал на 2005, нормально сработало.
Насчет разного результата... Можно попробовать (cond) использовать. А можно и значение засовывать в users* - переменную. Она ж все равно обнуляется при выходе из файла. И в modemacro напрямую засовывать ее значение. Скорее всего, тебе так и потребуется.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 10.10.2006, 12:51
#7
plaz

Проектирование обустройства нефтяных месторождений
 
Регистрация: 28.08.2003
Самара
Сообщений: 352


Цитата:
Сообщение от kpblc
Я пробовал на 2005, нормально сработало.
У меня на 2005 заткнулась на ковычках.

Цитата:
Насчет разного результата... Можно попробовать (cond) использовать. А можно и значение засовывать в users* - переменную. Она ж все равно обнуляется при выходе из файла. И в modemacro напрямую засовывать ее значение. Скорее всего, тебе так и потребуется.
В принципе, наверное так и сделаю, просто не хотелось вводить еще одну переменную. [/quote]
plaz вне форума  
 
Непрочитано 01.02.2013, 18:04
#8
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,013


Уважаемые знатоки, подскажите!
Возможно ли с помощью DIESEL производить операции с текстом?
Например, нужно определить два последних символа какого-то известного текста.
В моем случае это - имя блока %<\AcObjProp Object(%<\_ObjId 2130013312>%).Name \f "%tc4">%
Используется в тексте внутри блока.
Вот из него нужно получить два последних символа.
Точнее обрезать текст до последних двух (из "Имя блока" получить "ка").
Помогите!!!
Nike вне форума  
 
Непрочитано 01.02.2013, 18:12
#9
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


Попробуй нечто типа $(substr,Строка,$(-,$(strlen,Строка),2))
Но я не уверен, что сработает (проверить нет возможности)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.02.2013, 18:22
#10
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,013


Спасибо!

А как бы в вместо "Строка" подсунуть имя блока?
Это возможно?

Последний раз редактировалось Nike, 01.02.2013 в 19:05.
Nike вне форума  
 
Непрочитано 09.04.2013, 16:06
#11
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Возникла аналогичная задачка. Только вместо имени блока надо было подсунуть имя слоя, точнее, поле, ссылающееся на имя слоя определенного объекта. Как я действовал. Сначала создал обычное поле со ссылкой на слой объекта полилинии (см. скрин в миниатюре). Затем в новом поле вставил DieselExpression (категория полей Прочее) выражение, предложенное Алексеем двумя постами выше, но вместо Строка вставил формулу поля %<\AcObjProp Object(%<\_ObjId 8796083768288>%).Layer>%, т.е. получилось
Код:
[Выделить все]
$(substr,%<\AcObjProp Object(%<\_ObjId 8796083768288>%).Layer>%,$(-,$(strlen,%<\AcObjProp Object(%<\_ObjId 8796083768288>%).Layer>%),1))
Поле создалось, но после смены слоя полилинии и регенерации, сохранении и т.п. - не обновляется. Переменная FIELDEVAL картины не меняет. Командой _.updatefield тоже эффект нулевой, хотя и пишет:
Цитата:
Команда: _.updatefield
Выберите объекты: Противоположный угол: найдено: 2
Выберите объекты:
Найдено полей: 4.
Обновлено полей: 4.
А ведь полей там, и вправду, 4 (см. чертеж в attach): первые два видны, а два другие - внутри Diesel-выражения. Как так-то? Обновляется оно только если в редакторе текста, на поле, вызвать контекстное меню и выбрать Обновить поле. А если таких полей в чертеже десяток, и не один? В общем, это не вариант, по ходу
P.S. AutoCAD 2011
Миниатюры
Нажмите на изображение для увеличения
Название: Поле.JPG
Просмотров: 146
Размер:	49.9 Кб
ID:	100734  
Вложения
Тип файла: dwg
DWG 2007
Diesel в полях.dwg (73.8 Кб, 1480 просмотров)

Последний раз редактировалось skkkk, 09.04.2013 в 16:17. Причина: Перезалил в 2007 формате, а также P.S.
skkkk вне форума  
 
Непрочитано 30.09.2013, 21:50
#12
Angel_and


 
Регистрация: 17.09.2012
Сообщений: 62


можно ли в макросе языком DIESEL задать новое значение системной переменной ? конкретно
LAYEREVAL , LAYERNOTIFY , LAYEREVALCTL надо чтобы все стали "0". при печати в Паблиш 30-40 чертежей прям беда эти сообщения о слоях .
эти переменные индивидуальны для каждого файла. хочу просто сделать кнопку , которая будет давать автоматом переменным значения "0". автокад 2012 LT .
буду благодарна за помощь и разъяснение.
__________________
что такое любовь по сравнению с Автокадом ?
Angel_and вне форума  
 
Непрочитано 30.09.2013, 23:03
#13
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


$(setvar,layereval,0)
Кажется, так.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.09.2013, 23:22
#14
Angel_and


 
Регистрация: 17.09.2012
Сообщений: 62


спасибо сейчас попробую .
нет. не вышло. видимо это не весь синтаксис.
работает вот так ^C^C_setvar;layereval;0;
а когда прибавляю в строку другие переменные , то не работает.
__________________
что такое любовь по сравнению с Автокадом ?

Последний раз редактировалось Angel_and, 30.09.2013 в 23:52.
Angel_and вне форума  
 
Непрочитано 01.10.2013, 01:51
#15
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
setvar
нет такой функции в дизеле и видимо не может быть по определению.
Angel_and, у вас автокад LT? Если нет, то не страдайте, лучше лисп написать
gomer вне форума  
 
Непрочитано 01.10.2013, 08:05
#16
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Продолжу Ваш диалог =)
Цитата:
Сообщение от gomer Посмотреть сообщение
Angel_and, у вас автокад LT?
Цитата:
Сообщение от Angel_and Посмотреть сообщение
автокад 2012 LT .
Boxa вне форума  
 
Непрочитано 01.10.2013, 11:00
#17
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


ну я не доглядел чуток...
^C^CLAYEREVAL;0;LAYERNOTIFY;0;LAYEREVALCTL;0;
так попробуте, но это плохо, ибо обратно так просто не вернуть, если что...
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > DIESEL