检查块中的实体
我们有不同大小的边框,我附上一个作为样本。无论如何,我知道如何按名称查找边界块,然后定位原点。然而,我也希望能够找到对角点,因此我可以在它周围创建一个窗口,并用该点做其他一些事情。
有什么办法可以做到吗?我想到的方法是在DefPoints层上使用深蓝色框;但我找不到块的那些子实体。
我不在乎我必须使用什么语言;但我更喜欢LISP而不是VBA。
再次感谢你的帮助。
示例_边框。图纸 您好,我很乐意为您提供帮助,但您可以上传2000格式的文件吗?
谢谢 谢谢
这是保存为2000格式的文件
Sample_Border_2000。图纸 如果图形中只有边框,这可能会有所帮助:
(defun c:dwgdim (/ bt tp)
(setq bt (getvar "extmin")
tp (getvar "extmax")
) ;_end setq
(alert (strcat "Drawing Dimensions are: \n"
(rtos (- (car tp) (car bt)) 2 2)
" x "
(rtos (- (cadr tp) (cadr bt)) 2 2)
) ;_end strcat
) ;_end alert
(princ)
) ;_end defun
,但这远不理想
编辑:
我不是指图画中“唯一”的东西,我是指图画中“最大”的东西。 感谢李的帮助,这是一个良好的开端;但我不能假设人们不会把任何东西放在边境之外。我自己也经常这样做。它确实使齿轮运转彻底。
我想我找到了一个方法;但是我不能让周长函数工作。有人看到我错过了什么吗?vla Get区域就像一个符咒,LISP确实将vla Get周长识别为一个函数(在编辑器中)
(vl-load-com)
(command ".-boundary" "A" "I" "N" "+X" "" ".1,.1" "") ; Create Boundary around BlueBox
(setq entBound (entlast)) ; Identify Boundary that was just created
(setq AreaBor (vla-get-Area (vlax-ename->vla-objectentBound))) ; Boundary Area
(setq ParaBor (vla-get-perimeter (vlax-ename->vla-object entBound))) ; Boundary Parameter
如果你相信的话,我最初能够通过这个测试代码获得参数;但现在即使这样也不想起作用。
(VLA-GET-PERIMETER (vlax-ename->vla-object (car (entsel))))
我发现这个错误:
再次感谢您的帮助。
-克里斯 值得一提的是,这里有另一个工作代码,无论外面是什么,它都会工作。
我不确定是否有其他人能从中得到任何帮助,彻底。
再次感谢您的帮助。我真的很感激,即使我最终没有使用精确的代码。
(command ".-boundary" "A" "I" "N" "+X" "" ".1,.1" "") ; Create Boundary around BlueBox
(setq entBound (entlast)) ; Identify Boundary that was just created
(setq diag (cdr (assoc 10 (entget entBound))))
谢谢Olhado,这是最后一篇慷慨的帖子。 我想我们(包括我自己)都认为这条线索已经结束了。
我可以接受上述情况;但我有一些新的信息,如果它显示出更多的希望,我很感兴趣。
下面的代码首先尝试查找附着的边界,然后尝试查找嵌套在当前位于“Defpoints”的块中的多段线
你认为有什么方法可以修改这个代码来选择深蓝色的盒子吗?我相信它必须在DWG文件中,如果它在那里,那么程序至少应该能够找到实体。
(defun C:BlueBox ()
;;; ==============================================================
;;; Find an AutoCAD border
;;; ==========================================================
(if (setq s (ssget "x" '((-4 . "<OR") (2 . "TITLEBLOCK") (-4 . "OR>"))))
(progn
(alert "I found the Border")
)) ; end of if
;;; ==============================================================
;;; Find the blue box in the Titleblock
;;; ==============================================================
(if (setq s (ssget "x" '((-4 . "<AND") (0 . "LWPOLYLINE") (8 . "DefPoints") (-4 . "AND>"))))
(progn
(Alert "I found the Blue Box")
)) ; end of if
)
如果我能让它工作,那么我就不会使用“Defpoints”
示例_边框。拉链 要查找块的一部分(而不是属性),需要在“块”表中检查块定义。使用“entnext”逐步完成,在“defpoints”上找到一条多段线(希望只有一条),提取坐标,然后调整相对于块插入坐标和旋转的坐标。唷!
下面是在命令行上键入的一些代码,用于查找块定义,即第一个子图元:
命令:(setq e1(tblobjname“block”“titleblock”))
命令:(entget e1)
((-1 . ) (0.“块”)(330)
(5.“C1CF”)(100.“AcDbEntity”)(67.0)(8.“0”)(370.-3)(100。
“AcDbBlockBegin”)(70.2)(10 0.0 0.0(-2)(2 .
“标题栏”)(1。”“”(4。“这是一个示例块”))
命令:(entget(entnext e1))
((-1 . ) (0.“线”)(330)(5
. “C1D1”)(100。“AcDbEntity”)(67.0)(8。“BorderLine2”)(6。“Continuous”)
(100.“AcDbLine”)(10 39.875 3.5 0.0)(11 39.5 3.5 0.0)(210 0.0 0.0 1.0) 不错,卡尔,我没想到
页:
[1]
2