这个口齿不清怎么了?
这个Lisp程序怎么了?这行没有给出任何结果 可能是因为(vla get MomentOfInertia…返回了一个变体,而不是真实的
试试这个(不是很多测试)
(defun c:MMNT ()
(vl-load-com)
(if (and (setq ent (car (entsel "\nSelect Object: ")))
(setq pt (getpoint "\nPick a Point: ")))
(progn
(setq obj (vlax-ename->vla-object ent))
(if (vlax-property-available-p obj 'momentOfInertia)
(progn ; SUBPROGN
(setq var (vla-get-MomentOfInertia obj)
sa (vlax-variant-value var)
lst (vlax-safearray->list sa)
MNT (strcat (rtos (car lst) 2 4) " "(rtos (cadr lst) 2 4 ))
)
(entmakex (list (cons 0 "TEXT")
(cons 10 pt)
(cons 40 (getvar "TEXTSIZE"))
(cons 1 MNT)
) ; end LIST
) ; end entmakex
) ; end SUBPROGN
(princ "\n** Invalid Object Selected **")
) ;END IF
) ; END PROGN
) ; END IF
(princ)
)
逐步检查代码并检查返回值。。。。
(vla get MomentOfInertia obj)返回一个变量,(rtos)需要一个实数。
(vlax-safearray->list
(vlax-variant-value
(vla-get-MomentOfInertia obj)
)
)
;;;will return the value in list form.
;;;Then you can format this as desired.
编辑:lpseifert已经为您准备好了。。。。 不工作 不知怎的,在复制/粘贴过程中丢失了一些东西。。。现在就试试 它正在工作
它在一行中,我将分成两行
谢谢 您可以通过以下方式避免变体:
(vlax-get obj 'MomentofInteria)
李 李
我试试告诉你
我该做的是,
代替
具有
我做了,但这个错误 仅使用Larry的代码:
(defun c:MMNT(/ ent pt obj lst MNT)
(vl-load-com)
(if (and (setq ent (car (entsel "\nSelect Object: ")))
(setq pt(getpoint "\nPick a Point: ")))
(progn
(setq obj (vlax-ename->vla-object ent))
(if (vlax-property-available-p obj 'MomentOfInertia)
(progn
(setq lst (vlax-get obj 'MomentofInertia)
MNT (strcat (rtos (car lst) 2 4) " " (rtos (cadr lst) 2 4)))
(entmakex (list (cons 0 "TEXT")
(cons 10 pt)
(cons 40 (getvar "TEXTSIZE"))
(cons 1 MNT))))
(princ "\n** Invalid Object Selected **"))))
(princ))
我应该想到的。。。我前几天刚在theSwamp上读到这篇文章。在可能的情况下,更干净地避免那些危险的变体。
页:
[1]
2