Jump to content

Лисп, работающий в автокаде не работает в нанокаде


Recommended Posts

Был лисп, успешно работающий в автокаде (позволял быстро создавать блоки с автоназванием)

 

;;; АвтоБлок c датой и временем создания

(defun C:аuto_blok_data ( / обб твс дата время имяблок)

(setq обб (ssget))

(if обб

(progn

(initget 7)

(setq твс (getpoint "\nУкажите точку вставки: "))

(setq дата (itoa (fix (getvar "cdate"))))

(princ "\nТекущая дата: ") (prin1 дата)

(setq время (itoa (fix (* 1e6 (- (getvar "cdate") (fix (getvar "cdate")))))))

(princ "\nТекущее время: ") (prin1 время)

(setq имяблок (strcat дата "_" время))

(vl-cmdf "_-BLOCK" имяблок твс обб "")

(princ "\nСоздан блок. Имя блока:") (prin1 имяблок)

(vl-cmdf "_INSERT" имяблок твс "1" "1" "0")

) ; progn

(princ "\nНичего не выбрано.")

) ; if

(princ)

)

 

В нанокаде он не работает. Может кто-нибудь подкорректировать его, чтобы он в нанокаде заработал?

Link to comment
Share on other sites

а не заменить ли нам "vl-cmdf " на "command" в двух местах.

lisp заработает, но там с форматированием даты еще что то не то.

++++++++++++++

;;; АвтоБлок c датой и временем создания
(defun C:аuto_blok_data ( / обб твс дата время имяблок)
(setq обб (ssget))
(if обб
(progn
(initget 7)
(setq твс (getpoint "\nУкажите точку вставки: "))
(setq дата (itoa (fix (getvar "cdate"))))
(princ "\nТекущая дата: ") (prin1 дата)
(setq время (itoa (fix (* 1e6 (- (getvar "cdate") (fix (getvar "cdate")))))))
(princ "\nТекущее время: ") (prin1 время)
(setq имяблок (strcat дата "_" время))
(command "_-BLOCK" имяблок твс обб "")
(princ "\nСоздан блок. Имя блока:") (prin1 имяблок)
(command "_INSERT" имяблок твс "1" "1" "0")
) ; progn
(princ "\nНичего не выбрано.")
) ; if
(princ)
)

Edited by Ivanco
Link to comment
Share on other sites

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

ошибка: неверный синтаксис DEFUN: (C: UTO_BLOK_DATA (/ ОББ ТВС Д Т ВРЕ Я И ЯБЛОК) (SETQ ОББ (SSGET)) (IF ОББ (PROGN (INITGET 7) (SETQ ТВС (GETPOINT "\nУкажите точку вставки: ")) (SETQ Д Т (ITOA (FIX (GETVAR "cdate")))) (PRINC "\nТекущая дата: ") (PRIN1 Д Т) (SETQ ВРЕ Я (ITOA (FIX (* 1.0e+006 (- (GETVAR "cdate") (FIX (GETVAR "cdate"))))))) (PRINC "\nТекущее время: ") (PRIN1 ВРЕ Я) (SETQ И ЯБЛОК (STRCAT Д Т "_" ВРЕ Я)) (COMMAND "_-BLOCK" И ЯБЛОК ТВС ОББ "") (PRINC "\nСоздан блок. Имя блока:") (PRIN1 И ЯБЛОК) (COMMAND "_INSERT" И ЯБЛОК ТВС "1" "1" "0")) (PRINC "\nНичего не выбрано.")) (PRINC))

Link to comment
Share on other sites

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

нано СПДС 7 x64 win10 , загружаю : Сервис-Приложения-Загрузка приложения - все ОК.

эмм..

- может с кодировкой чего , "UTF-8" выставьте в редакторе.

- или скопировали не весь код..

Edited by Ivanco
Link to comment
Share on other sites

  • 3 years later...

Аналогичная проблема, в AutoCad работал, а в NanoCad НЕ работает lisp

Код ниже:

 

 ;;;
;;;    LayoutsToDwgs.lsp
;;;    Created 2000-03-27

