乐筑天下

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

[编程交流] 在多段线内

[复制链接]

35

主题

97

帖子

62

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
175
发表于 2022-7-6 12:21:17 | 显示全部楼层 |阅读模式
大家好,
我从事2D工作。我需要一些简单的。net代码删除选定闭合多段线之外的所有内容。还需要修剪与其相交的所有线。
任何想法都将不胜感激。
当做
乔齐
回复

使用道具 举报

15

主题

71

帖子

56

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 12:28:59 | 显示全部楼层
我有一个。我发现的lsp例程叫做CookieCutter2 v1.0。lsp它不是我的,但我修改了它,总是询问用户是否希望将实体转换为线,以便正确修剪回封闭的多边形线。它不适合修剪部分,所以我建议使用EXTRIM命令进行修剪,而使用EXTRIM命令进行擦除。此外,我将PROJMODE变量设置为2,如果将其设置为0或1,则可能会在高程方面遇到麻烦。
CookieCutter2 v1.0。lsp
回复

使用道具 举报

10

主题

109

帖子

99

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 12:37:02 | 显示全部楼层
Jozi68,
如果你还在看的话,这里有几个简短的节目。它们很简单,错误陷阱可以进行一些开发。如果你觉得它们有用,请告诉我,我会完成错误捕获。
 
  1. ; tio.lsp - Trim Inside or Outside of closed polyline.
  2. ;           For lightweight closed polylines only.
  3. ;           The fence location sets the distance (inside
  4. ;           or outside) from the polyline to the offset
  5. ;           that defines the fence.
  6. (defun findver (entname / verlst lst i)
  7. (setq verlst nil)
  8. (setq i 0)
  9. (setq lst (entget entname))
  10. (repeat (length lst)
  11. (if (= (car (nth i lst)) 10)
  12. (setq verlst (append verlst (list (cdr (nth i lst)))))
  13. )
  14. (setq i (1+ i))
  15. )
  16. verlst
  17. )
  18. (defun c:tio (/ *ERROR* lwp floc fen fset ff)
  19. (defun *ERROR* (msg)
  20. (setvar "CMDECHO" 1)
  21. (setvar "OSMODE" osave)
  22. (princ)
  23. )
  24. (setvar "CMDECHO" 0)
  25. (setq osave (getvar "OSMODE"))
  26. (setvar "OSMODE" 0)
  27. (setq lwp (car (entsel "\n Pick polyline")))
  28. (redraw lwp 3)
  29. (setq floc (getpoint "\n Pick fence location"))
  30. (command "OFFSET" "T" lwp floc "")
  31. (setq fen (entlast))
  32. (setq fset (findver fen))
  33. (entdel fen)
  34. (setq ff (car fset))
  35. (setq fset (append fset (list ff)))
  36. (command "TRIM" lwp "" "F" fset "" "")
  37. (setvar "OSMODE" osave)
  38. (setvar "CMDECHO" 1)
  39. (redraw)
  40. (princ)
  41. )

 
  1. ; sdop.lsp - Select and Delete objects Outside of closed Polyline.
  2. ;            To trim lines projecting from closed region, first use
  3. ;            TIO, then run SDOP.
  4. (defun findver (entname / verlst lst i)
  5. (setq verlst nil)
  6. (setq i 0)
  7. (setq lst (entget entname))
  8. (repeat (length lst)
  9. (if (= (car (nth i lst)) 10)
  10. (setq verlst (append verlst (list (cdr (nth i lst)))))
  11. )
  12. (setq i (1+ i))
  13. )
  14. verlst
  15. )
  16. (defun c:sdop (/ *ERROR* lwp vset cset clen n cname)
  17. (defun *ERROR* (msg)
  18. (setvar "CMDECHO" 1)
  19. (setq cset nil)
  20. (princ)
  21. )
  22. (setvar "CMDECHO" 0)
  23. (setq lwp (car (entsel "\n Pick polyline")))
  24. (setq vset (findver lwp))
  25. (redraw lwp 3)
  26. (command "SELECT" "OP" vset "" "")
  27. (setq cset (ssget "P"))
  28. (setq clen (sslength cset))
  29. (setq n 0)
  30. (repeat clen
  31. (setq cname (ssname cset n))
  32. (entdel cname)
  33. (setq n (+ 1 n))
  34. )
  35. (setq cset nil)
  36. (setvar "CMDECHO" 1)
  37. (redraw)
  38. (princ)
  39. )
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 12:44:02 | 显示全部楼层
你好,卡尔卡德!
 
