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

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

Программное создание lookup table

Ответ
Поиск в этой теме
Непрочитано 10.07.2025, 10:13 #1
Программное создание lookup table
Ax3
 
Programming, automation, CADs, GISs. СибМИР
 
Россия, Санкт-Петербург
Регистрация: 02.02.2007
Сообщений: 310

Привет, браться по каду.
Программно создать сам lookup могу через (vl-cmdf "_.bparameter" ...).
Программно создать lookup table к нему (vl-cmdf "_.baction") не получается, в момент создания lookupaction (AcDbBlockLookupActionEntity) выскакивает визуальная форма для заполнения lookup table, и никак её не подавить.
Программу для заполнения lookup table из экселя на форуме видел, но даже она требует предварительно создать колонки lookup table пользователем в визуальном интерфейсе.

какой-нибудь бы аналог entmakex, но для lookupactions...
буду признателен за идеи.
__________________
На LISPе можно мыслить!
Просмотров: 473
 
Автор темы   Непрочитано 10.07.2025, 18:24
#2
Ax3

Programming, automation, CADs, GISs. СибМИР
 
Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 310


нашёл вот это:
https://forum.abok.ru/index.php?showtopic=14612&st=573

и вот это:
https://forum.dwg.ru/showthread.php?p=182362#post182362

разбираюсь...

п.с. и вот это ещё:
https://forum.dwg.ru/showthread.php?t=14519
__________________
На LISPе можно мыслить!

Последний раз редактировалось Ax3, вчера в 01:01.
Ax3 вне форума  
 
Автор темы   Непрочитано 11.07.2025, 14:06
#3
Ax3

Programming, automation, CADs, GISs. СибМИР
 
Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 310


в общем, по результатам осмысления наработок Kpblc и Supermax наваял на основе программы Supermax-а (по записи лукапов из экселя, у меня с ходу не заработала, пришлось разбираться) некую версию, которая выдаёт следующий результат:
(eval_graf_output)
("n18=" ((-1 . <Entity name: 1f260db1a60>) (0 . "BLOCKLOOKUPACTION") (330 . <Entity name: 1f260db1900>) (5 . "7F9296") (100 . "AcDbEvalExpr") (90 . 11) (98 . 33) (99 . 202) (100 . "AcDbBlockElement") (300 . "Lookup1") (98 . 33) (99 . 202) (1071 . 0) (100 . "AcDbBlockAction") (70 . 0) (71 . 0) (1010 121.607 -73.3569 0.0) (100 . "AcDbBlockLookupAction") (92 . 1) (93 . 1) (301 . "") (302 . "123") (303 . "") (94 . 5) (95 . 1) (96 . 0) (282 . 1) (305 . "Custom") (281 . 1) (304 . "lookupString") (280 . 1)))
("n18new=" ((-1 . <Entity name: 1f260db1a60>) (0 . "BLOCKLOOKUPACTION") (330 . <Entity name: 1f260db1900>) (5 . "7F9296") (100 . "AcDbEvalExpr") (90 . 11) (98 . 33) (99 . 202) (100 . "AcDbBlockElement") (300 . "Lookup1") (98 . 33) (99 . 202) (100 . "AcDbBlockAction") (70 . 0) (71 . 0) (100 . "AcDbBlockLookupAction") (92 . 1) (93 . 1) (301 . "") (302 . "123") (303 . "") (94 . 5) (95 . 1) (96 . 0) (282 . 1) (305 . "Custom") (281 . 1) (304 . "lookupString") (280 . 1)))
("(entmod n18new)=" nil)
("n22=" ((-1 . <Entity name: 1f260db1a60>) (0 . "BLOCKLOOKUPACTION") (330 . <Entity name: 1f260db1900>) (5 . "7F9296") (100 . "AcDbEvalExpr") (90 . 11) (98 . 33) (99 . 202) (100 . "AcDbBlockElement") (300 . "Lookup1") (98 . 33) (99 . 202) (100 . "AcDbBlockAction") (70 . 0) (71 . 0) (100 . "AcDbBlockLookupAction") (92 . 1) (93 . 1) (301 . "") (302 . "000") (303 . "") (94 . 5) (95 . 1) (96 . 0) (282 . 1) (305 . "Custom") (281 . 1) (304 . "lookupString") (280 . 1)))
("(entmod n22):" nil)
("(entupd (cdr (car n22))):" nil)

