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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > AutoLisp в формулах (полях)

AutoLisp в формулах (полях)

Ответ
Поиск в этой теме
Непрочитано 30.09.2010, 20:04 #1
AutoLisp в формулах (полях)
Supermax
 
Руководитель фирмы
 
Москва
Регистрация: 28.03.2007
Сообщений: 1,831

Нигде не могу найти как в поле вставить выражение AutoLisp-a и возможно ли это.
Мне надо в поле вставить значение заданной DXF точечной пары из конкретного объекта.

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

Разъясню свою проблему.
У меня есть динамические блоки - "виртуальные изделия" в которых приписанные свойства реализованы динамическими свойствами. Мне надо собрать все значения некоторых свойств и соединить в одну строку для включения в спецификацию. До сих пор я все делал программно, но сейчас мне надо как-то привязать к блоку такую сцепку, чтобы меняя параметры блока у меня получалась новая строка автоматически и без применения реакторов.

Дело в том, что динамические свойства не отражают свое состояние во vla-представлении

Код:
[Выделить все]
; IAcadObject: The standard interface for a basic AutoCAD object
; Property values:
;   Application (RO) = #<VLA-OBJECT IAcadApplication 00d591b4>
;   Document (RO) = #<VLA-OBJECT IAcadDocument 0156d6e0>
;   Handle (RO) = "55EF"
;   HasExtensionDictionary (RO) = 0
;   ObjectID (RO) = -1462770312
;   ObjectName (RO) = "AcDbBlockLookupAction"
;   OwnerID (RO) = -1462770400
T
только в виде точечных пар
Код:
[Выделить все]
((-1 . <Entity name: -57301a88>) (0 . "BLOCKLOOKUPACTION") (330 . <Entity name: 
-57301ae0>) (5 . "55EF") (100 . "AcDbEvalExpr") (90 . 12) (98 . 29) (99 . 6) 
(100 . "AcDbBlockElement") (300 . "Lookup1") (98 . 29) (99 . 6) (1071 . 8) (100 
. "AcDbBlockAction") (70 . 0) (71 . 0) (1010 -127.165 76.9046 0.0) (100 . 
"AcDbBlockLookupAction") (92 . 0) (93 . 1) (301 . "") (303 . "") (94 . 8) (95 . 
1) (96 . 0) (282 . 1) (305 . "Custom") (281 . 0) (304 . "lookupString") (280 . 
1))
Даже имя надо из них доставать.
Поля замечательно работают с vla-объектами, а с dxf не дружат.

Как быть?

Последний раз редактировалось Supermax, 01.10.2010 в 22:47.
Просмотров: 4913
 
Непрочитано 30.09.2010, 21:20
#2
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Даже если лисп можно было бы сделать в полях - это глупо, потому что поля работают очень медленно.
Sleekka вне форума  
 
Непрочитано 30.09.2010, 21:26
#3
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Sleekka Посмотреть сообщение
это глупо
Ой ли? Предложи свой вариант решения этого вопроса.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 30.09.2010, 22:08
#4
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Свою проблему я решил и без лиспа.
Собрал все значения свойств блока через закладку BlockPlaceholder.
А в 2010 каде есть динамический параметр - таблица, который может оперировать с атрибутами и менять им значение в зависимости от выбранной позиции. Через нее можно в строку собирать свойства в зависимости от выбранного значения видимости (к примеру).
То-есть есть атрибут, а в таблице целая куча полей для него, которые она ему подсовывает.

Но что-то автолисповское все же есть в формулах, правда не пойму как этим пользоваться.
Что такое LispVariable и DieselExpression?

Последний раз редактировалось Supermax, 30.09.2010 в 22:14.
Supermax вне форума  
 
Непрочитано 01.10.2010, 08:27
#5
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Цитата:
Что такое LispVariable и DieselExpression?
LispVariable - это возможность обратиться к глобальной переменной лисп, то же что и в ком строке написать !переменная
DieselExpression - выражение на языке дизель, язык который используется для написания макросов в кнопках меню, см. книгу В.Свет
Sleekka вне форума  
 
Непрочитано 01.10.2010, 09:00
#6
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Sleekka Посмотреть сообщение
см. книгу В.Свет
Можно было написать "смотри справку (F1)" - там это тоже есть.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 01.10.2010, 19:40
#7
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Хм, справку посмотри ... А то я не посмотрел буд-то. Я если рою Автокад, так все его кишки перетряхиваю. И книга Света у меня есть в бумажном виде. И что? В кнопках дизель рулит вместе с лиспом и не кашляет, а тут, что не наберу - ответ один "кривой код". Я и так, и сяк - все что идет в кнопках, а там и лисп идет - тут не идет.
Может дизель тут на бензине работает?

Примерчик бы, работающий.

Потом, в справке про дизель в формулах ни гу гу. Есть такой мол и все.
Про лисп переменные, тоже не понятно зачем и как их использовать.
Вот такие у меня пироги
Supermax вне форума  
 
Непрочитано 01.10.2010, 19:47
#8
gomer

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


Цитата:
Сообщение от Supermax Посмотреть сообщение
Примерчик бы, работающий.
Вы хотите чтобы у вас при каждой регенерации пропадали панели инструментов и перезагружалась Windows?
gomer вне форума  
 
