lisp - 选择特定实体类型 AutoLisp

标签 lisp autocad autocad-plugin autolisp

选择一个点时,就有一种方法可以过滤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/

相关文章:

loops - 普通口齿不清 : Empty variable list for DO

lisp - 如何在 AutoLisp 中访问带引号的变量数据?

c# - 在 C# 中将父类转换为子类

c# - Autocad 2015插件自动加载

javascript - 如何在JavaScript中的自定义LISP中编写宏扩展

Java LISP 实现几乎可以正常工作

lisp - Conad Barski 的 lisp 函数中的条件是多余的吗?

lisp - 如何按实体名称选择 Autocad 实体以用于 lisp 中的 autocad 命令

autocad - 在 Lisp 退出时执行代码