我对您的SDOP lisp的功能非常感兴趣。不幸的是,我没能让它工作。我试图选择几条不同的多段线,每次都得到以下结果:
 
  1. Command: SDOP
  2. Pick polyline
  3. *Invalid selection*
  4. Expects a point or
  5. Window/Last/Crossing/BOX/ALL/Fence/WPolygon/CPolygon/Group/Add/Remove/Multiple/P
  6. revious/Undo/AUto/SIngle/SUbobject/Object
  7. Select objects:
回复

使用道具 举报

VVA

1

主题

308

帖子

308

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-6 12:47:35 | 显示全部楼层
最新版本CookieCutter:CookieCutter2-使用ET extrim更有趣
简短的节目:
SCWP-选择等高线窗口多边形
SCCP-选择等高线交叉多边形
  1. ;_Select Contour Window Polygon
  2. (defun C:SCWP ()(SelectContour "_WP"))
  3. ;_Select Contour Crossing Polygon
  4. (defun C:SCCP ()(SelectContour "_CP"))
  5. (defun SelectContour ( opt / en ss lst)
  6. (defun DTR (a)(* pi (/ a 180.0)))
  7. (defun  lib:pt_extents (vlist / tmp)
  8. (setq tmp (mapcar '(lambda (x) (vl-remove-if 'null x))
  9. (mapcar '(lambda (what) (mapcar '(lambda (x) (nth what x)) vlist))
  10. '(0 1 2))));_setq
  11. (list (mapcar '(lambda(x)(apply 'min x)) tmp)(mapcar '(lambda(x)(apply 'max x)) tmp)))
  12. (defun lib:IsPtInView (pt / VCTR Y_Len SSZ X_Pix Y_Pix X_Len Lc Uc)
  13. (setq pt (trans pt 0 1))
  14. (setq VCTR (getvar "VIEWCTR") Y_Len (getvar "VIEWSIZE")
  15.   SSZ (getvar "SCREENSIZE")
  16.   X_Pix (car SSZ) Y_Pix (cadr SSZ)
  17.   X_Len (* (/ X_Pix Y_Pix) Y_Len)
  18.   Lc (polar VCTR (dtr 180.0) (* 0.5 X_Len))
  19.   Uc (polar Lc 0.0 X_Len)
  20.   Lc (polar Lc (dtr 270.0) (* 0.5 Y_Len))
  21.   Uc (polar Uc (dtr 90.0) (* 0.5 Y_Len)))
  22. (if (and (> (car pt) (car Lc))(< (car pt) (car Uc))
  23.    (> (cadr pt) (cadr Lc))(< (cadr pt) (cadr Uc)))
  24.   T nil))
  25. (defun lib:Zoom2Lst( vlist / bl tr Lst OS)
  26. (setq   Lst (lib:pt_extents vlist) bl (car Lst) tr (cadr Lst))
  27. (if (not (and (lib:IsPtInView bl) (lib:IsPtInView tr)))
  28. (progn  (setq OS (getvar "OSMODE"))(setvar "OSMODE" 0)
  29. (command "_.Zoom" "_Window" (trans bl 0 1)(trans tr 0 1)
  30.   "_.Zoom" "0.95x")
  31. (setvar "OSMODE" OS) T) NIL))
  32. (defun TraceObject (obj / typlst typ TracePline TraceACE TraceLine
  33.                         TraceSpline TraceType1Pline
  34.                          TraceType23Pline)
  35.    (defun ZClosed (lst)
  36.    (if (and (vlax-curve-isClosed obj)
  37.       (not(equal (car lst)(last lst) 1e-6)))
  38.      (append lst (list (car lst)))
  39.      lst))
  40. (defun TracePline (obj / param endparam anginc tparam pt blg
  41.                           ptlst delta inc arcparam flag)
  42.    (setq param (vlax-curve-getStartParam obj)
  43.          endparam (vlax-curve-getEndParam obj)
  44.          anginc (* pi (/ 7.5 180.0)))
  45.    (setq tparam param)
  46.      (while (<= param endparam)
  47.        (setq pt (vlax-curve-getPointAtParam obj param))
  48.        (if (not (equal pt (car ptlst) 1e-12))
  49.          (setq ptlst (cons pt ptlst)))
  50.        (if  (and (/= param endparam)
  51.            (setq blg (abs (vlax-invoke obj 'GetBulge param)))
  52.            (/= 0 blg))
  53.          (progn
  54.            (setq delta (* 4 (atan blg)) ;included angle
  55.                  inc (/ 1.0 (1+ (fix (/ delta anginc))))
  56.                  arcparam (+ param inc))
  57.            (while (< arcparam (1+ param))
  58.              (setq pt (vlax-curve-getPointAtParam obj arcparam)
  59.                    ptlst (cons pt ptlst)
  60.                    arcparam (+ inc arcparam))))
  61.        )
  62.        (setq param (1+ param)))
  63.    (if (and (apply 'and ptlst)
  64.        (> (length ptlst) 1))
  65.     (ZClosed (reverse ptlst)))) ;end
  66. (defun TraceACE (obj / startparam endparam anginc
  67.                         delta div inc pt ptlst)
  68.    (setq startparam (vlax-curve-getStartParam obj)
  69.          endparam (vlax-curve-getEndParam obj)
  70.          anginc (* pi (/ 5.0 180.0)))
  71.    (if (equal endparam (* pi 2) 1e-12)
  72.      (setq delta endparam)
  73.      (setq delta (NormalAngle (- endparam startparam))))
  74.    (setq div (1+ (fix (/ delta anginc)))
  75.          inc (/ delta div))
  76.    (while (or
  77.        (< startparam endparam)
  78.        (equal startparam endparam 1e-12))
  79.      (setq pt (vlax-curve-getPointAtParam obj startparam)
  80.            ptlst (cons pt ptlst)
  81.            startparam (+ inc startparam)))
  82.    (reverse ptlst)) ;end
  83. (defun TraceLine (obj)(list (vlax-get obj 'StartPoint)
  84.        (vlax-get obj 'EndPoint)))
  85. (defun TraceSpline (obj / startparam endparam ncpts inc param
  86.                            fd ptlst pt1 pt2 ang1 ang2 a)
  87.    (setq startparam (vlax-curve-getStartParam obj)
  88.          endparam (vlax-curve-getEndParam obj)
  89.          ncpts (vlax-get obj 'NumberOfControlPoints)
  90.          inc (/ (- endparam startparam) (* ncpts 7))
  91.          param (+ inc startparam)
  92.          fd (vlax-curve-getfirstderiv obj param)
  93.          ptlst (cons (vlax-curve-getStartPoint obj) ptlst))
  94.    (while (< param endparam)
  95.      (setq pt1 (vlax-curve-getPointAtParam obj param)
  96.            ang1 fd
  97.            param (+ param inc)
  98.            pt2 (vlax-curve-getPointAtParam obj param)
  99.            fd (vlax-curve-getfirstderiv obj param)
  100.            ang2 fd
  101.            a (abs (3d_angw1w2 ang1 ang2)))
  102.      (if (> a 0.00218166)(setq ptlst (cons pt1 ptlst))))
  103.    (if (not (equal
  104.          (setq pt1 (vlax-curve-getEndPoint obj)) (car ptlst) 1e-)
  105.      (setq ptlst (cons pt1 ptlst)))
  106.    (reverse ptlst)) ;end
  107. (defun TraceType1Pline (obj / ptlst objlst lst)
  108.    (setq ptlst (list (vlax-curve-getStartPoint obj))
  109.          objlst (vlax-invoke obj 'Explode))
  110.    (foreach x objlst
  111.      (setq lst (TraceACE x))
  112.      (if (not (equal (car lst) (last ptlst) 1e-)
  113.        (setq lst (reverse lst)))
  114.      (setq ptlst (append ptlst (cdr lst)))
  115.      (vla-delete x))(ZClosed  ptlst)) ;end
  116. (defun TraceType23Pline (obj / objlst ptlst lastpt)
  117.    (setq objlst (vlax-invoke obj 'Explode)
  118.          lastpt (vlax-get (last objlst) 'EndPoint))
  119.    (foreach x objlst
  120.      (setq ptlst (cons (vlax-get x 'StartPoint) ptlst))
  121.      (vla-delete x))(ZClosed (reverse (cons lastpt ptlst)))) ;end
  122. (defun Trace3DPline (obj / coord ptlst)
  123.    (setq coord (vlax-get obj 'Coordinates))
  124.    (repeat (/ (length coord) 3)
  125.      (setq ptlst (cons (list (car coord) (cadr coord)(caddr coord)) ptlst))
  126.      (setq coord (cdddr coord)))(ZClosed (reverse ptlst))) ;end
  127. (defun NormalAngle (a)(if (numberp a)(angtof (angtos a 0 14) 0)))
  128. (defun 3d_angw1w2 (Wekt1 Wekt2 / CosA)
  129. (if (equal (setq CosA (/ (apply '+ (mapcar '* Wekt1 Wekt2))
  130.        (distance '(0 0 0) Wekt1) (distance '(0 0 0) Wekt2))) -1.0 1e-6)
  131. Pi
  132. (if (equal CosA 0.0 1e-6) (* 0.5 PI)(atan (sqrt (- 1 (* CosA CosA))) CosA))))
  133. (setq typlst '("AcDb2dPolyline" "AcDbPolyline" "AcDb3dPolyline" "AcDbCircle"
  134.     "AcDbArc" "AcDbEllipse" "AcDbSpline" "AcDbLine"))
  135. (or (eq (type obj) 'VLA-OBJECT)
  136.    (setq obj (vlax-ename->vla-object obj)))
  137. (setq typ (vlax-get obj 'ObjectName))
  138. (if (vl-position typ typlst)
  139.    (cond ((or (eq typ "AcDb2dPolyline") (eq typ "AcDbPolyline"))
  140.      (cond ((or
  141.               (not (vlax-property-available-p obj 'Type))
  142.               (= 0 (vlax-get obj 'Type)))
  143.              (TracePline obj))
  144.            ((or (= 3 (vlax-get obj 'Type)) (= 2 (vlax-get obj 'Type)))
  145.              (TraceType23Pline obj))
  146.            ((= 1 (vlax-get obj 'Type))
  147.              (TraceType1Pline obj))))
  148.       ((eq typ "AcDbLine")(TraceLine obj))
  149.       ((or (eq typ "AcDbCircle") (eq typ "AcDbArc") (eq typ "AcDbEllipse"))
  150.         (TraceACE obj))
  151.       ((eq typ "AcDbSpline")(TraceSpline obj))
  152.       ((eq typ "AcDb3dPolyline")(Trace3DPline obj))
  153.    )))
  154. (defun mip_MakeUniqueMembersOfList  ( lst / OutList head)
  155. (while lst
  156.    (setq head (car lst)
  157.          OutList (cons head OutList)
  158.          lst (vl-remove-if '(lambda(pt)(equal pt head 1e-6))(cdr lst))
  159.          )
  160.    )
  161. (reverse OutList)
  162. )
  163. (vl-load-com)
  164. (setq en (car(entsel "\nSelect contour: ")))
  165. (if (and en (wcmatch (cdr(assoc 0 (entget en))) "*POLYLINE,SPLINE,CIRCLE,ARC,ELLIPSE"))
  166.    (progn
  167.      (setq lst (TraceObject (vlax-ename->vla-object en)))
  168.      (lib:Zoom2Lst lst)
  169.      (setq lst (mapcar '(lambda(x)(trans x 0 1)) lst))
  170.      (setq lst (mapcar '(lambda(x)(list (car x)(cadr x))) lst))
  171.      (setq lst (mip_MakeUniqueMembersOfList lst))
  172. (if (setq ss (ssget opt lst))
  173. (progn
  174.    (command "_.SELECT" ss "")
  175.    (SSSETFIRST ss ss)
  176.    )
  177. )
  178. (setq ss nil)))(princ))
回复

使用道具 举报

VVA

1

主题

308

帖子

308

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-6 12:52:43 | 显示全部楼层
OCD-外部轮廓删除
  1. (defun C:OCD (  / en ss lst ssall bbox tmp head)
  2. ;_Required Express tools
  3. ;_OutSide Contour Delete
  4. (vl-load-com)
  5. (if (null ACET-GEOM-OBJECT-POINT-LIST)
  6.    (progn
  7.      (alert "Required Express tools!!!")
  8.      (exit)
  9.      )
  10.    )
  11. (if (and (setq en (car(entsel "\nSelect contour: ")))
  12.           (wcmatch (cdr(assoc 0 (entget en))) "*POLYLINE,CIRCLE,ELLIPSE,SPLINE"))
  13.    (progn
  14.      (setq bbox (ACET-ENT-GEOMEXTENTS en))
  15.      (setq bbox (mapcar '(lambda(x)(trans x 0 1)) bbox))
  16.      (setq lst (ACET-GEOM-OBJECT-POINT-LIST en 1e-6))
  17.      (while lst
  18.        (setq head (car lst)
  19.          tmp (cons head tmp)
  20.          lst (vl-remove-if '(lambda(pt)(equal pt head 1e-3))(cdr lst))
  21.          )
  22.        )
  23.      (setq lst (reverse tmp))
  24.      (ACET-SS-ZOOM-EXTENTS (ACET-LIST-TO-SS (list en)))
  25.      (command "_.Zoom" "0.95x")
  26.      (if (and
  27.            (setq ss (ssget "_CP" lst))
  28.            (setq ssall (ssget "_X" (list (assoc 410 (entget en)))))
  29.           )
  30.        (progn
  31.          (setq tmp '-1)
  32.          (repeat (sslength ss)
  33.            (ssdel (ssname ss (setq tmp (1+ tmp))) ssall)
  34.            )
  35.         ;;; (ACET-SS-ENTDEL ssall)
  36.   (command "_.ERASE" ssall "")
  37.          )
  38.        )
  39.      )
  40.    )
  41. )
回复

使用道具 举报

35

主题

97

帖子

62

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
175
发表于 2022-7-6 13:02:29 | 显示全部楼层
有人穿什么吗。网
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 13:04:54 | 显示全部楼层
 
这将让您开始:
 
http://through-the-interface.typepad.com/through_the_interface/2008/02/robotic-hatchin.html
 
获取两个实体之间的交点
您也可以使用此方法:
  1. CurveCurveIntersector3d ci = new CurveCurveIntersector3d((Curve3d)myEntity1 as Curve3d, (Curve3d)myEntity2 as Curve3d, new Vector3d(0, 0, 1));//<- change on current ucs plane normal
  2.            for (int i =0;i< ci.NumberOfIntersectionPoints;i++)
  3.            {
  4. Point3d ipt = ci.GetIntersectionPoint(i);
  5.            ed.WriteMessage("\n{0}", ipt);
  6.            }
回复

使用道具 举报

10

主题

109

帖子

99

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 13:13:13 | 显示全部楼层
Jozi,
这本书主要是从一个中国网站上借来的
这有点棘手
您可以将其用作草图
 
  1. ; sdop2.lsp - Select and Delete objects Outside of closed Polyline.
  2. ;            To trim objects projecting from closed region, first use
  3. ;            TIO, then run SDOP.
  4. ; 10-26-09  Rewritten to be generally compatible with Autocad and clones
  5. (defun findver (entname / verlst lst i)
  6. (setq verlst nil)
  7. (setq i 0)
  8. (setq lst (entget entname))
  9. (repeat (length lst)
  10. (if (= (car (nth i lst)) 10)
  11. (setq verlst (append verlst (list (cdr (nth i lst)))))
  12. )
  13. (setq i (1+ i))
  14. )
  15. verlst
  16. )
  17. (defun c:sdop (/ *ERROR* lwp fulset flen vset wpset wplen n cname)
  18. (defun *ERROR* (msg)
  19. (setvar "CMDECHO" 1)
  20. (setq fulset nil)
  21. (setq wpset nil)
  22. (princ)
  23. )
  24. (setvar "CMDECHO" 0)
  25. (setq lwp (car (entsel "\n Pick polyline")))
  26. (setq vset (findver lwp))
  27. (redraw lwp 3)
  28. (setq fulset (ssget "X"))
  29. (setq flen (sslength fulset))
  30. (command "SELECT" "WP" vset "" "")
  31. (setq wpset (ssget "P"))
  32. (ssadd lwp wpset)
  33. (setq wplen (sslength wpset))
  34. (setq n 0)
  35. (repeat flen
  36. (setq cname (ssname fulset n))
  37. (entdel cname)
  38. (setq n (+ 1 n))
  39. )
  40. (setq n 0)
  41. (repeat wplen
  42. (setq cname (ssname wpset n))
  43. (entdel cname)
  44. (setq n (+ 1 n))
  45. )
  46. (setq fulset nil)
  47. (setq wpset nil)
  48. (setvar "CMDECHO" 1)
  49. (redraw)
  50. (princ)
  51. )

 
~'J'~
回复

使用道具 举报

10

主题

109

帖子

99

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 13:19:12 | 显示全部楼层
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 06:05 , Processed in 0.985270 second(s), 83 queries .

© 2020-2025 乐筑天下

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