乐筑天下

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

[编程交流] 基于多段线分割块

[复制链接]

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 15:44:05 | 显示全部楼层 |阅读模式
大家好,经过近一个月的搜索、阅读和编码,我有点放弃了,刚刚注册了一个帐户,在这里寻求帮助,任何建议都将不胜感激!!
 
我一直在尝试的是根据内部的小多段线矩形分割块,闭合的多段线/矩形具有相同的大小。一个矩形中包含的任何属性标记都应在同一位置创建为一个块。最后,一些较小的区块将取代旧的单个区块。
 
例如,我想将这个单个块(附加)转换为6个具有属性的单独块,每个块的标记都会更新:
图纸1.dwg
 
最初,我的想法是根据内部实体将它们分开,我尝试使用nentsel、entnext、burst、insert编写一些lisp,但效果并不好,因为我有数千个这样的块,有时6个组合成一个,有时3个组合在一起,实体并不总是在数据库中从上到下创建。这就是为什么我开始研究“多段线”,但不知道如何使其工作,因为我只是autolisp的初学者
 
请帮忙!
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:49:59 | 显示全部楼层
使用此
 
  1. (setq obj (vlax-ename->vla-object (car (entsel))))
  2. (vla-GetBoundingBox obj 'minpoint 'maxpoint)
  3. (setq minpt (vlax-safearray->list  minpoint))
  4. (setq maxpt (vlax-safearray->list  maxpoint))

 
这样可以找到块的角。然后冲破障碍。使用co-ords可以创建多段线的选择集,然后找到其中的文本。
 
现在,用文本作为属性(如tag1 tag2等)制作一个pline块,并将属性值填充到文本值中。
 
唷!
 
中间需要很多代码。
 
一个开始。
  1. (setq sspl (ssget "CP" (list minpt maxpt)))

 
  1. ; Text in polygons
  2. ; By Alan H may 2013
  3. (vl-load-com)
  4. (defun getcoords (ent)
  5. (vlax-safearray->list
  6.    (vlax-variant-value
  7.      (vlax-get-property
  8.    (vlax-ename->vla-object ent)
  9.    "Coordinates"
  10.      )
  11.    )
  12. )
  13. )
  14. (defun co-ords2xy ()
  15. ; convert now to a list of xy as co-ords are x y x y x y if 3d x y z x y z
  16. (setq numb (/ (length co-ords) 2))
  17. (setq I 0)
  18. (repeat numb
  19. (setq xy (list (nth I co-ords)(nth (+ I 1) co-ords) ))
  20. (setq coordsxy (cons xy coordsxy))
  21. (setq I (+ I 2))
  22. ) ; end repeat
  23. ) ; end defun
  24. ; program starts here
  25. ; choose output file change acdatemp to what you want
  26. (setq fname (strcat "c:/alan/" (getstring "\nEnter file name ")))
  27. (setq fout (open fname "w"))
  28. (setq plobjs (ssget (list (cons 0 "lwpolyline"))))
  29. (setq numb1 (sslength plobjs))
  30. (setq x numb1)
  31. (repeat numb1
  32. (setq obj (ssname plobjs (setq x (- x 1))))
  33. (setq co-ords (getcoords obj))
  34. (co-ords2xy)
  35. ; write pline co-ords here
  36. (setq numb3 (length co-ords))
  37. (setq z numb3)
  38. (setq ansco-ords "")
  39. (repeat numb3
  40. (setq ansco-ords (strcat ansco-ords (rtos (nth (setq z (- z 1)) co-ords) 2 3 ) " " ))
  41. )
  42. (setq ans (strcat "Pline " ansco-ords))
  43. (write-line ans fout)
  44. (setq ansco-ords "")
  45. (setq ss (ssget "WP" coordsxy (list (cons 0 "Text,Mtext")))) ; selection set of text within polygon
  46. (if (= ss nil)
  47. (princ "\nnothing inside")
  48. (progn
  49. (setq coordsxy nil) ; reset for next time
  50. (setq numb2 (sslength ss))
  51. (setq y numb2)
  52. (repeat numb2
  53. (setq anstext (vlax-get-property (vlax-ename->vla-object (ssname ss (setq y (- y 1)))) "Textstring"))
  54. (princ anstext) ; change to write text to file
  55. (write-line (strcat "text " anstext) fout)
  56. (princ "\n")
  57. ) ; end repeat2
  58. (setq ss nil) ; reset for next poly
  59. )
  60. )
  61. ) ; end repeat1
  62. (close fout)
  63. (princ)