В темах про динамические блоки ("Мои динамические блоки" и "Мои динамические блоки 2"), где это обсуждалось, не могу отписаться, т.к. обе закрыты.
Я так понял, что смысл выполняемых преобразований сводится к тому, чтобы в dxf-списке словаря, отвечающего за таблицу значений лукапа, заменить 302 группы на пары, содержащие нужные значения, попутно удалив группы 1071 и 1010, и сделать entmod по модифицированному списку.
Но, видимо, всё сложнее, т.к. у меня entmod не отрабатывает, возвращает nil, соответственно и содержимое lookup table не меняется...

Kpblc, Supermax, если заглянете в эту тему, буду благодарен за подсказки, куда дальше копать.

П.С. На появляющуюся при создании lookupaction визуальную форму я вообще забил, думаю, скажу пользователям, чтоб просто тыкали OK и ничего в ней не делали. Если получится программно скорректировать lookup table, конечно.
П.П.С. У меня параметр lookup1, к нему присоединена таблица lookup table с одним возможным значением "123" (вывод значения n18 это показывает в группе (302."123")), я пытаюсь это значение заменить на "000" (в выводе значения n22 видно (302."000"))
__________________
На LISPе можно мыслить!

Последний раз редактировалось Ax3, 11.07.2025 в 14:33.
Ax3 вне форума  
 
Автор темы   Непрочитано вчера, 01:00
#4
Ax3

Programming, automation, CADs, GISs. СибМИР
 
Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 310


Понятно. В AutoCAD 2007 (entmod) для BLOCKLOOKUPACTION работает, и работало у supermax-а соответственно. В AutoCAD 2018 уже не работает.
Ради интереса проверял в ACAD2018 вручную несколько версий урезанных списков, сработал только один вариант, не содержащий вообще никаких кодов, кроме entity name:
;(entmod (list (cons -1 (handent "7E5993")))) ;- ok
;(entmod (list (cons -1 (handent "7E5993")) (cons 302 "123"))) ; - nok
;(entmod (list (cons -1 (handent "7E5993")) (cons 302 "000"))) ; - nok
;(entmod (list (cons -1 (handent "7E5993")) (cons 301 "000") (cons 302 "000") (cons 303 ""))) ; - nok
;(entmod (list (cons -1 (handent "7E5993")) (cons 92 1) (cons 301 "000") (cons 302 "000") (cons 303 ""))) ; - nok
;(entmod (list (cons -1 (handent "7E5993")) (cons 305 "Custom"))) ; - nok
;(entmod (list (cons -1 (handent "7E5993")) (cons 0 "BLOCKLOOKUPACTION"))) ; - ok
;(entmod (list (cons -1 (handent "7E5993")) (cons 0 "BLOCKLOOKUPACTION") (cons 330 (handent "7E5984")) )) ; - nok
;(entmod (list (cons -1 (handent "7E5993")) (cons 0 "BLOCKLOOKUPACTION") (cons 5 "7E5993") )) ; - nok
;(entmod (list (cons -1 (handent "7E5993")) (cons 0 "BLOCKLOOKUPACTION") (cons 100 "AcDbEvalExpr"))) ; - nok
;(entmod (list (cons -1 (handent "7E5993")) (cons 0 "BLOCKLOOKUPACTION") (cons 90 9))) ; - nok
;(entmod (list (cons -1 (handent "7E5993")) (cons 0 "BLOCKLOOKUPACTION") (cons 300 "Lookup1"))) ; - nok
;(entmod (list (cons -1 (handent "7E5993")) (cons 0 "BLOCKLOOKUPACTION") (cons 305 "Custom"))) ; - nok

Ладно, буду дальше копать...
__________________
На LISPе можно мыслить!
Ax3 вне форума  
 
Непрочитано вчера, 18:02
#5
Кулик Алексей aka kpblc
Moderator

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


Насколько я помню, в 2016 версии что-то там поменяли, и коды SuperMax'а работать перестали. А так-то открытого API для подобной модификации дин.блоков вроде бы нет.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Программное создание lookup table



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программное создание мультивыноски Makswell Программирование 64 06.02.2025 19:39
Программное создание сплайна Fedorino Программирование 5 01.04.2014 11:06
Редактор блоков - Lookup table не редактируется Acad2006 ытя AutoCAD 12 17.10.2011 18:00
программное создание размеров в dxf файле _Oleg_ Программирование 4 01.02.2011 16:36
Программное создание стиля для mleader AutoCAD 2008 swkx Программирование 6 15.04.2010 20:11