乐筑天下

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

[编程交流] 打断与相交的所有线

[复制链接]

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 08:32:46 | 显示全部楼层
c: BreakwObjects-使用单个对象打断多个对象
回复

使用道具 举报

5

主题

20

帖子

15

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 08:34:41 | 显示全部楼层
 
我已经见过这个人了。。。
好吧,这不是我需要的。。。
 
我会告诉大家:
 
我有一个lisp,可以创建端点带有箭头的直线:
 
这是代码
 
  1. (defun C:FLUXO (/ PT ENT PT1 PT2 ANG PTA PTB TP ARANG ARROW Slist OK FIM )
  2. (setq Pt1 (getpoint "\nSpecify first point: "))
  3. (initget 1)      
  4. (setq Pt2 (getpoint Pt1 "\nSpecify second point: "))
  5. (command "._line" Pt1 Pt2 "")   
  6. (setq old_lay (getvar "clayer"))
  7. (command "layer" "set" "0" "")
  8. (setq setinha  (entlast)
  9.        ARANG (angle PT1 PT2)
  10. FIM     (polar PT2 ARANG -3) ; fim da seta
  11. ARROW (list (cons 0 "LWPOLYLINE")
  12.      (cons 100 "AcDbEntity")
  13.      (cons 8 (getvar "clayer"))
  14.      (cons 100 "AcDbPolyline")
  15.      (cons 90 3)
  16.      (cons 70 128)
  17.      (cons 38 0)
  18.      (cons 39 0)
  19.      (cons 10 PT2)
  20.      (cons 40 0)
  21.      (cons 41 1.5)
  22.      (cons 42 0)
  23.      (cons 10 FIM)
  24.      (cons 40 0)
  25.      (cons 41 0)
  26.      (cons 42 0)
  27.      (cons 40 0)
  28.      (cons 41 0)
  29.      (cons 42 0)
  30.       )
  31. )
  32. (entmake ARROW)
  33. (princ)
  34. (command "layer" "set" old_lay "")
  35. (setq
  36. SList (ssadd (entlast))    ; begin a selection set of center line
  37. OK T      ; set flag
  38. ) ;_ closes setq
  39. (while OK      ; while still drawing lines
  40. (setq Pt1 (getvar "LastPoint"))   ; used for next line command
  41. (setq Pt2 (getpoint Pt1 "\nSpecify next point: ")) ; get next point
  42. (if Pt2      ; if a point was chosen
  43.   (progn      ; then...
  44.    (command "._line" Pt1 Pt2 "")   ; draw next line
  45. (setq old_lay (getvar "clayer"))
  46. (command "layer" "set" "0" "")
  47. (setq setinha  (entlast)
  48.        ARANG (angle PT1 PT2)
  49. FIM     (polar PT2 ARANG -3) ; fim da seta
  50. ARROW (list (cons 0 "LWPOLYLINE")
  51.      (cons 100 "AcDbEntity")
  52.      (cons 8 (getvar "clayer"))
  53.      (cons 100 "AcDbPolyline")
  54.      (cons 90 3)
  55.      (cons 70 128)
  56.      (cons 38 0)
  57.      (cons 39 0)
  58.      (cons 10 PT2)
  59.      (cons 40 0)
  60.      (cons 41 1.5)
  61.      (cons 42 0)
  62.      (cons 10 FIM)
  63.      (cons 40 0)
  64.      (cons 41 0)
  65.      (cons 42 0)
  66.      (cons 40 0)
  67.      (cons 41 0)
  68.      (cons 42 0)
  69.       )
  70. )
  71. (entmake ARROW)
  72. (princ)
  73. (command "layer" "set" old_lay "")
  74.    (setq SList (ssadd (entlast) SList))
  75.   )
  76.   (progn      
  77.    (setq OK NIL)     
  78.   )
  79. )
  80. )
  81. )

 
我的lisp编码很糟糕,所以我修改了另一个person代码。
我需要用箭头画线,然后打断垂直的线,像这样截取水平线:
085858z1fu1w5qdms88usm.jpg
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 08:38:29 | 显示全部楼层
使用“BreakWith”将产生以下结果:
085859ct40myay6j34c0za.png
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 08:42:17 | 显示全部楼层
试试我以前的代码库中的Lisp
(不记得它是怎么工作的,抱歉)
 
