乐筑天下

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

[编程交流] 仅选择属性块

[复制链接]

73

主题

261

帖子

195

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
375
发表于 2022-7-5 17:15:35 | 显示全部楼层 |阅读模式
你好
 
使用lisp选择正方形内的所有对象,并高亮显示它们以填充快捷特性。
但这个Lisp程序选择了全部。我希望它只选择模型空间中的属性块。
我知道它与(66.1)和(ssget“_x”'((0。“insert”))有关。
我只是不知道该怎么说,也不知道该怎么说。
 
 
 
 
  1. (defun c:SWCC (/ _pac add ss i e temp it o a b pts tempC i3 ec)
  2. ;; Select Within/Crossing Curve
  3. (vl-load-com)
  4. (defun _pac (e / l v d lst)
  5.    (setq d (- (setq v (/ (setq l (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e))) 100.))))
  6.    (while (< (setq d (+ d v)) l)
  7.      (setq lst (cons (trans (vlax-curve-getPointAtDist e d) 0 1) lst))
  8.    )
  9. )
  10. (initget 0 "Crossing Within")
  11. (setq *SWCC:Opt*
  12.         (cond ((getkword (strcat "\nSpecify selection method witin curve [Crossing/Within] <"
  13.                                  (cond (*SWCC:Opt*)
  14.                                        ((setq *SWCC:Opt* "Crossing"))
  15.                                  )
  16.                                  ">: "
  17.                          )
  18.                )
  19.               )
  20.               (*SWCC:Opt*)
  21.         )
  22. )
  23. (princ "\nSelect closed curves to select object(s) within: ")
  24. (if (setq add (ssadd)
  25.            ss  (ssget '((-4 . "<OR")
  26.                         (0 . "CIRCLE,ELLIPSE")
  27.                         (-4 . "<AND")
  28.                         (0 . "*POLYLINE")
  29.                         (-4 . "&=")
  30.                         (70 . 1)
  31.                         (-4 . "AND>")
  32.                         (-4 . "OR>")
  33.                        )
  34.                )
  35.      )
  36.    (progn (repeat (setq i (sslength ss))
  37.             (if (setq temp (ssget "_WP" (_pac (setq e (ssname ss (setq i (1- i)))))))
  38.               (repeat (setq i2 (sslength temp)) (ssadd (ssname temp (setq i2 (1- i2))) add))
  39.             )
  40.             (if (eq *SWCC:Opt* "Crossing")
  41.               (progn (vla-getboundingbox (setq o (vlax-ename->vla-object e)) 'a 'b)
  42.                      (setq pts (mapcar 'vlax-safearray->list (list a b)))
  43.                      (if (setq tempC (ssget "_C"
  44.                                             (list (caar pts) (cadar pts) 0.)
  45.                                             (list (caadr pts) (cadadr pts) 0.)
  46.                                      )
  47.                          )
  48.                        (repeat (setq i3 (sslength tempC))
  49.                          (if (vlax-invoke
  50.                                o
  51.                                'Intersectwith
  52.                                (vlax-ename->vla-object (setq ec (ssname tempC (setq i3 (1- i3)))))
  53.                                acExtendNone
  54.                              )
  55.                            (ssadd ec add)
  56.                          )
  57.                        )
  58.                      )
  59.               )
  60.             )
  61.           )
  62.           (sssetfirst nil add)
  63.           (ssget "_I")
  64.    )
  65. )
  66. (princ)
  67. )

 
提前谢谢你。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:26:31 | 显示全部楼层
ssget的一个选项是使用410代码,这只强制使用模型空间。您的代码ss(ssget’((cons 410“Model”)(-4)
回复

使用道具 举报

0

主题

375

帖子

385

银币

限制会员

铜币
-7
发表于 2022-7-5 17:32:55 | 显示全部楼层
  1. (setq temp (ssget "_WP" (_pac (setq e (ssname ss (setq i (1- i))))) '((0 . "INSERT") (66 . 1))))
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-5 17:40:24 | 显示全部楼层
六月份你的帖子编辑得很有趣。
谢谢你完全删除我的名字。
http://www.cadtutor.net/forum/showthread.php?97379-选择多段线内或相交的块
回复

使用道具 举报

73

主题

261

帖子

195

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
375
发表于 2022-7-5 17:52:59 | 显示全部楼层
对不起,艾伦,这不是我的本意。但我试图用Ncopy调整lisp,从外部参照中复制一个矩形,并将其用于脚本的选择。
我确实删除了你的名字,让我更清楚一点。我对lisp一无所知,尽量保持清楚。所以我在cadtutor上做了一些剪贴。
再次抱歉。
 
PmxCAD
回复

使用道具 举报

73

主题

261

帖子

195

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
375
发表于 2022-7-5 18:00:03 | 显示全部楼层
比加尔和斯特凡BMR,
 
谢谢你抽出时间。
我不知道如何将其应用于lisp。
我对lisp一无所知。你能帮助我吗?
 
PmxCAD
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-5 18:07:24 | 显示全部楼层
 
上面的代码和我在网上发布的代码唯一的不同之处是,我在上面写下了我的名字和日期,却省略了一行注释。
你为清楚起见而声称省略,听起来像博洛尼亚。
 
 
如果试图在选定的嵌套多段线内创建属性块的选择,可以平移嵌套多段线的点(从gile中查找WCS转换子程序),或创建多段线,提取点,然后删除多段线。
如。
  1. (defun c:CreateNestedLWPolyline (/ e new)
  2. (if (and
  3.        (setq e (nentselp "\nSelect nested LWPolyline: "))
  4.        (eq (length e) 4)
  5.        (eq (cdr (assoc 0 (entget (car e)))) "LWPOLYLINE")
  6.        (setq new (entmakex (entget (car e))))
  7.      )
  8.    (vla-transformby (vlax-ename->vla-object new) (vlax-tmatrix (caddr e)))
  9. )
  10. (princ)
  11. )
  12. (vl-load-com)
  13. (princ)
回复

使用道具 举报

73

主题

261

帖子

195

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
375
发表于 2022-7-5 18:11:39 | 显示全部楼层
这就是我目前使用的。从外部参照复制多段线/矩形,选择多段线/矩形,交叉。。。。。。
但它也选择除块和多段线/矩形之外的其他对象。一定只有街区。
 
 
  1. (command "_.ncopy" "\" "" "_non" '(0 0) "_non" '(0 0))
  2. ((/ _pac add ss i e temp it o a b pts tempC i3 ec)
  3. ;; Select Within/Crossing Curve
  4. (vl-load-com)
  5. (defun _pac (e / l v d lst)
  6.    (setq d (- (setq v (/ (setq l (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e))) 100.))))
  7.    (while (< (setq d (+ d v)) l)
  8.      (setq lst (cons (trans (vlax-curve-getPointAtDist e d) 0 1) lst))
  9.    )
  10. )
  11. (initget 0 "Crossing Within")
  12. (setq *SWCC:Opt*
  13.         (cond ((getkword (strcat "\nSpecify selection method witin curve [Crossing/Within] <"
  14.                                  (cond (*SWCC:Opt*)
  15.                                        ((setq *SWCC:Opt* "Crossing"))
  16.                                  )
  17.                                  ">: "
  18.                          )
  19.                )
  20.               )
  21.               (*SWCC:Opt*)
  22.         )
  23. )
  24. (princ "\nSelect closed curves to select object(s) within: ")
  25. (if (setq add (ssadd)
  26.            ss  (ssget '((-4 . "<OR")
  27.                         (0 . "CIRCLE,ELLIPSE")
  28.                         (-4 . "<AND")
  29.                         (0 . "*POLYLINE")
  30.                         (-4 . "&=")
  31.                         (70 . 1)
  32.                         (-4 . "AND>")
  33.                         (-4 . "OR>")
  34.                        )
  35.                )
  36.      )
  37.    (progn (repeat (setq i (sslength ss))
  38.             (if (setq temp (ssget "_WP" (_pac (setq e (ssname ss (setq i (1- i)))))))
  39.               (repeat (setq i2 (sslength temp)) (ssadd (ssname temp (setq i2 (1- i2))) add))
  40.             )
  41.             (if (eq *SWCC:Opt* "Crossing")
  42.               (progn (vla-getboundingbox (setq o (vlax-ename->vla-object e)) 'a 'b)
  43.                      (setq pts (mapcar 'vlax-safearray->list (list a b)))
  44.                      (if (setq tempC (ssget "_C"
  45.                                             (list (caar pts) (cadar pts) 0.)
  46.                                             (list (caadr pts) (cadadr pts) 0.)
  47.                                      )
  48.                          )
  49.                        (repeat (setq i3 (sslength tempC))
  50.                          (if (vlax-invoke
  51.                                o
  52.                                'Intersectwith
  53.                                (vlax-ename->vla-object (setq ec (ssname tempC (setq i3 (1- i3)))))
  54.                                acExtendNone
  55.                              )
  56.                            (ssadd ec add)
  57.                          )
  58.                        )
  59.                      )
  60.               )
  61.             )
  62.           )
  63.           (sssetfirst nil add)
  64.           (ssget "_I")
  65.    )
  66. )
  67. (princ)
  68. )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:22:44 | 显示全部楼层
pmxcad我认为最好的建议和注意183个帖子是,现在是时候让你做一点研究,学习如何写一个Lisp程序,像上面的其他人一样,我张贴了一个准确的答案,你的问题,它可以直接剪切和粘贴。最好是在谷歌上搜索“Help SSGET”或使用Autocad帮助,他们的帮助是解释可以添加的所有过滤器。看看李·麦克。他还有一个很好的SSGET教程
 
  1. example
  2. (setq ss (ssget "X" '((cons 0 "insert")(cons 8 "Duct")(cons 410 "Model")(cons 41 1))))

 
下面是在pline中获取文本的另一个示例。它可以很容易地更改为允许选择块提示“插入”
  1. ; By Alan H may 2013
  2. (vl-load-com)
  3. (defun getcoords (ent)
  4. (vlax-safearray->list
  5.    (vlax-variant-value
  6.      (vlax-get-property
  7.    (vlax-ename->vla-object ent)
  8.    "Coordinates"
  9.      )
  10.    )
  11. )
  12. )
  13. (defun co-ords2xy ()
  14. ; 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
  15. (setq numb (/ (length co-ords) 2))
  16. (setq I 0)
  17. (repeat numb
  18. (setq xy (list (nth I co-ords)(nth (+ I 1) co-ords) ))
  19. (setq coordsxy (cons xy coordsxy))
  20. (setq I (+ I 2))
  21. ) ; end repeat
  22. ) ; end defun
  23. ; program starts here
  24. ; choose output file change acdatemp to what you want
  25. (setq fname (strcat "c:/alan/" (getstring "\nEnter file name ")))
  26. (setq fout (open fname "w"))
  27. (setq plobjs (ssget (list (cons 0 "lwpolyline"))))
  28. (setq numb1 (sslength plobjs))
  29. (setq x numb1)
  30. (repeat numb1
  31. (setq obj (ssname plobjs (setq x (- x 1))))
  32. (setq co-ords (getcoords obj))
  33. (co-ords2xy)
  34. ; write pline co-ords here
  35. (setq numb3 (length co-ords))
  36. (setq z numb3)
  37. (setq ansco-ords "")
  38. (repeat numb3
  39. (setq ansco-ords (strcat ansco-ords (rtos (nth (setq z (- z 1)) co-ords) 2 3 ) " " ))
  40. )
  41. (setq ans (strcat "Pline " ansco-ords))
  42. (write-line ans fout)
  43. (setq ansco-ords "")
  44. (setq ss (ssget "WP" coordsxy (list (cons 0 "Text,Mtext")))) ; selection set of text within polygon
  45. (if (= ss nil)
  46. (princ "\nnothing inside")
  47. (progn
  48. (setq coordsxy nil) ; reset for next time
  49. (setq numb2 (sslength ss))
  50. (setq y numb2)
  51. (repeat numb2
  52. (setq anstext (vlax-get-property (vlax-ename->vla-object (ssname ss (setq y (- y 1)))) "Textstring"))
  53. (princ anstext) ; change to write text to file
  54. (write-line (strcat "text " anstext) fout)
  55. (princ "\n")
  56. ) ; end repeat2
  57. (setq ss nil) ; reset for next poly
  58. )
  59. )
  60. ) ; end repeat1
  61. (close fout)
  62. (princ)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 07:52 , Processed in 0.383480 second(s), 70 queries .

© 2020-2025 乐筑天下

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