Jump to content

Адаптация Lisp под Nanocad


aerohost
 Share

Recommended Posts

36 минут назад, aerohost сказал:

Групповые коды DXF 90 поставить на 2( скрыть фон), потом поставить DXF 90 поставить на 3 ( показать фон) то все работает

все не так.

 

Спойлер

image.png.3b930b65dec847dbd002f9c034fff1af.png

 

Link to comment
Share on other sites

48 минут назад, EdwardSt сказал:

все не так.

 

  Фрагмент справки (Показать контент)

image.png.3b930b65dec847dbd002f9c034fff1af.png

 

Приложенная картинка не совпадает с фактом, проверено научным тыком. Возможно ошибаюсь. Из опыта 0 - отключает фон и как я понял затирает dfx 90 ,не даёт потом использовать 1,2,3 .

1 - делает фон по цвету. 

2-отключает фон(даёт использовать 1,3,2)

3- фон по чертежу

 

 

 

 

 

Screenshot_2021-11-02-15-14-04-323_com.android.chrome.jpg

Edited by aerohost
  • Like 1
Link to comment
Share on other sites

2 минуты назад, aerohost сказал:

Приложенная картинка не совпадает с фактом, проверено научным тыком. Возможно ошибаюсь. Из опыта 0 - отключает фон и как я понял затирает dfx 90 ,не даёт потом использовать 1,2,3 .

1 - делает фон по цвету. 

2-отключает фон(даёт использовать 1,3,2)

3- фон по чертежу

 

Если это так (я сам проверил только 0 - отключение фона, работает), то нужно тоже оформлять как баг.

Значения должны соответствовать спецификациям DXF-кодов

  • Like 3
Link to comment
Share on other sites

1 час назад, aerohost сказал:

Приложенная картинка не совпадает с фактом, ...

 

Действительно, есть расхождение между справкой и практикой.

Вопрос, конечно, интересный, можно ли справку считать спецификацией.

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

 

По конкретике выяснилось следующее:

 

1. DXF-группа 90 представляет собой битовую маску (где 1 бит - есть/нет фон, 2 бит - цвет фона/установленнй цвет, 5 бит(нет в справке совсем!) - наличие рамки вокруг текста 

Спойлер

0 (0х00) - нет фона

1 (0х01) - есть фон, цвет фона фиксированный и лежит в группе 63

2 (0х10) - нет фона, цвет фона равен цвету окна (бессмысленная комбинация, но ее можно дубиться действиями вручную)

3 (0х11) - есть фон, цвет фона равен цвету окна

 

Если ко всем этим значениям приплюсовать 16 (0х10000) - взвести 5-й бит, то это означает все то же самое, но с рамкой вокруг блока текста

 

2. Если при каких-либо манипуляциях происходит сброс значения в 0, то эта DXF-группа 90 и связанные с ней 45, 63 и 421 из списка (entget ...) удаляются, что означает необходимость их формирования заново, если понадобится программно установить цвет заднего фона и/или рамку текста

 

3.При удалении DXF-группы 90 параметры 63, 45 (внимание!) именно для этого элемента где-то сохраняются, но не отображаются в списке (entget ...). Но при копировании этого элемента с отсутствующей группой 90 остальные параметры сбрасываются в некие дефолтные значения.

 

 

Дополнительно отмечу, что все три замечания относятся и к AC, и к NC.

На практике замечанием 3 лучше не пользоваться, т.к. ситуация трудно контролируемая.

Лучше использование явных определений.

 

Итого, в сухом остатке

Спойлер

   (if (not (assoc 90 da)) 
      (setq da (append da (list
        (cons 90  17); 17=16+1  - текст с рамкой и фиксированным цветом
        (cons 63 223);223 - индексированный цвет фона 223 
        (cons 45  1.5); масштаб фона 1.5 - здесь он равен дефолтному 
        )))) 

Значения, понятно, необходимо менять на свои с использованием переменных

 

  • Like 2
Link to comment
Share on other sites

Попытался переписать функцию BounderyMText с применением входных параметров.

В скрипте внес достаточно подробные комментарии, а также привел варианты вызова функции с различными параметрами. Запрос самих параметров и выбор объектов в данном скрипте не разбирался.

 

Все возможные варианты параметра цвет разбирать не стал (на группу 421 забил).

Просто предлагаю аккуратно использовать индексированные цвета 1-256.

В остальном вроде все прозрачно.

В АС не проверял, но тоже должно работать.

Пользуйтесь

 

BoundMText-ACNC.lsp

Edited by EdwardSt
  • Like 2
  • Thanks 2
Link to comment
Share on other sites

13 часов назад, EdwardSt сказал:

Вопрос, конечно, интересный, можно ли справку считать спецификацией.

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


Справка - это, конечно, не спецификация. Но, документ, точно и корректно описывающий текущее состояние дел должен быть. Это может быть отсылка к стандартной Спецификации Autodesk или свой собственный документ, но исследования DXF и ему подобных структур "методом тыка" - не вариант. ИМХО.

  • Like 2
Link to comment
Share on other sites

13 часов назад, EdwardSt сказал:

Попытался переписать функцию BounderyMText с применением входных параметров.

В скрипте внес достаточно подробные комментарии, а также привел варианты вызова функции с различными параметрами. Запрос самих параметров и выбор объектов в данном скрипте не разбирался.

 

Все возможные варианты параметра цвет разбирать не стал (на группу 421 забил).

Просто предлагаю аккуратно использовать индексированные цвета 1-256.

В остальном вроде все прозрачно.

В АС не проверял, но тоже должно работать.

Пользуйтесь

 

BoundMText-ACNC.lsp 2 \u043a\u0411 · 2 загрузки

Спасибо, но я вчера уже сделал в общем виде  в консоле, с контуром, с различным фоном , вроде все работает. Так же сделал со скрытым параметром 1 группы 90, просто в начале, когда запустил лисп,надо ввести 1, а не "Да" эквивалент параметра 3 группы 90.  Есть одно но, только цвет фона надо в самом файле менять надо(если использовать параметр 1), но мне надо или белый или цвет чертежа :)

