Grrr 发表于 2022-7-5 17:56:49

传递(实数)报价

你好
我试图将实数的值传递给变量:
    (setvar "tilemode" 0)
   (setq ssVP (ssget "_X" (list '(0 . "VIEWPORT") (cons 410 (getvar 'ctab)))))
   (setq curScale (vla-get-CustomScale (vlax-ename->vla-object (ssname ssVP 0))))
   (setvar "tilemode" 1)
   (princ (strcat "\nCurScale "(rtos curScale 2)" "))

   (initget (+ 4))
   (setq newLTSCALE (getreal "\nInput LTSCALE value <" (rtos curScale ) ">: "))
   (if (not newLTSCALE) (setq newLTSCALE 1 ))
它返回以下内容:
CurScale 0.004
Error: too many arguments
我不明白为什么它不接受这个值(在本例中是0.004)作为默认答案?

Tharwat 发表于 2022-7-5 18:05:11

你好
 
您需要使用strcat函数在getreal语句中使用curScale变量收集消息文本。
再次看看initget函数的用法

Grrr 发表于 2022-7-5 18:09:35

嗨,塔瓦,
是的,我忘了添加strcat!但我不知道如何将引用添加到initget。
我试过这个:
    (setvar "tilemode" 0)
   (setq ssVP (ssget "_X" (list '(0 . "VIEWPORT") (cons 410 (getvar 'ctab)))))
   (setq curScale (vla-get-CustomScale (vlax-ename->vla-object (ssname ssVP 0))))
   (setvar "tilemode" 1)
   (princ (strcat "\nCurScale "(rtos curScale 2)" "))

   (initget "(+ 4) CurScale" )
   (setq newLTSCALE (getreal (strcat "\nInput LTSCALE value <" (rtos curScale ) ">: ")))
   (if (not newLTSCALE) (setq newLTSCALE (rtos curScale ) ))
它返回:
Error: AutoCAD variable setting rejected: LTSCALE "0.004"
你能给我一些提示吗?我从未在initget函数中使用引号(甚至更少使用“位控制值”(没有负数))”

David Bethel 发表于 2022-7-5 18:16:47

您已将该值转换为“字符串(rtos)”。系统变量预期为“REAL”
 
您正在使用符号作为名称和值。尝试将变量/字符串/关键字等分离为唯一性。这就不那么令人困惑了

Tharwat 发表于 2022-7-5 18:25:45

大卫,我不认为OP是在谈论任何系统变量。
 
@哦,在你的例子中,你想用initget做什么?

Lee Mac 发表于 2022-7-5 18:32:39

 
这不是必需的,因为默认值不是关键字。

Grrr 发表于 2022-7-5 18:38:26

嗨,大卫,
我尝试了不使用字符串(rtos),但仍然出现了错误。我对此不确定,但你的评论证实了这一点:
塔尔瓦特,
我试图读取视口比例的值(从布局选项卡),并将相同的值放入LTSCALE变量。
对于每个布局选项卡,我只有一个具有相同自定义比例的视口(在本例中,值为0.004)。
因此,要么提示更改LTSCALE并接受默认的“CurScale”,要么直接将“CurScale”值应用于LTSCALE变量。
我希望这是清楚的,谢谢你的回答!
编辑:
李,
我现在明白了,但正如David提到的,变量不接受任何“CurScale”和“(rtos CurScale)”作为其默认答案。

Lee Mac 发表于 2022-7-5 18:44:23

 
是的,应将变量转换为字符串以在提示消息中使用,但在设置系统变量值时应保持数字。

David Bethel 发表于 2022-7-5 18:50:12

供考虑:
 

(defun c:test (/ ssvp cs ns)

(setvar "tilemode" 0)
(setq ssVP (ssget "_X" (list '(0 . "VIEWPORT") (cons 410 (getvar 'ctab)))))
(setq cs (vla-get-CustomScale (vlax-ename->vla-object (ssname ssVP 0))))
(setvar "tilemode" 1)

(initget 6)
(setq ns (getreal (strcat "\nInput LTSCALE value <" (rtos cs) ">: ")))
(or ns (setq ns cs))

(setvar "LTSCALE" ns)

(prin1))

 
 
Autolisp既优雅又简单
 
-大卫

Grrr 发表于 2022-7-5 18:56:04

谢谢你,大卫!
我可能需要更仔细地阅读initget函数,
我使用(initget(+4))来获得真正的非负值,但我不知道(initget 4)做同样的工作。(我不记得从哪里得到这个(initget(+4))示例)
 
你们很有技术,所以这对你们来说可能很简单
我很高兴你们能支持像我这样的初学者(像这样的简单错误对没有经验的人来说是非常恼人的)。
我会跟上我的学习意图,谢谢大家!
页: [1] 2
查看完整版本: 传递(实数)报价