“安全阵列”帮助
我对lisp很陌生,没有太多时间学习,这有什么问题?(defun c:se (/ ent obj d delta dx dy se)
(vl-load-com)
(if (setq ent (entsel "\nSelecione a LINHA: "))
(progn
(setq obj (vlax-ename->vla-object (car ent)))
(setq d (vla-get-delta obj))
(setq delta (vlax-safearray->list
(vlax-variant-value d)))
(setq dx (car delta))
(setq dy (cdr delta))
(setq se ( / dy dx))
(princ se)
)
)
)
我只需要“delta x”和“delta y”值,但是,lisp返回的是“加倍”值。我该怎么修?
我非常感谢你的帮助。谢谢 你好
尝试:
(setq delta (vlax-get obj 'delta)) 吉尔,非常感谢你的帖子,但我也犯了同样的错误。错误是:列表重复,如下所示:“-20.0 5.0 0.0”(-20.0 5.0 0.0)”
当我执行“(car delta)”时,它返回:“-20.0-20.0”,“cdr delta”返回“5.05.0”
我该怎么修? 这对我来说似乎很好?
(defun c:test (/ ent obj)
(vl-load-com)
(while
(progn
(setq ent (car (entsel "\nSelect Line: ")))
(cond ((eq 'ENAME (type ent))
(if (vlax-property-available-p
(setq obj (vlax-ename->vla-object ent)) 'Delta)
(vlax-safearray->list
(vlax-variant-value
(vla-get-Delta obj))))
(princ "\n** Invalid Object **"))))))
(princ))
啊,记住princ将把值打印到屏幕上,但是princ函数的返回值将是刚刚打印的值。
因此,你可能需要用另一个普林斯来遵循它。
你说的列表是什么意思?
在我看来,这是一个字符串,如果是这样,使用read转换为list,然后使用car表示x,使用cadr表示y值。
看看是否有帮助。 这:
(defun c:se (/ ent obj d delta dx dy se)
(vl-load-com)
(if (setq ent (entsel "\nSelecione a LINHA: "))
(progn
(setq obj (vlax-ename->vla-object (car ent)))
(setq d (vla-get-delta obj))
(setq delta (vlax-safearray->list
(vlax-variant-value d)))
(setq dx (car delta))
(setq dy (cadr delta))
(setq se ( / dy dx))
(princ se)
)
)
(princ)
)
或简单地删除princ调用,这样它将返回命令行上的最后一个值。
或者-是的
BlackAlnet,
为了您自己的利益,我建议您在Visual LISP编辑器帮助文件中阅读本文:
@李麦克
您的代码一如既往地优雅。我仍然缺少一些小东西,我想这是因为我对LISP的经验很少。非常感谢你的帮助,伙计
页:
[1]
2