BoundMText.lsp

Edited by aerohost
Link to comment
Share on other sites

13 часов назад, A.Kudrjashov сказал:

документ, но исследования DXF и ему подобных структур "методом тыка" - не вариант.

Но зачастую это единственно возможный вариант.

Документирование разработок часто отстает от собственно разработок.

Вот и приходится нащупывать границы функционала. 

И форум  - неплохое место для обмена опытом таких исследований)

Link to comment
Share on other sites

13 минут назад, EdwardSt сказал:

Документирование разработок часто отстает от собственно разработок.

Всегда отстает))

Даже у истинного кад куча недокументированных функций и некоторые документированные работают не так как заявлено.

Нано с его почти нулевой документацией (кое что есть по мультикад, но это другими разработчиками сделано)

Намного проще

Edited by doctorraz
  • Like 1
Link to comment
Share on other sites

В 03.11.2021 в 12:36, EdwardSt сказал:

все не так.

 

  Фрагмент справки (Показать контент)

image.png.3b930b65dec847dbd002f9c034fff1af.png

 

А можете тыкнуть где найти эту справку, что то я искал, не нашел

Link to comment
Share on other sites

В 03.11.2021 в 22:41, EdwardSt сказал:

Попытался переписать функцию BounderyMText с применением входных параметров.

В скрипте внес достаточно подробные комментарии, а также привел варианты вызова функции с различными параметрами. Запрос самих параметров и выбор объектов в данном скрипте не разбирался.

 

Все возможные варианты параметра цвет разбирать не стал (на группу 421 забил).

Просто предлагаю аккуратно использовать индексированные цвета 1-256.

В остальном вроде все прозрачно.

В АС не проверял, но тоже должно работать.

Пользуйтесь

 

BoundMText-ACNC.lsp 2 \u043a\u0411 · 5 загрузок

А можно как то данный лисп применить к мульивыноски, что бы лисп делал такой же функционал.Я немного не понял какая группая dfx отвечает за фон для мультивыноски 

Link to comment
Share on other sites

Прошу помочь разобраться с адоптацией лиспа Геокоординаты-xyz.lspподписыывающего мультивыноской координаты "х" и "у".

Nanocad мультиливыноску рисует, в команднной строке, прописывает полученные координаты но не выводит.