BreakVert。lsp
  1. ;;break vertical lines only
  2. (defun C:BreakVert(/ copya ent_list hlines hobjs points tmp vlines vobjs)
  3. ;;get all lines entity lists
  4. (setq ent_list (mapcar 'entget
  5. (vl-remove-if 'listp
  6. (mapcar 'cadr
  7. (ssnamex (ssget (list '(0 . "LINE"))))))))
  8. ;;vertical lines
  9. (setq vlines (mapcar 'cdr
  10.       (mapcar 'car
  11.        (vl-remove-if-not
  12. (function (lambda(x)
  13.       (equal (car (cdr (assoc 10 x)))
  14. (car (cdr (assoc 11 x))) 0.001))) ent_list))))
  15. ;;horizontal lines
  16. (setq hlines (mapcar 'cdr
  17.       (mapcar 'car
  18.        (vl-remove-if-not
  19. (function (lambda(x)
  20.       (equal (cadr (cdr (assoc 10 x)))
  21.       (cadr (cdr (assoc 11 x))) 0.001))) ent_list))))
  22. ;;convert to vla-objects
  23. (setq vobjs (mapcar 'vlax-ename->vla-object vlines))
  24. (setq hobjs (mapcar 'vlax-ename->vla-object hlines))
  25. (foreach a vobjs
  26. (setq tmp (list (vlax-curve-getstartpoint a)
  27.    (vlax-curve-getendpoint a))
  28. )
  29. (foreach b hobjs
  30.    (setq points (vlax-invoke a 'Intersectwith b 0))
  31.    (if (= 3 (length points));two perpendicular lines has just one intersection
  32.      (setq tmp (cons points tmp ))))
  33. (if (> (length tmp) 2)
  34.    (progn
  35.      (setq tmp (vl-sort tmp (function (lambda(x y)
  36.     (< (vlax-curve-getparamatpoint a x)
  37.        (vlax-curve-getparamatpoint a y))))))
  38.      (vla-put-startpoint a (vlax-3d-point (car tmp)))
  39.      (vla-put-endpoint a (vlax-3d-point (cadr tmp)))
  40.      (setq tmp (cdr tmp))
  41.      (repeat (1- (length  tmp))
  42. (setq copya (vla-copy a))
  43. (vla-put-startpoint copya (vlax-3d-point (car tmp)))
  44. (vla-put-endpoint copya (vlax-3d-point (cadr tmp)))
  45. (setq tmp (cdr tmp)))))
  46. )
  47. (princ)
  48. )

BreakHorz。lsp
  1. ;;break horizontal lines only
  2. (defun C:BreakHorz(/ copya ent_list hlines hobjs points tmp vlines vobjs)
  3. ;;get all lines entity lists
  4. (setq ent_list (mapcar 'entget
  5. (vl-remove-if 'listp
  6. (mapcar 'cadr
  7. (ssnamex (ssget (list '(0 . "LINE"))))))))
  8. ;;vertical lines
  9. (setq vlines (mapcar 'cdr
  10.       (mapcar 'car
  11.        (vl-remove-if-not
  12. (function (lambda(x)
  13.       (equal (car (cdr (assoc 10 x)))
  14. (car (cdr (assoc 11 x))) 0.001))) ent_list))))
  15. ;;horizontal lines
  16. (setq hlines (mapcar 'cdr
  17.       (mapcar 'car
  18.        (vl-remove-if-not
  19. (function (lambda(x)
  20.       (equal (cadr (cdr (assoc 10 x)))
  21.       (cadr (cdr (assoc 11 x))) 0.001))) ent_list))))
  22. ;;convert to vla-objects
  23. (setq vobjs (mapcar 'vlax-ename->vla-object vlines))
  24. (setq hobjs (mapcar 'vlax-ename->vla-object hlines))
  25. (foreach a hobjs
  26. (setq tmp (list (vlax-curve-getstartpoint a)
  27.    (vlax-curve-getendpoint a))
  28. )
  29. (foreach b vobjs
  30.    (setq points (vlax-invoke a 'Intersectwith b 0))
  31.    (if (= 3 (length points));two perpendicular lines has just one intersection
  32.      (setq tmp (cons points tmp ))))
  33. (if (> (length tmp) 2)
  34.    (progn
  35.      (setq tmp (vl-sort tmp (function (lambda(x y)
  36.     (< (vlax-curve-getparamatpoint a x)
  37.        (vlax-curve-getparamatpoint a y))))))
  38.      (vla-put-startpoint a (vlax-3d-point (car tmp)))
  39.      (vla-put-endpoint a (vlax-3d-point (cadr tmp)))
  40.      (setq tmp (cdr tmp))
  41.      (repeat (1- (length  tmp))
  42. (setq copya (vla-copy a))
  43. (vla-put-startpoint copya (vlax-3d-point (car tmp)))
  44. (vla-put-endpoint copya (vlax-3d-point (cadr tmp)))
  45. (setq tmp (cdr tmp)))))
  46. )
  47. (princ)
  48. )

 
~'J'~
回复

使用道具 举报

5

主题

20

帖子

15

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 08:45:34 | 显示全部楼层
fixo如何在垂直代码中设置偏移距离?
回复

使用道具 举报

5

主题

20

帖子

15

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 08:47:53 | 显示全部楼层
驾驶室:我需要垂直卡扣完好无损。“BreakWith”将其打断为
 
修正:
我在代码中添加了这一行
  1. (setq pt1 (polar (car tmp) 1.57079633  -2))
  2. (setq pt2 (polar (cadr tmp) 4.71238898 -2))
  3. (vla-put-startpoint copya (vlax-3d-point pt1))
  4. (vla-put-endpoint copya (vlax-3d-point pt2))

 
但它也破坏了垂直捕捉
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:52:09 | 显示全部楼层
ObjectSnap问题完全是另一个问题,该功能仅依赖于实体数据-请记住,AutoCAD不知道线是断开的,只是为了清晰起见-AutoCAD将它们视为两条单独的线。你要求太多了。
 
如果您想使所有快照保持得体,则需要使用擦拭器或类似工具。
回复

使用道具 举报

5

主题

20

帖子

15

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 08:55:34 | 显示全部楼层
谁能帮帮我!!
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 08:58:31 | 显示全部楼层
英雄联盟
我想说有几个是。
回复

使用道具 举报

5

主题

20

帖子

15

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 09:00:09 | 显示全部楼层
 
伙计,我只是想寻求帮助!
我真的需要这个,不知道怎么做
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-9 21:12 , Processed in 0.651362 second(s), 72 queries .

© 2020-2025 乐筑天下

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