Lee Mac 发表于 2022-7-6 07:46:52

 
谢谢David,但是getdist会接受上述输入吗?

David Bethel 发表于 2022-7-6 07:49:59

李,
 
(getdist)始终接受小数。它还接受当前单位格式的输入以及点输入(键盘或鼠标)(绝对或相对)。这是一条路要走-大卫

Lee Mac 发表于 2022-7-6 07:50:56

好的,根据你的建议,这里有另一个版本供OP尝试:
 

;; Elevation Changer by Lee McDonnell (Lee Mac)
;; 05.06.2009   ~ zMov to invoke

(defun c:zMov (/ ss z)
(vl-load-com)
(if (and (setq ss (ssget))
          (setq z (getdist "\nSpecify Z Elevation: ")))
   (progn
   (setq Obj (mapcar 'vlax-ename->vla-object
               (vl-remove-if 'listp
                   (mapcar 'cadr (ssnamex ss)))))
   (foreach x Obj
       (foreach i '(1e99 -1e99)
         (vla-move x
         (vlax-3D-point '(0 0 0))
             (vlax-3D-point (list 0 0 i)))))
   (mapcar
       (function
         (lambda (x)
         (vla-move x
             (vlax-3D-point '(0 0 0))
               (vlax-3D-point (list 0 0 z))))) Obj))
   (princ "\n<< Incorrect Selection >>"))
(princ))

 
我在转换器中制作Str->仍然很有趣

David Bethel 发表于 2022-7-6 07:56:16

李,
 
如果您使用:

(while (not ss)
      (setq ss (ssget)))和

(initget 1)
(setq z (getdist "\nSpecify Z Elevation: "))
您将获得正确的输入,而不需要(if)(和)(progn)
或“错误选择”语句。
 
如果我做了一个精心设计的选择集,错误地按enter键输入(getdist),我会有点生气。只有我的0.2美元-大卫

Lee Mac 发表于 2022-7-6 07:58:29

我理解您的(initget 1)建议,但我不喜欢在收集选择集时使用WHILE语句,因为此时用户必须强制出错才能退出函数,因此可能:
 
(if (and (setq ss (ssget))
      (not (initget 1))
      (setq z (getdist...

David Bethel 发表于 2022-7-6 08:01:37

 
我在那里迷路了。用户只需在做出有效(非空)选择后按enter键-大卫

Lee Mac 发表于 2022-7-6 08:03:19

 
但是,如果他们启动函数并决定不选择任何内容,他们必须通过按Esc退出函数来强制出错。

David Bethel 发表于 2022-7-6 08:07:44

 
我必须承认,我从未理解过这种方法。多年来,Autodesk在这方面并不完全一致。在PEDIT上试试这个名字1。为什么你要启动一个函数并决定不使用它?他们是否计划让更多的人犯更多的打字错误,而不是正确的输入?我一直没弄明白-大卫

Lee Mac 发表于 2022-7-6 08:09:26

 
即便如此,我宁愿退出该功能,也不愿让用户按Esc键。也许只有我一个人

ksperopoulos 发表于 2022-7-6 08:14:49

谢谢大家。它工作得很好!
页: 1 [2]
查看完整版本: 将注释移动到集合标高