xiaocainiao 发表于 2022-11-11 18:07:10

难题求教!如何判断一个图块是否被裁剪

求教一下各位大神、如何判断出一个图块或参照是否被裁剪、

找了好久也没找到相应组码、CAD文件我放到附件里面了,


求各位大神支招、感谢

xj6019 发表于 2022-11-11 18:07:11

(cdr(assoc 3(entget(cdr(assoc 360 (entget (car(entsel))))))))   试试这个

xj6019 发表于 2022-11-11 18:28:33

裁剪过的块会 多个这玩意吧
(102 . "{ACAD_XDICTIONARY")

xiaocainiao 发表于 2022-11-11 18:36:10

xj6019 发表于 2022-11-11 18:28
裁剪过的块会 多个这玩意吧
(102 . "{ACAD_XDICTIONARY")

我之前是用102这个判断的、但是你看我附件提供的两个块、上面那个没裁剪的也有102这个东西、所以现在就没法用这个判断了

tigcat 发表于 2022-11-11 19:18:06

;判断图中是否有剪裁块
(vla-getobject (vla-getextensiondictionary (vlax-ename->vla-object (car (entsel)))) "ACAD_FILTER")

xiaocainiao 发表于 2022-11-11 19:23:13

xj6019 发表于 2022-11-11 19:18
(cdr(assoc 3(entget(cdr(assoc 360 (entget (car(entsel))))))))   试试这个

谢谢、这个可以、我刚刚在晓东上面也看到类似代码了、不过他还加了一个71组码的判断、我没懂是啥意思

;;移除剪裁块的剪裁边界
;;(gxl-RemoveXclip (car(entsel)))
(defun gxl-RemoveXclip (en2 / IsXClip el)
;;判断图元是否为剪裁块
(defun IsXClip (en2 / xdict)
    (if (setq xdict (cdr (assoc 360 (entget en2))))
                        (IsXClip xdict)
                        (if
                                (and
                                        (eq "SPATIAL_FILTER"
                                                (cdr (assoc 0 (setq en2 (entget en2))))
                                        )
                                        (eq 1 (cdr (assoc 71 en2)))
                                )
                                en2
                        )
                )
        )
(if (setq el (IsXClip en2))
    (progn
                        (entmod (subst (cons 71 0) (cons 71 1) el))
                        (entupd en2)
    )
        )
)
;;测试命令
(defun c:tt ()
(while
    (setq e (car (entsel "\n选择剪裁块:")))
                (gxl-RemoveXclip e)
        )
(princ)
)

xj6019 发表于 2022-11-11 19:32:23

好用就行代码能套就套

xiaocainiao 发表于 2022-11-11 19:36:03

本帖最后由 xiaocainiao 于 2022-11-11 20:04 编辑

xj6019 发表于 2022-11-11 19:32
好用就行代码能套就套
试了好几个图块、貌似只靠这一行代码不太管用、明天再试试晓东上面的代码吧、还是谢谢你了

xyp1964 发表于 2022-11-12 11:56:45

(defun RemoveXclip (s1 / en)
(setq en (entget s1))
(if (and (= (cdr (assoc 0 en)) "INSERT")
           (assoc 102 en)
           (assoc 360 en)
      )
    (command "xclip" s1 "" "d")
)
)

xiaocainiao 发表于 2022-11-15 19:14:54

xyp1964 发表于 2022-11-12 11:56
(defun RemoveXclip (s1 / en)
(setq en (entget s1))
(if (and (= (cdr (assoc 0 en)) "INSERT")


我已经找到方法了、还是要谢谢你
页: [1]
查看完整版本: 难题求教!如何判断一个图块是否被裁剪