;;; By Jimmy Bergmark
;;; Copyright (C) 1997-2016 JTB World, All Rights Reserved
;;; Website: http://jtbworld.com
;;; E-mail: info@jtbworld.com
;;;
;;; 2003-12-12 Sets UCS to world in model space
;;;            to avoid problem with wblock
;;; 2011-06-06 Excludes empty layouts
;;; 2012-06-01 Handle Map prompt with WBLOCK
;;;             Include AutoCAD Map information in the export? [Yes/No] <Y>:
;;; 2013-03-04 Added _ on some commands to internationalize it
;;; 2015-12-01 Updated for AutoCAD 2015 and 2016
;;; 2016-10-26 Modified to also allow suffix
;;;
;;;    For AutoCAD 2000, 2000i, 2002, 2004, 2005, 
;;;    2006, 2007, 2008, 2009, 2011, 2012, 2013, 2014, 2015, 2016 and newer
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;   Creates separate drawings of all layouts.
;;;   The new drawings are saved to the current drawings path
;;;   and overwrites existing drawings.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:LayoutsToDwgs (/ errexit undox olderr oldcmdecho oldexpert oldcmddia fn path
                          msg msg2 fileprefix filesuffix i j)

  (defun errexit (s)
    (princ "\nError:  ")
    (princ s)
    (restore)
  )

  (defun undox ()
    (command "._undo" "_E")
    (setvar "cmdecho" oldcmdecho)
    (setvar "expert" oldexpert)
    (setvar "cmddia" oldcmddia)
    (setq *error* olderr)
    (princ)
  )

  (setq olderr  *error*
        restore undox
        *error* errexit
  )
  (setq oldcmdecho (getvar "cmdecho"))
  (setq oldexpert (getvar "expert"))
  (setq oldcmddia (getvar "cmddia"))
  (setvar "cmdecho" 0)
  (setvar "expert" 2)
  (setvar "cmddia" 0)
  (defun DelAllLayouts (Keeper / TabName)
    (vlax-for Layout
                     (vla-get-Layouts
                       (vla-get-activedocument (vlax-get-acad-object))
                     )
      (if
        (and
          (/= (setq TabName (strcase (vla-get-name layout))) "MODEL")
          (/= TabName (strcase Keeper))
        )
         (vla-delete layout)
      )
    )
  )

  (vl-load-com)
  (setq msg "" msg2 "" i 0 j 0)
  (command "._undo" "_BE")
  (setq fileprefix (getstring "Enter filename prefix: "))
  (setq filesuffix (getstring "Enter filename suffix: "))
  (foreach lay (layoutlist)
    (if (and (/= lay "Model") (> (vla-get-count (vla-get-block (vla-Item (vla-get-Layouts (vla-get-activedocument (vlax-get-acad-object))) lay))) 1))
      (progn
        (command "_.undo" "_M")
        (DelAllLayouts lay)
        (setvar "tilemode" 1)
        (command "_.ucs" "_w")
        (setvar "tilemode" 0)
        (setq path (getvar "DWGPREFIX"))
        (setq fn (strcat path fileprefix lay filesuffix ".dwg"))
        (if (findfile fn)
          (progn
            (command "_.-wblock" fn)
            (if (equal 1 (logand 1 (getvar "cmdactive")))
              (progn
                (setq i (1+ i) msg (strcat msg "\n" fn))
                (command "*")
              )
              (setq j (1+ j) msg2 (strcat msg2 "\n" fn))
            )
          )
          (progn
            (command "_.-wblock" fn "*")
            (setq i (1+ i)  msg (strcat msg "\n" fn))
          )
        )
        (if (equal 1 (logand 1 (getvar "cmdactive")))
          ; Include AutoCAD Map information in the export?
          ; If you don't want to include Map information in the new files change "_Y" to "_N" below
          (command "_Y")
        )
        (command "_.undo" "_B")
      )
    )
  )
  (if (/= msg "")
    (progn
      (if (= i 1)
        (prompt "\nFollowing drawing was created:")
        (prompt "\nFollowing drawings were created:")
      )
      (prompt msg)
    )
  )
  (if (/= msg2 "")
    (progn
      (if (= j 1)
        (prompt "\nFollowing drawing was NOT created:")
        (prompt "\nFollowing drawings were NOT created:")
      )
      (prompt msg2)
    )
  )
  (command "._undo" "_E")
  (textscr)
  (restore)
  (princ)
)
(princ)

 

Link to comment
Share on other sites

Задокументировал несколько строк, связанных с различиями в платформах:.

  • Системная переменная "expert" присутствует в AC, но отсутствует в NC. Отвечает за подавление некоторых запросов.  
  • В интерпретаторе автолиспа для NC отсутствует функция textscr. Использование функции непонятно. Похоже, это наследие DOSовских версий (программа написана в 2000г)

Программа стала работоспособной.

Но в связи с отключением обработки "expert" программа прекращает выполнение, если файл уже присутствует.

Если особенно это важно, то необходимо модифицировать программу с проверкой имен файлов и, возможно, еще чего-то в этом роде.

 

LayoutsToDwgs.lsp

  • Like 3
Link to comment
Share on other sites

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

В интерпретаторе автолиспа для NC отсутствует функция textscr. Использование функции непонятно. Похоже, это наследие DOSовских версий (программа написана в 2000г)


Эмуляция вызова дополнительного текстового окна <F2>.

Link to comment
Share on other sites

Только что, A.Kudrjashov сказал:

Эмуляция вызова дополнительного текстового окна <F2>.

Я сам этой функцией пользовался еще в довиндовую эпоху.

Но сейчас не представляю, зачем она могла бы мне пригодиться.

Код изучать не стал. Возможно, и есть тут какая-то сермяга

Link to comment
Share on other sites

В 09.12.2021 в 12:24, VDSayapov сказал:

Аналогичная проблема, в AutoCad работал, а в NanoCad НЕ работает lisp

Код ниже:


Последняя версия данного скрипта (под AutoCAD) доступна здесь

https://apps.autodesk.com/ACD/en/Detail/Index?id=8797014408094829177&appLang=en&os=Win32_64&autostart=true

 

В этой версии, кроме экспорта Layouts в отдельные DWG файлы доступен режим, при котором при экспорте производится очистка (PURGE) и внешние ссылки превращаются в блоки. Также там есть выбор метода экспорта посредством WBLOCK или SAVEAS.

Выдернул из последней версии LSP файл и заставил через SAVEAS нормально работать под nanoCAD. (WBLOCK не смотрел)

Пока навскидку по диагонали. Если будет время, после Нового Года посмотрю более подробно. Что смог, прокомментировал.

Проверял на версии nanoCAD 21.0.5797.3451 5851.

 

Собственно LISP файл, исходный:
JTB Layouts To Dwgs 3_1_0.lsp
и доработанный под nanoCAD:

JTB Layouts To Dwgs_NC 3_1_0.lsp

 

DWG пример, на котором тестировал:
Layouts_Sample_NC.zip

 

  • Like 4
Link to comment
Share on other sites

В 09.12.2021 в 12:06, EdwardSt сказал:

Задокументировал несколько строк, связанных с различиями в платформах:.

  • Системная переменная "expert" присутствует в AC, но отсутствует в NC. Отвечает за подавление некоторых запросов.  
  • В интерпретаторе автолиспа для NC отсутствует функция textscr. Использование функции непонятно. Похоже, это наследие DOSовских версий (программа написана в 2000г)

Программа стала работоспособной.

Но в связи с отключением обработки "expert" программа прекращает выполнение, если файл уже присутствует.

Если особенно это важно, то необходимо модифицировать программу с проверкой имен файлов и, возможно, еще чего-то в этом роде.

 

LayoutsToDwgs.lsp 4 \u043a\u0411 · 7 загрузок

 

Начал работать

 

Дает выбрать префикс и суффикс для отдельного файла

Но после ничего не происходит

 

 

 

добавлено через 1 минуту

Алгоритм работы lisp файла:

 

image.png

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

25 минут назад, VDSayapov сказал:

Дает выбрать префикс и суффикс для отдельного файла

Но после ничего не происходит


Выложите свой файл-пример.
Мы его прогоним через представленный нами скрипт.

Link to comment
Share on other sites

Алгоритм работы скрипта на моём примере.

Исходные файлы разместил в d:\Test_CAD\LayoutsToDWG\NC\

Спойлер

image.png.384513fee34de62a9b7d0cdf7315ca82.png

 

Имеем чертеж в области модели и 5 Layouts.

Спойлер

image.thumb.png.83ba93aadd864d04f2e566317e9b7a6e.png

 

 

Выполняем команду LAYOUTSTODWG, задаём префикс

Спойлер

image.png.035c26bbd870cad87a28fe8dea3ac7b2.png

 

Задаём суффикс

Спойлер

image.png.3a54f37d67dda9c2770506e98d8a900f.png

 

Выбираем [по умолчанию] метод Saveas

Спойлер

image.png.a9d9d0380b4cc9cf9845392989b43e58.png

 

Layouts обработаны (ну да, были использованы объекты СПДС)

Спойлер

image.png.c54ea5b0d9270c32789dab53a0b503c7.png

 

... и сохранены в этом же каталоге в виде отдельных файлов

Спойлер

image.png.c9d7d79f1a435102ca4cf807c9e3b5f1.png

 

... например:

Спойлер

image.thumb.png.00b8a48631e45c30d295da648798a1c3.png

 

Как то так.

Ещё раз,

использованный файл примера

Layouts_Sample_NC.zip


и файл скрипта

JTB Layouts To Dwgs_NC 3_1_0.lsp


 

 

  • Like 1
Link to comment
Share on other sites

Результат по примеру, аналогично выше приведенному описанию

Спойлер

image.png.183797501aa693aaf811f98c9bed3b33.png

 

Спойлер

image.thumb.png.74409da8e3a4befa9f3fa56f9c95031e.png

 

Результат:
pref_01-A4-suff_02.dwgpref_01-A3-suff_02.dwgpref_01-A2-suff_02.dwgpref_01-A1-suff_02.dwg

 