Автор темы   Непрочитано 01.10.2010, 19:53
#9
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Ну, я тоже не пальцем деланный. И предупрежден - значит вооружен.
Supermax вне форума  
 
Непрочитано 01.10.2010, 20:09
#10
gomer

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


Цитата:
Сообщение от Supermax Посмотреть сообщение
не пальцем деланный
Речь не только о вас... Впрочем... чтобы вам не напрягаться над этой проблемой, задумано так, что в полях отображаются только статичные выражения... И дизель специально так обрезан, чтобы только читать системные переменные...
gomer вне форума  
 
Автор темы   Непрочитано 01.10.2010, 20:17
#11
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Боюсь, что его тут совсем обрезали. У меня как только стало не получаться (интересный каламбур получился), я сразу перешел на принцип и начал с простейших элементов дизеля. Ничего не идет. Ругается на все.
Говоришь только читать? Так прочти что-нибудь, сделай милость и покажи. Может я свой кад сломал, вот он и глючит?
Supermax вне форума  
 
Непрочитано 01.10.2010, 20:47
#12
gomer

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


Цитата:
Сообщение от Supermax Посмотреть сообщение
Ничего не идет. Ругается на все.
Может дать ему карамельку?
Цитата:
$(edtime,$(getvar,date),DDDD DD MONTH YYYY)
gomer вне форума  
 
Автор темы   Непрочитано 01.10.2010, 21:33
#13
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™



Работает ...
Осталось понять какие функции тут обрезали.
И конечно приятно, что кад я еще не сломал.

А зачем нужны лисп переменные если нет лиспа?
Сам спросил, сам и отвечаю.
Создаем лиспом переменную, в которую пишем то, что нам надо. В поле находим через LispVariable имя нашей созданной переменной и поле будет отображать значение этой переменной.
Очень удобно. Текст в блоке, а тот в своем блоке и даже во внешней ссылке, а поменял значение переменной - и текст изменился.
Так можно штампы заполнять.

Последний раз редактировалось Supermax, 01.10.2010 в 21:55.
Supermax вне форума  
 
Непрочитано 01.10.2010, 21:59
#14
Кулик Алексей aka kpblc
Moderator

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


Вешается реактор на смену системной переменной ctab, который устанавливает значение глобальной LISP-переменной. А в поле засунуть именно эту переменную. В чем вопрос-то?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.10.2010, 22:01
#15
gomer

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


Цитата:
Сообщение от Supermax Посмотреть сообщение
Так можно штампы заполнять.
Для штампов не годится... Время жизни переменой AutoLisp - 1 AutoCAD сессия...
gomer вне форума  
 
Автор темы   Непрочитано 01.10.2010, 22:23
#16
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


А я создал переменную, запихнул ее в поле и стер, присвоив ей nil. И что? Переменной нет, а ее старое значение в поле застряло и регенерацией не уберается.
Потом я создал переменную
Код:
[Выделить все]
(setq andrey "мама\nмыла\nраму")
Запихнув в строку \n и получилось многострочечное поле (лень картинку показывать, сами попробуйте)

Стер переменную, сохранил файл, закрыл, открыл, а мама так и продолжает мыть раму.
Supermax вне форума  
 
Непрочитано 01.10.2010, 22:29
#17
Кулик Алексей aka kpblc
Moderator

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


_.fieldupdate попробуй )
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 01.10.2010, 22:37
#18
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


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

Во мужики! Придумал применение!
Берете весь текст пояснительной записки запихиваете в переменную не забывая про \n.
В М-тексте тупо указываете на эту переменную и потом ее стираете.
Все, баста карапузики, текст уже не поменять, только через FineReader распозновать растр.

Даже через буфер в другой файл копируется, несмотря на отсутствие там этой переменной.

Еще узнал, LispVariable видит только те перменные, в которых значение - строка или числа.

Последний раз редактировалось Supermax, 01.10.2010 в 22:54.
Supermax вне форума  
 
Непрочитано 01.10.2010, 22:54
#19
gomer

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


Цитата:
Сообщение от Supermax Посмотреть сообщение
Стер переменную, сохранил файл, закрыл, открыл, а мама так и продолжает мыть раму.
Пока какая-нибудь обезьяна не обновит поле гранатой...
fieldupdate не канает, только гранатой... то бишь ручками...
gomer вне форума  
 
Автор темы   Непрочитано 01.10.2010, 23:14
#20
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Не, есть такая фигня, при нажатии правой кнопки мыши, как Convert Field To Text. И поле становится текстом, даже при стертой переменной.
Supermax вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > AutoLisp в формулах (полях)



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение фигуры через AutoLISP severnet LISP 42 20.05.2015 09:40
передача данных из AutoLisp в Excel Victorovich LISP 2 03.12.2011 22:28
Как отладить нейтив и менеджед код в COM объекте который используется из AutoLISP? lexluther LISP 1 12.08.2009 08:37
Создание 3D-модели зубчатого колеса в AutoLISP Иван Андреевич LISP 3 18.11.2008 19:39
Как выделить примитивы в AutoLISP? RastaMANNN LISP 3 10.06.2008 00:37