回复

举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 15:50:47 | 显示全部楼层
嗨,比格尔,谢谢你的回复
 
但我尝试了vla GetBoundingBox并返回“nil”
 
有什么想法吗?
回复

举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 15:54:43 | 显示全部楼层
在所附的DWG中,小的多段线矩形位于块内,这意味着通常我们必须打开块编辑器才能选择它们,对我来说困难的是获得这些矩形,然后选择由每个矩形绑定的属性并创建一个新块。
回复

举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:57:41 | 显示全部楼层
拾取块。我测试了你的图纸。然后使用burst。重读我帖子中的步骤。
回复

举报

2

主题

261

帖子

20

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-5 16:00:57 | 显示全部楼层
NOSCC公司
附上最终结果示例。
回复

举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 16:04:09 | 显示全部楼层
如果块中的矩形始终相同,并且每个矩形的属性数固定,则算法可能会简单得多。
 
根据名称和/或图层过滤器选择所有插入。
迭代选择集。
对于每个现有插入:
 
[列表]
  • 收集列表中的属性值。
  • 根据该列表插入一个或多个新的标准块并填写属性。
  • 擦除原始插入。
    [/列表]
  • 回复

    举报

    1

    主题

    7

    帖子

    6

    银币

    初来乍到

    Rank: 1

    铜币
    5
    发表于 2022-7-5 16:06:46 | 显示全部楼层
    嗨,马拉托维奇,这里附上一个示例结果
     
    示例结果。图纸
    回复

    举报

    1

    主题

    7

    帖子

    6

    银币

    初来乍到

    Rank: 1

    铜币
    5
    发表于 2022-7-5 16:11:08 | 显示全部楼层
    嗨,罗伊
     
    问题是我们如何收集由块内每个矩形绑定的属性?
     
    请参见此处的示例结果示例。图纸
     
    我手动使用了一些代码,首先我选择了大的组合块,然后我引爆了它,然后我再次使用下面的代码,我手动窗口选择了第一个矩形和属性,将这些文本转换为属性。然后我再次选择这些属性并键入命令“block”来创建一个新块。我们如何为图形中的5000个组合块自动执行此操作?
     
     
     
    (默认c:txt2att(/el i ss st bk)(vl负载com)
    ;(setq bk(ssget’((0。“插入”)))
    ;(c:突发)
     
    (if(setq ss(ssget“_:L”'((0。“TEXT”))));“:L”拒绝锁定层上的实体
    (重复(setq i(sslength ss))
    (setq el(entget(ssname ss(setq i(1-i)))
    st(vl字符串翻译“”(cdr(assoc 1 el)))
    ) ;setq结束
     
     
     
    (if(and(equal(strlen st)11)(vl字符串搜索“-”st))
    (setq st“SOR”)
    (setq st“数量”)
    ) ; if结束
     
     
     
    (entmakex)
    (附加'((0。“ATTDEF”))
    (vl-remove if’(lambda(pair)(member(car pair)’(0 100 73)))el);vl re结束
    (列表
    (cons 70 0)
    (cons 74(cdr(assoc 73 el)))
    (cons 2 st)
    (cons 3 st)
    )
    )
    ) ; entmakex结束
    (entdel(cdr(assoc-1 el));这一行的末尾
     
    ) ; 重复结束
    ) ;if结束
    (普林斯)
    )
    回复

    举报

    106

    主题

    1万

    帖子

    101

    银币

    顶梁支柱

    Rank: 50Rank: 50

    铜币
    1299
    发表于 2022-7-5 16:12:51 | 显示全部楼层
    马拉托维奇查看第1张post图纸和最终图纸。
     
    看看这张图片,我想解释一下序列。
    164406kxvt4wwt9s1w1l4s.jpg
    回复

    举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-15 03:04 , Processed in 1.336518 second(s), 74 queries .

    © 2020-2025 乐筑天下

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