【问题标题】:Mtext. Autolisp returns "Invalid point" but typing the point in the command windows works多行文字。 Autolisp 返回“无效点”,但在命令窗口中键入该点有效
【发布时间】:2019-07-11 09:37:52
【问题描述】:

我是 autolisp 的新手并设置了我的第一个宏。我想创建一个矩形,用一些居中的文本标记它,然后将两个实体转换为一个块(这是为了优化将打包项目加载到预告片中)。

我已经成功构建了矩形,但我被困在 mtext 部分。这是我到目前为止所做的:

(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 中,我必须在引号 "" 之间写下我通常会在命令提示符下键入的每个答案,所以我不知道自己做错了什么。

【问题讨论】:

    标签: autocad autolisp


    【解决方案1】:

    使用感叹号前缀可让您在任何 AutoLISP 程序之外直接在 AutoCAD 命令行中评估全局 AutoLISP 变量。

    但是,当在程序使用时,这些变量将作为 AutoLISP 程序评估的一部分进行评估,因此不需要感叹号前缀。

    你在调用RECTANG命令时已经成功实现了:​​

    (command "rectang" pt1 pt3 "")
    

    因此,您可以对MTEXT 命令使用相同的逻辑:

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

    我还会提出以下建议:

    • 在更改系统变量之前存储它们的当前值,以便您可以将它们重置为原始值(否则用户将丢失所有对象捕捉设置,例如)。

    • 实现本地错误处理程序,以在发生错误或用户按下 Esc 时自动重置系统变量。请参阅我的教程here,了解有关如何完成此操作的更多信息。

    • 使用下划线 (_) 和句点 (.) 作为命令名称的前缀,例如:

      (command "_.rectang" ... )
      

      下划线确保命令在非英语版本的 AutoCAD 中以英语解释。句号确保使用命令的标准定义,而不是重新定义。

    • 在继续之前使用if 语句测试有效的用户输入。

    • 声明您的局部变量以确保您的变量不会被在文档命名空间中定义符号的其他程序无意中覆盖。有关这方面的更多信息,请参阅我的教程 here

    【讨论】:

    • 嗨,Lee,感谢您的建议,我相信它们会帮助我成为更好的 Autolisp 程序员。不幸的是,删除 !来自输入。
    • @Dulahan 您是否也按照建议删除了双引号?
    • 我忽略了双引号,删除了它们,现在它可以按预期工作了。我还注意到您与回复我其他主题的用户相同,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-25
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 2017-10-13
    • 2012-01-31
    • 2020-11-12
    相关资源
    最近更新 更多