乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 79|回复: 17

[编程交流] 检查块中的实体

[复制链接]

19

主题

44

帖子

25

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
95
发表于 2022-7-6 15:08:48 | 显示全部楼层 |阅读模式
我们有不同大小的边框,我附上一个作为样本。无论如何,我知道如何按名称查找边界块,然后定位原点。
然而,我也希望能够找到对角点,因此我可以在它周围创建一个窗口,并用该点做其他一些事情。
有什么办法可以做到吗?我想到的方法是在DefPoints层上使用深蓝色框;但我找不到块的那些子实体。
我不在乎我必须使用什么语言;但我更喜欢LISP而不是VBA。
再次感谢你的帮助。
示例_边框。图纸
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:13:46 | 显示全部楼层
您好,我很乐意为您提供帮助,但您可以上传2000格式的文件吗?
 
谢谢
回复

使用道具 举报

19

主题

44

帖子

25

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
95
发表于 2022-7-6 15:17:03 | 显示全部楼层
谢谢
 
这是保存为2000格式的文件
Sample_Border_2000。图纸
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:21:02 | 显示全部楼层
如果图形中只有边框,这可能会有所帮助:
 
  1. (defun c:dwgdim    (/ bt tp)
  2.    (setq bt (getvar "extmin")
  3.      tp (getvar "extmax")
  4.    ) ;_  end setq
  5.    (alert (strcat "Drawing Dimensions are: \n"
  6.           (rtos (- (car tp) (car bt)) 2 2)
  7.           " x "
  8.           (rtos (- (cadr tp) (cadr bt)) 2 2)
  9.       ) ;_  end strcat
  10.    ) ;_  end alert
  11.    (princ)
  12. ) ;_  end defun
,但这远不理想
 
 
编辑:
 
我不是指图画中“唯一”的东西,我是指图画中“最大”的东西。
回复

使用道具 举报

19

主题

44

帖子

25

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
95
发表于 2022-7-6 15:23:50 | 显示全部楼层
感谢李的帮助,这是一个良好的开端;但我不能假设人们不会把任何东西放在边境之外。我自己也经常这样做。它确实使齿轮运转彻底。
 
我想我找到了一个方法;但是我不能让周长函数工作。有人看到我错过了什么吗?vla Get区域就像一个符咒,LISP确实将vla Get周长识别为一个函数(在编辑器中)
 
  1. [color=black](vl-load-com)[/color]
  2. [color=black](command ".-boundary" "A" "I" "N" "+X" "" ".1,.1" "") ; Create Boundary around BlueBox[/color]
  3. [color=black](setq entBound (entlast)) ; Identify Boundary that was just created[/color]
  4. [color=black](setq AreaBor (vla-get-Area (vlax-ename->vla-object  entBound))) ; Boundary Area[/color]
  5. [color=black](setq ParaBor (vla-get-perimeter (vlax-ename->vla-object entBound))) ; Boundary Parameter[/color]

 
如果你相信的话,我最初能够通过这个测试代码获得参数;但现在即使这样也不想起作用。
 
  1. [color=black](VLA-GET-PERIMETER (vlax-ename->vla-object (car (entsel))))[/color]

 
我发现这个错误:
 
 
再次感谢您的帮助。
-克里斯
回复

使用道具 举报

19

主题

44

帖子

25

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
95
发表于 2022-7-6 15:29:02 | 显示全部楼层
值得一提的是,这里有另一个工作代码,无论外面是什么,它都会工作。
 
我不确定是否有其他人能从中得到任何帮助,彻底。
 
再次感谢您的帮助。我真的很感激,即使我最终没有使用精确的代码。
 
  1. (command ".-boundary" "A" "I" "N" "+X" "" ".1,.1" "") ; Create Boundary around BlueBox
  2. (setq entBound (entlast)) ; Identify Boundary that was just created
  3. (setq diag (cdr (assoc 10 (entget entBound))))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:33:31 | 显示全部楼层
谢谢Olhado,这是最后一篇慷慨的帖子。
回复

使用道具 举报

19

主题

44

帖子

25

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
95
发表于 2022-7-6 15:35:38 | 显示全部楼层
我想我们(包括我自己)都认为这条线索已经结束了。
 
我可以接受上述情况;但我有一些新的信息,如果它显示出更多的希望,我很感兴趣。
 
下面的代码首先尝试查找附着的边界,然后尝试查找嵌套在当前位于“Defpoints”的块中的多段线
 
你认为有什么方法可以修改这个代码来选择深蓝色的盒子吗?我相信它必须在DWG文件中,如果它在那里,那么程序至少应该能够找到实体。
 
  1. (defun C:BlueBox ()
  2. ;;; ==============================================================
  3. ;;;   Find an AutoCAD border                                       
  4. ;;; ==========================================================
  5. (if (setq s (ssget "x" '((-4 . "<OR") (2 . "TITLEBLOCK") (-4 . "OR>"))))
  6.    (progn
  7.      (alert "I found the Border")
  8.    )) ; end of if
  9. ;;; ==============================================================
  10. ;;;   Find the blue box in the Titleblock                          
  11. ;;; ==============================================================
  12. (if (setq s (ssget "x" '((-4 . "<AND") (0 . "LWPOLYLINE") (8 . "DefPoints") (-4 . "AND>"))))
  13.    (progn
  14.       (Alert "I found the Blue Box")
  15.    )) ; end of if  
  16. )

 
如果我能让它工作,那么我就不会使用“Defpoints”
示例_边框。拉链
回复

使用道具 举报

0

主题

269

帖子

279

银币

限制会员

铜币
-4
发表于 2022-7-6 15:39:35 | 显示全部楼层
要查找块的一部分(而不是属性),需要在“块”表中检查块定义。使用“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)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:40:49 | 显示全部楼层
不错,卡尔,我没想到
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 19:23 , Processed in 1.579311 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表