Edited by Aleksei_Tihonov
Link to comment
Share on other sites

2 часа назад, aerohost сказал:

Я немного не понял какая группая dfx отвечает за фон для мультивыноски

Конкретно с выноской не разбирался.

Спойлер

image.png.cb14e1d9db550dc732141f292f3ff104.png

...

image.png.a44f8df46db904b68349877a25e5688e.png

 

Link to comment
Share on other sites

1 час назад, lidia.antipina.ru сказал:

Выделите мультивыноску по (entget(car(entsel))) и посмотрите коды dxf, что там есть

Сделал это еще до своего предыдущего поста

Спойлер

Команда: (setq a (car (entsel)))

Выбор объектов

1 найдено

#<Имя примитива: 0000019CACA85070>

Команда: (entget a)

((-1 . #<Имя примитива: 0000019CACA85070>) (0 . "MULTILEADER") (5 . "562") (330 . #<Имя примитива: 0000019CF8BC8930>) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbMLeader") (270 . 2) (300 . "CONTEXT_DATA{") (40 . 1.0) (10 -12562.0 35751.4 0.0) (41 . 4.0) (140 . 4.0) (145 . 2.0) (174 . 1) (175 . 1) (176 . 0) (177 . 0) (290 . 1) (304 . "мой текст") (11 0.0 0.0 1.0) (340 . #<Имя примитива: 0000019CF8BC8070>) (12 -12560.0 35753.4 0.0) (13 1.0 0.0 0.0) (42 . 0.0) (43 . 0.0) (44 . 0.0) (45 . 1.0) (170 . 1) (90 . -1056964608) (171 . 1) (172 . 1) (91 . -939524096) (141 . 1.5) (92 . 0) (291 . 0) (292 . 0) (173 . 0) (293 . 0) (142 . 0.0) (143 . 0.0) (294 . 0) (295 . 0) (296 . 0) (110 0.0 0.0 0.0) (111 1.0 0.0 0.0) (112 0.0 1.0 0.0) (297 . 0) (302 . "LEADER{") (290 . 1) (291 . 1) (10 -12570.0 35751.4 0.0) (11 1.0 0.0 0.0) (90 . 0) (40 . 8.0) (304 . "LEADER_LINE{") (10 -12578.1 35736.1 0.0) (91 . 0) (92 . -1056964608) (305 . "}") (304 . "LEADER_LINE{") (10 -12571.6 35723.4 0.0) (91 . 1) (92 . -1056964608) (305 . "}") (271 . 0) (303 . "}") (272 . 9) (273 . 9) (301 . "}") (340 . #<Имя примитива: 0000019CF8BC9B30>) (90 . 17107968) (170 . 1) (91 . -1056964608) (341 . #<Имя примитива: 0000019CF8BC82B0>) (171 . -2) (290 . 1) (291 . 1) (41 . 8.0) (42 . 4.0) (172 . 2) (343 . #<Имя примитива: 0000019CF8BC8070>) (173 . 1) (95 . 1) (174 . 1) (175 . 0) (92 . -1056964608) (292 . 0) (93 . -1056964608) (10 1.0 1.0 1.0) (43 . 0.0) (176 . 0) (293 . 0) (294 . 0) (178 . 0) (179 . 1) (45 . 1.0) (271 . 0) (272 . 9) (273 . 9) (295 . 0))

Довольно развесистая клюква.

И почему цвет фона именно такой, как в выделенном фрагменте (а для красного фона он  - (91 . -1023410175)) еще необходимо разбираться.

Поэтому вопрос  @aerohost достаточно заковырист

Link to comment
Share on other sites

2 часа назад, EdwardSt сказал:

И почему цвет фона именно такой, как в выделенном фрагменте (а для красного фона он  - (91 . -1023410175)) еще необходимо разбираться.


Там применяется какой то сложный индекс
 

Спойлер

image.png.f8c90d76380dce25fea3c31337d17f80.png

 

Спойлер

image.thumb.png.4f7dd4ff758e4a1e486e0393821e09e4.png

 

Спойлер

image.thumb.png.1214bc7dd0d779e5904f9a59dadbda08.png

 

... но вот здесь описано, как можно работать с этими цветами, если я правильно понял вопрос.
https://www.theswamp.org/index.php?topic=40944.0

http://www.theswamp.org/index.php?topic=37313.msg454906#msg454906

 

Во всяком случае (princ (mleaderstylecolour->colour -1023410175)) возвращает 1.
https://gohtx.com/acadcolors.php
 

Edited by A.Kudrjashov
Дополнения
  • Like 1
Link to comment
Share on other sites

В 12.11.2021 в 18:18, EdwardSt сказал:

Битовая маска...

 

А откуда инфа? Ссылочкой не поделитесь?


AutoCAD 2012 DXF Reference
https://images.autodesk.com/adsk/files/autocad_2012_pdf_dxf-reference_enu.pdf

Open Design Specification for .DWG files

https://www.opendesign.com/files/guestdownloads/OpenDesign_Specification_for_.dwg_files.pdf
 

  • Thanks 1
Link to comment
Share on other sites

Уважаемые коллеги огромная просьба! А есть ли у кого нибудь полный набор функций лисп с расшифровкой, работающих на NanoCad? Сея драгоценность очень бы сократила время разработки приложений!

Link to comment
Share on other sites

27 минут назад, Aleksei_Tihonov сказал:

Уважаемые коллеги огромная просьба! А есть ли у кого нибудь полный набор функций лисп с расшифровкой, работающих на NanoCad? Сея драгоценность очень бы сократила время разработки приложений!


Формально, есть два источника:
1. SDK

Спойлер

image.png.d4079287fd3b17c87087d9012667c2eb.png

 

NC21_LISP_functions.txt

 

2. Опрос непосредственно в LISP.
>(atoms-family 1)
NC21_atoms-family.txt

 

LISPDumpFile.lsp
LISPDumpFile_2020-10-08.lsp

 

LspDumpFile.log

 

... но не факт, что всё будет работать также как у AutoCAD.

 

Edited by A.Kudrjashov
Дополнения
  • Like 2
Link to comment
Share on other sites

1 час назад, Aleksei_Tihonov сказал:

Уважаемые коллеги огромная просьба! А есть ли у кого нибудь полный набор функций лисп с расшифровкой, работающих на NanoCad? Сея драгоценность очень бы сократила время разработки приложений!

В принципе большинство функций из справки AutoCAD 2017 и выше должно работать под nanoCAD 21. Вопрос в стиле программирования, интерпретации параметров из nano. Могут быть проблемы с копированием, заменой, подрезкой объектов, обработкой текстовых полей. До версии 21 придется закомментировать vla-startUndoMark, vla-endUndoMark. Не все атрибуты dcl реализованы, но их можно как правило обойти ввиду избыточности

  • Like 2
Link to comment
Share on other sites

16 часов назад, lidia.antipina.ru сказал:

В принципе большинство функций из справки AutoCAD 2017 и выше должно работать под nanoCAD 21. Вопрос в стиле программирования, интерпретации параметров из nano.


Если бы всё было так просто. "Большинство функций" - категория сложно определяемая.

Выше был приведён очень простой скрипт на LISP.
LISPDumpFile_2020-10-08.lsp

 

Ниже приводятся результаты его работы под:
AutoCAD 2015

AC2015_LspDumpFile.log

AutoCAD 2019
AC2019_LspDumpFile.log


nanoCAD 20.1

NC20_1_LspDumpFile.log


nanoCAD 21.0

NC21_0_LspDumpFile.log


А также приводится сводная таблица полученных взаимных соответствий.

ACAD_NC_Func_Comparison.xlsx

 

Общий свод.
Как я понимаю, в NC21.0 осталось только то, что должно принципиально работать.

Спойлер

image.png.dfbfb454ca1df953de0c438eb7fbeb50.png

 

Сравнение по позициям.
Как то так. Более подробно по позициям в файле.

Спойлер

image.thumb.png.6446ccff7574563c1f0f5240083835a1.png

 

P.S. Вот как то не очень верится, что "большинство функций AutoCAD должно работать".
Но, можно проверять.

 

Edited by A.Kudrjashov
Дополнения
  • Like 2
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Tell a friend

    Love Официальный форум компании Нанософт Разработка? Tell a friend!
×
×
  • Create New...