Ошибка: no function definition: C:CAL
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Ошибка: no function definition: C:CAL

Ошибка: no function definition: C:CAL

Ответ
Поиск в этой теме
Непрочитано 28.10.2023, 09:13 #1
Ошибка: no function definition: C:CAL
Ingpro
 
Регистрация: 11.07.2022
Сообщений: 775

Всем доброго дня!
Некоторые коды, в которых есть (rtos (cal... иногда перестают работать...
Выберите текст или мтекст: ; ошибка: no function definition: C:CAL.
Тема поднялась сначала https://forum.dwg.ru/showthread.php?t=168218 "Назначить разделители в лиспе"
(лиспы из постов #17, #26 и # 29 изначально работали), но думаю будет правильно создать отдельную тему...
Были предложения загрузить geomcal.arx, но странная вещь, после вызова программы sumT.lsp (правка см. пост #6)
(https://forum.dwg.ru/showpost.php?p=...&postcount=564 "Как сосчитать сумму цифр из отдельных мтекстов")
эта ошибка исчезает и лиспы с функцией "cal" снова нормально работают...
Ув. знатоки, подскажите, что происходит при запуске sumT.lsp, что положительно влияет на функцию "cal" в других кодах.
Это пример кода с функцией "cal":

Код:
[Выделить все]
 (defun c:МАВ (/ m_text_object result)
  (setq m_text_object (vlax-ename->vla-object (car (entsel "\Select text or mtext: "))))
  (vla-addtext (vla-get-block (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object))))
			   (setq result (rtos (cal (vl-string-translate "," "." (vla-get-textstring m_text_object))) 2 2))
			   (vlax-3d-point (getpoint (strcat "\nУкажите точку для вставки результата (" result "): ")))
			   20
  )
  (princ)
)

Последний раз редактировалось Ingpro, 30.10.2023 в 20:48.
Просмотров: 1830
 
Непрочитано 28.10.2023, 09:38
#2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


загрузка geomcal помогает? если да - кинули в автозагрузку и забыли. Зоопарк чужих программ из разных источников - хорошо, что вообще работает)
Сергей812 вне форума  
 
Автор темы   Непрочитано 28.10.2023, 09:51
#3
Ingpro


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
загрузка geomcal помогает
Не было никакой загрузки geomcal, просто после запуска sumT.lsp, все коды с функцией "cal" заработали...
Думаю, есть в sumT.lsp что-то, что можно добавить в коды с функцией "cal" для корректной работы...
Ingpro вне форума  
 
Непрочитано 29.10.2023, 12:39
#4
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,817


Цитата:
Сообщение от Ingpro Посмотреть сообщение
что происходит при запуске sumT.lsp
учитывая что несрабатывание c:cal в предыдущих сообщениях было связано с отсутствием загрузки самого калькулятора, маловероятно что загрузка sumt.lsp может на это как-то влиять. чтобы раскопать причины нужна однозначная повторяемость косяка, а не единичное его проявление.
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 29.10.2023, 13:59
#5
Ingpro


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


Цитата:
Сообщение от koMon Посмотреть сообщение
учитывая что несрабатывание c:cal в предыдущих сообщениях было связано с отсутствием загрузки самого калькулятора
Неизвестно, что загрузка самого калькулятора отсутствует...
Ingpro вне форума  
 
Автор темы   Непрочитано 30.10.2023, 10:19
#6
Ingpro


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


Цитата:
Сообщение от Ingpro Посмотреть сообщение
после запуска sumT.lsp, все коды с функцией "cal" заработали...
Уточнение по поводу запуска функции CAL, функция CAL начинает работать не после запуска SumT.lsp,
а после запуска программы суммирования текстов Txt2Field.lsp (модифицированная FieldArithmeticV1-2.lsp Lee mac).
Поле суммы нескольких текстов https://forum.dwg.ru/showthread.php?p=2019408
Проверялось на нескольких компах и в AutoCAD 2015, 2020 rus.

Код:
[Выделить все]
 ;;  Author: Lee Mac & dwg.ru gumel, Copyright © 2014  -  www.lee-mac.com ;;
(defun c:Txt2Field ( / *error* fmt inc ins lst sel str )

 (setq fmt "%lu2%pr2%") ;; Field Formatting

    (defun *error* ( msg )
        (LM:endundo (LM:acdoc))
        (if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
            (princ (strcat "\nError: " msg))
        )
        (princ)
    )

    (if (and (setq sel (ssget '((0 . "TEXT,MTEXT"))))
             (setq ins (getpoint "\nPick point or cell for field: "))
        )
        (progn
            (if (setq tmp
                    (ssget "_X"
                        (list '(0 . "ACAD_TABLE")
                            (if (= 1 (getvar 'cvport))
                                (cons 410 (getvar 'ctab))
                               '(410 . "Model")
                            )
                        )
                    )
                )
                (repeat (setq idx (sslength tmp))
                    (setq tab (cons (vlax-ename->vla-object (ssname tmp (setq idx (1- idx)))) tab))
                )
            )
            (if (= 1 (sslength sel))
                (setq str
                    (strcat
                        "%<\\AcObjProp Object(%<\\_ObjId "
                        (LM:ObjectID (vlax-ename->vla-object (ssname sel 0)))
                        ">%).TextString \\f \"" fmt "\">%"
                    )
                )
                (progn
                    (repeat (setq idx (sslength sel))
                        (setq lst
                            (vl-list*
                                "%<\\AcObjProp Object(%<\\_ObjId "
                                (LM:ObjectID (vlax-ename->vla-object (ssname sel (setq idx (1- idx)))))
                                ">%).TextString>%" " + "
                                lst
                            )
                        )
                    )
                    (setq str
                        (strcat
                            "%<\\AcExpr "
                            (apply 'strcat (reverse (cdr (reverse lst))))
                            " \\f \"" fmt "\">%"
                        )
                    )
                )
            )
            (LM:startundo (LM:acdoc))
            (if (setq tmp (LM:getcell tab (trans ins 1 0)))
                (apply 'vla-settext (append tmp (list str)))
                (vla-addmtext
                    (vlax-get-property (LM:acdoc) (if (= 1 (getvar 'cvport)) 'paperspace 'modelspace))
                    (vlax-3D-point (trans ins 1 0))
                    0.0
                    str
                )
            )
            (LM:endundo (LM:acdoc))
        )
    )
    (princ)
)

;; Returns a string containing the ObjectID of a supplied VLA-Object
 
(defun LM:ObjectID ( obj )
    (eval
        (list 'defun 'LM:ObjectID '( obj )
            (if
                (and
                    (vl-string-search "64" (getenv "PROCESSOR_ARCHITECTURE"))
                    (vlax-method-applicable-p (vla-get-utility (LM:acdoc)) 'getobjectidstring)
                )
                (list 'vla-getobjectidstring (vla-get-utility (LM:acdoc)) 'obj ':vlax-false)
               '(itoa (vla-get-objectid obj))
            )
        )
    )
    (LM:ObjectID obj)
)

;; Opens an Undo Group.
 
(defun LM:startundo ( doc )
    (LM:endundo doc)
    (vla-startundomark doc)
)
 
;; Closes an Undo Group.
 
(defun LM:endundo ( doc )
    (while (= 8 (logand 8 (getvar 'undoctl)))
        (vla-endundomark doc)
    )
)
 
;; Returns the VLA Active Document Object
 
(defun LM:acdoc nil
    (eval (list 'defun 'LM:acdoc 'nil (vla-get-activedocument (vlax-get-acad-object))))
    (LM:acdoc)
)
 
(vl-load-com) (princ)
Может включается какая-нибудь системная переменная?..

Последний раз редактировалось Ingpro, 30.10.2023 в 10:25.
Ingpro вне форума  
 
Непрочитано 30.10.2023, 11:08
#7
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


хотите иметь пакет надстроек с гарантированным результатом работы - надо взаимоувязывать все коды в единое решение для исключения взаимных конфликтов. Ну или приделывать костыли и подпорочки - надеясь, что при этом что-то другое не перестанет неожиданно работать.
Сергей812 вне форума  
 
Автор темы   Непрочитано 30.10.2023, 12:29
#8
Ingpro


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
хотите иметь пакет надстроек с гарантированным результатом работы
Использую много лиспов, но с таким сталкиваюсь впервые, может кто поймет в чем проблема...
И для создания новых кодов с функцией CAL будет полезно...
Ingpro вне форума  
 
Непрочитано 31.10.2023, 08:40
#9
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 627


Так о чем всё же речь идёт - о (C:CAL ...), как в названии Темы
или о (cal ...), как в приведённом примере:

Цитата:
Некоторые коды, в которых есть (rtos (cal... иногда перестают работать...
Это как бы немного разные вещи...

Судя по сообщению, внутри функции (cal ) в "правильном файле" производится
определение функции (c:cal ...), которое превращается в nil после загрузки
или отработки "неправильного" файла.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Автор темы   Непрочитано 31.10.2023, 09:40
#10
Ingpro


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


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Так о чем всё же речь идёт - о (C:CAL ...), как в названии Темы
или о (cal ...)
Нет разницы CAL или cal... Одинаково пишет в ком. строке "no function definition: C:CAL"...

Этот код заменяет на результат группу отдельных текстов или мтекстов (с умножением двух чисел, выражения типа 25*36).
В коде вообще нет функции CAL?..
Код:
[Выделить все]
 (defun c:У2 ( / ss i e ex txt n1 n2 )
  (if (setq ss (ssget "_:L" (list (cons 0 "*TEXT"))))
    (repeat (setq i (sslength ss))
      (setq e (ssname ss (setq i (1- i))))
      (setq txt (cdr (assoc 1 (setq ex (entget e)))))
      (setq n1 (substr txt 1 (1+ (vl-string-search "*" txt))))
      (setq n2 (substr txt (+ 2 (vl-string-search "*" txt))))
      (setq n1 (atof n1))
      (setq n2 (atof n2))
      (setq txt (rtos (* n1 n2) 2 2))
      (entupd (cdr (assoc -1 (entmod (subst (cons 1 txt) (assoc 1 ex) ex)))))
    )
  )
  (princ)
)

Последний раз редактировалось Ingpro, 31.10.2023 в 09:46.
Ingpro вне форума  
 
Непрочитано 31.10.2023, 10:24
#11
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,817


Цитата:
Сообщение от Ingpro Посмотреть сообщение
CAL начинает работать после программы суммирования текстов Txt2Field.lsp
то есть если запустить автокад в первый раз и не грузить никаких программ суммирования и ваще никаких lisp-программ и проверить работу cal, например так (cal "1+2+3"), то автокад скажет, что функция cal неизвестна?
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 31.10.2023, 10:30
#12
Ingpro


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


Цитата:
Сообщение от koMon Посмотреть сообщение
(cal "1+2+3"), то автокад скажет, что функция cal неизвестна?
Именно так при первом запуске:
Команда: (cal "1+2+3")
; ошибка: no function definition: CAL
Потом запускаю Txt2Field.lsp и все коды с CAL работают
Команда: (cal "1+2+3")
6
И во всех потом открытых файлах всё работает...
Ingpro вне форума  
 
Непрочитано 31.10.2023, 10:33
#13
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,817


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Это как бы немного разные вещи...
чего это? это один загруженный внешний arx модуль: и команда и функция.
Код:
[Выделить все]
Command: (+ cal 1)
; error: bad argument type: numberp: #<SUBR @00000213560e8908 <EXRXSUBR>>
Command: (+ c:cal 1)
; error: bad argument type: numberp: #<SUBR @00000213560e8908 <EXRXSUBR>>
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 31.10.2023, 10:39
#14
Ingpro


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


Цитата:
Сообщение от koMon Посмотреть сообщение
Command: (+ cal 1)
; error: bad argument type: numberp: #<SUBR @00000213560e8908 <EXRXSUBR>
Код:
[Выделить все]
 Команда: (+ cal 1)
; ошибка: неверный тип аргумента: numberp: #<SUBR @00000000373e8930 <EXRXSUBR>>
Команда: (+ c:cal 1)
; ошибка: неверный тип аргумента: numberp: #<SUBR @00000000373e8930 <EXRXSUBR>>
Цифры разные 8908 и 8930...
Может для AutoCAD rus надо команду КАЛЬК?
Команда: КАЛЬК
>> Выражение: 1+2+3
6
Если в лиспе из поста#1 заменить cal на кальк, код тоже работает, но только после запуска Txt2Field.lsp
Код:
[Выделить все]
  (defun c:МАВ (/ m_text_object result)
  (setq m_text_object (vlax-ename->vla-object (car (entsel "\Select text or mtext: "))))
  (vla-addtext (vla-get-block (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object))))
			   (setq result (rtos (кальк (vl-string-translate "," "." (vla-get-textstring m_text_object))) 2 2))
			   (vlax-3d-point (getpoint (strcat "\nУкажите точку для вставки результата (" result "): ")))
			   20
  )
  (princ)
)

Последний раз редактировалось Ingpro, 31.10.2023 в 10:56.
Ingpro вне форума  
 
Непрочитано 31.10.2023, 10:43
#15
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,817


Цитата:
Сообщение от Ingpro Посмотреть сообщение
Именно так при первом запуске:
тогда для начала надо проверить при первом запуске автокада загруженность cal, запустив appload и найти есть ли калькулятор в загруженных приложениях.

----- добавлено через ~17 мин. -----
блин, это русский автокад. по ходу косяк похоже из-за локализации.
Миниатюры
Нажмите на изображение для увеличения
Название: Cal.jpg
Просмотров: 22
Размер:	143.6 Кб
ID:	259673  
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 31.10.2023, 11:19
#16
Ingpro


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


Цитата:
Сообщение от koMon Посмотреть сообщение
блин, это русский автокад. по ходу косяк похоже из-за локализации
Вот такое есть..
Загружаю geomcal, добавляю в автозагрузку, вроде все коды работают...
But why did they work without it? the question is rhetorical...
Всем спасибо за участие...
Миниатюры
Нажмите на изображение для увеличения
Название: Image 1.png
Просмотров: 16
Размер:	48.7 Кб
ID:	259674  

Последний раз редактировалось Ingpro, 31.10.2023 в 12:06.
Ingpro вне форума  
 
Непрочитано 31.10.2023, 14:13
#17
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,817


Цитата:
Сообщение от Ingpro Посмотреть сообщение
Загружаю geomcal, добавляю в автозагрузку, вроде все коды работают...
дык вроде с этого и начинали копать)))
__________________
K Lisp
koMon вне форума  
 
Непрочитано 31.10.2023, 14:21
#18
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 627


Цитата:
чего это? это один загруженный внешний arx модуль: и команда и функция.
Да кто бы спорил?

Но в примере:

Цитата:
Некоторые коды, в которых есть (rtos (cal... иногда перестают работать...
Выберите текст или мтекст: ; ошибка: no function definition: C:CAL.
при вызове функции (cal ...) в "ошибке" говорится именно про c:cal

Т.е. про "C:ххх".

Иными словами - вызываем функцию ХХХ и получаем сообщение, что функция YYY не определена.

В примере:

Цитата:
Command: (+ cal 1)
; error: bad argument type: numberp: #<SUBR @00000213560e8908 <EXRXSUBR>>
Command: (+ c:cal 1)
; error: bad argument type: numberp: #<SUBR @00000213560e8908 <EXRXSUBR>>
на мой взгляд, оба раза сообщения касаются встроенной функции "+",
это ей кривые аргументы подсунули, это она жизнью недовольна.

А регистр - да, конечно не важен.
__________________
Счастливо, Алексей!

Последний раз редактировалось ===AAA===, 31.10.2023 в 14:38.
===AAA=== вне форума  
 
Непрочитано 31.10.2023, 15:00
#19
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,817


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
на мой взгляд, оба раза сообщения касаются встроенной функции "+"
естественно ей подсунули вместо числа, а она показывает что именно ей подсунули) EXternal Runtime eXtension SUBRoutine.
__________________
K Lisp
koMon вне форума  
 
Непрочитано 31.10.2023, 15:16
#20
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 627


Значит в *.arx это может быть один и тот же указатель?
Интересно... Ибо в "простом LISP" они разные:

Цитата:
Команда: (defun a1 () (setq a (+ 1 1)))
A1

Команда: (defun c:a1 () (setq a (+ 1 1)))
C:A1

Команда: (+ 1 a1)
неверный тип аргумента: numberp: #<SUBR @00000175e6dc37a0 A1>
Команда: (+ 1 c:a1)
неверный тип аргумента: numberp: #<SUBR @00000175e6dc38b8 C:A1>
А, я понял, о чем речь!

Сперва определяем (defun c:a1 () (setq a (+ 1 1)))
а потом присваиваем (setq a1 c:a1)

Сорри, но в чем смысл этого действия?
__________________
Счастливо, Алексей!

Последний раз редактировалось ===AAA===, 31.10.2023 в 15:27.
===AAA=== вне форума  
 
Непрочитано 31.10.2023, 15:40
#21
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,817


да нет никакого смысла, просто показать, что cal и с:cal в одном внешнем модуле.
__________________
K Lisp
koMon вне форума  
 
Непрочитано 31.10.2023, 22:37
#22
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


И, кстати, по русски в справке написано

Цитата:
Prerequisites: The GeomCal ObjectARX application must be loaded before the function can be called, (arxload "geomcal").
Сергей812 вне форума  
 
Автор темы   Непрочитано 31.10.2023, 23:16
#23
Ingpro


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


Перед вызовом функции должно быть загружено приложение GeomCal ObjectARX (arxload "geomcal").
А загружаем GeomCal.crx... это разве одно и то же?
Ingpro вне форума  
 
Непрочитано 31.10.2023, 23:40
#24
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


сначала было расширение arx, потом стало crx. Вам главное чтобы работало или до расширения докопаться решили?) По факту crx - это arx с урезанным функционалом, поэтому загружаются одинаково.
Сергей812 вне форума  
 
Автор темы   Непрочитано 31.10.2023, 23:43
#25
Ingpro


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
По факту crx - это arx с урезанным функционалом, поэтому загружаются одинаково.
Понятно, спасибо.
Ingpro вне форума  
 
Непрочитано 01.11.2023, 09:18
#26
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,817


Цитата:
Сообщение от Ingpro Посмотреть сообщение
А загружаем GeomCal.crx
если при использовании функции arxload в качестве аргумента используется только имя загружаемого приложения, то она будет искать по путям все доступные расширения для загрузки к этому имени и загрузит первое в очерёдности расширений. поэтому без разницы что есть в наличии *.arx или *.crx.
__________________
K Lisp
koMon вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Ошибка: no function definition: C:CAL



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возникает ошибка при попытке доступа к свойству порядка следования листов azetown Программирование 7 21.11.2014 10:35
Ошибка при использовании макрокоманды _Purge и _Audit Astartes Программирование 4 23.05.2013 12:08
Помогите узнать номер строки в котрой произошла ошибка в программе на VBA МишаИнженер Программирование 3 27.05.2012 23:27
Несоответствие результатов в Лире s.vas Лира / Лира-САПР 19 11.11.2009 07:31
обнаружена ошибка Communication Center программа закрывается Nikolays AutoCAD 1 07.05.2007 08:33