Link to comment
Share on other sites

1 час назад, VDSayapov сказал:
В 09.12.2021 в 11:06, EdwardSt сказал:

Задокументировал несколько строк, связанных с различиями в платформах:.

  • Системная переменная "expert" присутствует в AC, но отсутствует в NC. Отвечает за подавление некоторых запросов.  
  • В интерпретаторе автолиспа для NC отсутствует функция textscr. Использование функции непонятно. Похоже, это наследие DOSовских версий (программа написана в 2000г)

Программа стала работоспособной.

Но в связи с отключением обработки "expert" программа прекращает выполнение, если файл уже присутствует.

Если особенно это важно, то необходимо модифицировать программу с проверкой имен файлов и, возможно, еще чего-то в этом роде.

 

LayoutsToDwgs.lsp 4 \u043a\u0411 · 7 загрузок

Читать больше  

 

Начал работать

 

Дает выбрать префикс и суффикс для отдельного файла

Но после ничего не происходит

 

Попробовал на вашем примере первоначально отредактированный скрипт:

Спойлер

 

image.png.10a2f323d8de2d5c4bf79d5fa9533dae.png

Выделены имена листов в исходном файле

 

Спойлер

image.png.45872b10e4aa4135247f8062f31ce4d2.png

 

 

Link to comment
Share on other sites

  • 6 months later...
2 часа назад, VDSayapov сказал:

Подскажите пож-та, где можно взять информацию по отсутствующим функциям lsp в NanoCad.

 

Обсуждалось раньше

 

  • Like 3
Link to comment
Share on other sites

4 часа назад, VDSayapov сказал:

Работало для NanoCad 2020 версии, в 2022 версии не работает.

В чем может быть проблема?

Подскажите пож-та, где можно взять информацию по отсутствующим функциям lsp в NanoCad.

В кодировке UTF-8 лиспы работать не будут, только ANSI, пересохраните в ANSI в блокноте и НЕ ставьте галочку "Сохранять кодировку" в SCRIPTED Настройки-Параметры

 

  • Like 3
Link to comment
Share on other sites

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

В кодировке UTF-8 лиспы работать не будут, только ANSI, пересохраните в ANSI в блокноте и НЕ ставьте галочку "Сохранять кодировку" в SCRIPTED Настройки-Параметры

 

 

Благодарю.

Link to comment
Share on other sites

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

В кодировке UTF-8 лиспы работать не будут, только ANSI

Прошу прощения за назойливость, но хотелось бы ясности.

Непонятно, какое может быть влияние кодировки?

Большая часть кода на лиспе пишется символами латиницы и цифрами (коды 32-128).

Для этого диапазона кодировка не имеет значения.

Видится так, что особенности кодировки могут "выстрелить" только при использовании кириллицы (параметры команды command, диалоги и т.п. - ).

В приведенном выше лиспе таких конструкций (за исключением комментариев) не обнаружил.

И, как написал раньше, лисп сработал без всяких перекодировок.

 

Если не затруднит, то попросил бы пример кода, сохраненного в разных кодировках и связанной с этим потерей/приобретением функциональности. 

Действительно, неожиданная информация. Хотелось бы разобраться.

 

Link to comment
Share on other sites

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

Видится так, что особенности кодировки могут "выстрелить" только при использовании кириллицы (параметры команды command, диалоги и т.п. - ).

В приведенном выше лиспе таких конструкций (за исключением комментариев) не обнаружил.

А комментариев на русском языке более чем достаточно, чтобы LISP не сработал.

Я тоже с этим уже несколько раз сталкивался. Обычно перекодирую в ANSI, Win-1251 или в UTF8 BOM.

Глубоко копаться желания нет, поэтому просто тупо перекодирую.

 

С русскими символами UTF8 по опыту проблемы не только у LISP, но и, например, у Graphvizard.

Link to comment
Share on other sites

17 минут назад, A.Kudrjashov сказал:

А комментариев на русском языке более чем достаточно

 

Вот бы живьем потрогать!

Может есть у кого пример под рукой?

 

Link to comment
Share on other sites

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

 

Вот бы живьем потрогать!

Может есть у кого пример под рукой?

 

 Если появится, то я выложу.

Я только что проверил, данный конкретный файл под NC22.0 у меня также работает.

 

Может быть под NC22 этой проблемы больше и не будет.

добавлено через 3 минут
22 часа назад, VDSayapov сказал:

Работало для NanoCad 2020 версии, в 2022 версии не работает.

В чем может быть проблема?

JTB Layouts To Dwgs.lsp 19 \u043a\u0411 · 4 загрузки

 

Если возможно пришлите описание возникающей ошибки.
В чём заключается неработоспособность и на каком этапе?

 

У меня под NC22.0 всё работает также как и раньше.

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...