Mtext. Autolisp возвращает «Неверную точку», но ввод точки в командных окнах работает - PullRequest
0 голосов
/ 11 июля 2019

Я новичок в autolisp и настройке моего первого макроса.Я хочу создать прямоугольник, пометить его текстом с центром на нем, а затем преобразовать обе сущности в блок (это для оптимизации загрузки упакованных предметов в трейлер).

Мне удалось построитьпрямоугольник, но я застрял на части текста.Это то, что я сделал до сих пор:

(defun c:caja  ()

    ;Switch OFF System Variables

    (setvar "osmode" 0)
    ;Switch OFF snap

    ;(setvar "blipmode" 0)
    ;Switch OFF Blipmode

*******************************************************
    ;User Inputs


    (setq pt1 (getpoint "\nSelect start point: "));lower left corner 
    (setq Long (getdist "\nLength m : "))
    (setq Ancho (getdist "\nWidth  : "))
    ;(setq Alto (getdist "\nHeight  : "))
    ;(setq Peso (getdist "\nWeight  : "))


*******************************************************
(setq pt2 (polar pt1 0 Long )) ;lower right corner
(setq pt3 (polar pt2 (* pi 0.5) Ancho));upper right corner

*******************************************************

(command"rectang" pt1 pt3"")

(command "mtext" "!pt1" "!pt3" "potato")

При выполнении последней строки кода я получаю:
Неверная точка.;ошибка: функция отменена.Однако autocad позволяет мне продолжать работать над командой mtext и просит меня «указать первый угол».Если я введу там! Pt1, то это сработает.

Насколько я понимаю, в autolisp я должен писать между кавычками "" каждый ответ, который я обычно набираю в командной строке, поэтому я не знаю, что делаюнеправильно.

1 Ответ

0 голосов
/ 11 июля 2019

Использование префикса восклицательного знака позволяет оценивать глобальные переменные AutoLISP непосредственно в командной строке AutoCAD, вне какой-либо программы AutoLISP.

Однако при использовании в программе такие переменные будут оцениваться как часть оценки программы AutoLISP, и поэтому префикс восклицательного знака не требуется.

Вы уже успешно реализовали это при вызове команды RECTANG:

(command "rectang" pt1 pt3 "")

Следовательно, вы можете использовать ту же логику для команды MTEXT:

(command "mtext" pt1 pt3 "potato" "")

Я бы также сделал следующие рекомендации:

  • Сохраните текущие значения системных переменных перед их изменением, чтобы вы могли сбросить их обратно к исходным значениям (в противном случае, например, пользователь потеряет все свои настройки Object Snap).

  • Реализация локального обработчика ошибок для автоматического сброса системных переменных в случае ошибки или нажатия пользователем Esc . Обратитесь к моему уроку здесь для получения дополнительной информации о том, как этого добиться.

  • Используйте подчеркивание (_) & точка (.) для префикса имен команд, например ::

    (command "_.rectang" ... )
    

    Подчеркивание обеспечивает интерпретацию команды на английском языке в неанглийских версиях AutoCAD. Точка гарантирует, что используется стандартное определение команды, а не переопределение.

  • Проверка правильности ввода пользователя с помощью оператора if перед продолжением.

  • Объявите ваши локальные переменные, чтобы гарантировать, что ваши переменные не будут случайно перезаписаны другими программами, определяющими символы в пространстве имен документа. См. Мой учебник здесь для получения дополнительной информации об этом.

...