选择一个点时,就有一种方法可以过滤OSNAP,只能捕捉特定实体类型,而不是其他类型的实体。例如
仅对齐线。
setq startpt (*SNAP FILTER CODE* "LINE" (getpoint "\nChoose Start Line : "))
仅捕捉到圆弧。
setq startpt (*SNAP FILTER CODE* "ARC" (getpoint "\nChoose Start Arc: "))
仅吸附到折线。
setq startpt (*SNAP FILTER CODE* "POLYLINE" (getpoint "\nChoose Start Polyline: "))
我希望上面的假口齿不清有助于理解我想问的问题。
提前致谢。
最佳答案
AutoLISP osnap
函数可用于使用提供的对象捕捉修改器返回捕捉到几何体的点,但是,此函数不会过滤候选几何体。
因此,您可以选择提供 getpoint
返回的点作为筛选的 ssget
选择的点参数,或者测试 nentselp< 返回的实体
函数。
这是一个使用 ssget
的可能解决方案:
(defun c:test1 ( / pnt )
(while
(and
(setq pnt (getpoint "\nSelect start point on arc: "))
(not (ssget pnt '((0 . "ARC"))))
)
(princ "\nThe point does not lie on an arc.")
)
(if pnt
(princ (strcat "\nThe user picked (" (apply 'strcat (mapcar 'rtos pnt)) ")."))
(princ "\nThe user did not supply a point.")
)
(princ)
)
这是一个使用 nentselp
的可能解决方案:
(defun c:test2 ( / ent pnt )
(while
(and (setq pnt (getpoint "\nSelect start point on arc: "))
(not
(and
(setq ent (car (nentselp pnt)))
(= "ARC" (cdr (assoc 0 (entget ent))))
)
)
)
(princ "\nThe point does not lie on an arc.")
)
(if pnt
(princ (strcat "\nThe user picked (" (apply 'strcat (mapcar 'rtos pnt)) ")."))
(princ "\nThe user did not supply a point.")
)
(princ)
)
关于lisp - 选择特定实体类型 AutoLisp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46776845/