乐筑天下

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

[编程交流] 选择线条,然后进行合成

[复制链接]

3

主题

8

帖子

5

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 14:10:04 | 显示全部楼层 |阅读模式
嗨,李·麦克
你能帮我了解ObjectBreakV1-0吗。lsp
你的程序很容易使用。
现在,我想要一个程序。你能帮助我吗?
按顺序选择直线(圆弧、直线、闭合多边形、开放多边形),并根据其交点合成闭合边界线。
有时,“.-BOUNDARY”“A”“B”…)命令不太容易使用。
 
这是一个未完成的程序代码。
  1. (defun c:tt( / )
  2.         (defun tan ( x )
  3.                 (if (not (equal 0.0 (cos x) 1e-8))
  4.                         (/ (sin x) (cos x))
  5.                 )
  6.         )
  7.         (defun Get-bulge-by3p ( pt1 pt2 pt3 )
  8.                 ((lambda ( a ) (/ (sin a) (cos a))) (/ (+ (- pi (angle pt2 pt1)) (angle pt2 pt3)) 2))
  9.         )
  10.         (defun Add-polyarc-by3p ( pt1 pt2 pt3 / ocs )
  11.                 (entmakex (list '(000 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline")'(090 . 2) '(070 . 0) (cons 010 pt1) (cons 042 (Get-bulge-by3p pt1 pt2 pt3))(cons 010 pt3)))
  12.         )
  13.         (defun LWVertices ( e )
  14.                 (if (setq e (member (assoc 10 e) e))
  15.                         (cons
  16.                                 (list
  17.                                         (assoc 10 e);vertex
  18.                                         (assoc 42 e);bulge
  19.                                 )
  20.                                 (LWVertices (cdr e))
  21.                         )
  22.                 )
  23.         )
  24.         ;-----------------Main Start----------------------
  25.         (setq LinesTOJoin NIL)
  26.         (while(and
  27.                         (setq sel (entsel "\nSelect object at section to be use:"))
  28.                         (setq ent (car sel));Select object
  29.                         (setq bpt (cadr sel));Select point(Select sections that want to keep)
  30.                         (setq pt1 (getpoint "Pick 1st break point:"))
  31.                         (setq pt2 (getpoint "Pick 2nd break point:"))
  32.                         (setq bpt (vlax-curve-getclosestpointto ent bpt))
  33.                 )
  34.                 (setq enx (vl-remove-if '(lambda ( x ) (member (car x) '(-1 5 6 8 39 48 62 102 330 370)))(entget ent));dxf
  35.                         pt1 (vlax-curve-getclosestpointto ent pt1);break start point to curve
  36.                         pt2 (vlax-curve-getclosestpointto ent pt2);break end point to curve
  37.                         pa1 (vlax-curve-getparamatpoint ent pt1)
  38.                         pa2 (vlax-curve-getparamatpoint ent pt2)
  39.                         pab (vlax-curve-getparamatpoint ent bpt)
  40.                 )
  41.                 (if (< pa2 pa1) (mapcar 'set '(pt1 pt2 pa1 pa2) (list pt2 pt1 pa2 pa1)))
  42.                 (setq typ (cdr (assoc 0 enx)))
  43.                 (cond
  44.                         ((= "ARC" typ)
  45.                                 (setq LinesTOJoin (cons (Add-polyarc-by3p pt1 bpt pt2)LinesTOJoin))
  46.                         )
  47.                         ((= "CIRCLE" typ)
  48.                                 (setq LinesTOJoin (cons (Add-polyarc-by3p  pt1 bpt pt2)LinesTOJoin))
  49.                         )
  50.                         ((= "LINE" typ)
  51.                                 (setq LinesTOJoin (cons (entmakex (list '(0 . "LINE") (cons 10 pt1) (cons 10 pt2)))LinesTOJoin))
  52.                         )
  53.                         ((= "LWPOLYLINE" typ)
  54.                                 (setq vtx (LWVertices enx))
  55.                                 (repeat (fix pa1) (setq vtx (cdr vtx)));delete the head
  56.                                 (if (not(equal pa1 (fix pa1) 1e-8))
  57.                                         (setq bul (atan (cdr (assoc 42 (car vtx)))))
  58.                                 )
  59.                                 ;(princ "need help..............")
  60.                         )
  61.                 )
  62.         )
  63.         (princ)
  64. )
回复

使用道具 举报

3

主题

8

帖子

5

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 15:38:09 | 显示全部楼层
帮助我:
       1.基于交点的自动判断
       2.如何在没有“命令”的情况下连接LWD多段线
  1. (defun c:tt( / )
  2.         (vl-load-com)
  3.         (defun tan ( x )
  4.                 (if (not (equal 0.0 (cos x) 1e-8))
  5.                         (/ (sin x) (cos x))
  6.                 )
  7.         )
  8.         (defun Get-bulge-by3p ( pt1 pt2 pt3 )
  9.                 ((lambda ( a ) (/ (sin a) (cos a))) (/ (+ (- pi (angle pt2 pt1)) (angle pt2 pt3)) 2))
  10.         )
  11.         (defun LWVertices ( e )
  12.                 (if (setq e (member (assoc 10 e) e))
  13.                         (cons
  14.                                 (list
  15.                                         (assoc 10 e);vertex
  16.                                         (assoc 42 e);bulge
  17.                                 )
  18.                                 (LWVertices (cdr e))
  19.                         )
  20.                 )
  21.         )
  22.         ;-----------------Main Start----------------------
  23.         (if(not(tblsearch "layer" "GuideLine"))
  24.                 (entmake(list(cons 0 "LAYER") (cons 100 "AcDbSymbolTableRecord") (cons 100 "AcDbLayerTableRecord")(cons 2 "GuideLine") (cons 62 8) (cons 70 0) (cons 6 "Continuous")))
  25.         )
  26.         (setq LinesTOJoin nil BVertices nil)
  27.         (while(and
  28.                         (setq sel (entsel "\nSelect object at section to be use:"))
  29.                         (setq ent (car sel));Select object
  30.                         (setq bpt (cadr sel));Select point(Select sections that want to keep)
  31.                         (setq pt1 (getpoint "Pick 1st break point:"))
  32.                         (setq pt2 (getpoint "Pick 2nd break point:"))
  33.                         (setq bpt (vlax-curve-getclosestpointto ent bpt))
  34.                 )
  35.                 (setq enx (vl-remove-if '(lambda ( x ) (member (car x) '(-1 5 6 8 39 48 62 102 330 370)))(entget ent));dxf
  36.                         pt1 (vlax-curve-getclosestpointto ent pt1);break start point to curve
  37.                         pt2 (vlax-curve-getclosestpointto ent pt2);break end point to curve
  38.                         pa1 (vlax-curve-getparamatpoint ent pt1)
  39.                         pa2 (vlax-curve-getparamatpoint ent pt2)
  40.                         pab (vlax-curve-getparamatpoint ent bpt)
  41.                 )
  42.                 (if (< pa2 pa1) (mapcar 'set '(pt1 pt2 pa1 pa2) (list pt2 pt1 pa2 pa1)))
  43.                 (setq typ (cdr (assoc 0 enx)))
  44.                 (cond
  45.                         ((= "ARC" typ)
  46.                                 (setq tement(entmakex (list '(000 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 8 "GuideLine")
  47.                                         '(090 . 2) '(070 . 0) (cons 010 pt1) (cons 042 (Get-bulge-by3p pt1 bpt pt2))(cons 010 pt2))))
  48.                                 setq BVertices
  49.                         )
  50.                         ((= "CIRCLE" typ)
  51.                                 (setq tement(entmakex (list '(000 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 8 "GuideLine")
  52.                                         '(090 . 2) '(070 . 0) (cons 010 pt1) (cons 042 (Get-bulge-by3p pt1 bpt pt2))(cons 010 pt2))))
  53.                         )
  54.                         ((= "LINE" typ)
  55.                                 (setq tement (entmakex (list '(000 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline")(cons 8 "GuideLine")
  56.                                         '(090 . 2) '(070 . 0) (cons 010 pt1)(cons 010 pt2))))
  57.                         )
  58.                         ((= "LWPOLYLINE" typ)
  59.                                 (setq vtx (LWVertices enx))
  60.                                 (setq vl1 nil);the head
  61.                                 (setq vl2 nil);the tail
  62.                                 (repeat (fix pa1)
  63.                                         (setq vl1 (cons (car vtx) vl1)
  64.                                                 vtx (cdr vtx)
  65.                                         )
  66.                                 )
  67.                                 (if (not (equal pa1 (fix pa1) 1e-8))
  68.                                         (setq vx1 (car vtx)
  69.                                                 bul (atan (cdr (assoc 42 vx1)))
  70.                                                 vl1 (vl-list*
  71.                                                                 (list (cons 10 pt1) '(42 . 0.0))
  72.                                                                 (list (assoc 10 vx1) (cons  42 (tan (* (- pa1 (fix pa1)) bul))))
  73.                                                                 vl1
  74.                                                         )
  75.                                                 vtx (cons
  76.                                                                 (list (cons  10 pt1) (cons  42 (tan (* (- (min pa2 (1+ (fix pa1))) pa1) bul))))
  77.                                                                 (cdr vtx)
  78.                                                         )
  79.                                         )
  80.                                 )
  81.                                 (setq vl1 (cons (car vtx) vl1))
  82.                                 (setq vtx (reverse vtx))
  83.                                 (repeat (+ (length vtx) (fix pa1) (- (fix pa2)) -1)
  84.                                         (setq vl2 (cons (car vtx) vl2)
  85.                                                 vtx (cdr vtx)
  86.                                         )
  87.                                 )
  88.                                 (if (not (equal pa2 (fix pa2) 1e-8))
  89.                                         (setq vx1 (car vtx)
  90.                                                 bul (atan (cdr (assoc 42 vx1)))
  91.                                                 vl2 (cons
  92.                                                                 (list(cons  10 pt2) (cons  42 (tan (* (/ (- (1+ (fix pa2)) pa2) (if (< (fix pa2) pa1) (- pa2 pa1) 1.0)) bul))))
  93.                                                                 vl2
  94.                                                         )
  95.                                                 vtx (vl-list*
  96.                                                         (list (cons 10 pt2) '(42 . 0.0))
  97.                                                         (list (assoc 10 vx1) (cons  42 (tan (* (if (< (fix pa2) pa1) 1.0 (- pa2 (fix pa2))) bul))))
  98.                                                         (cdr vtx)
  99.                                                 )
  100.                                         )
  101.                                         (setq vl2 (cons (car vtx) vl2))
  102.                                 )
  103.                                 (if (<= pa1 pab pa2)
  104.                                         (setq vtx(reverse vtx))
  105.                                         (if (vlax-curve-isclosed ent)
  106.                                                 (setq vtx(append vl2 (reverse vl1)))
  107.                                                 (setq vtx(reverse vtx))
  108.                                         )
  109.                                 )
  110.                                 (setq tement(entmakex (append
  111.                                                                         (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline")(cons 8 "GuideLine")(cons 90 (length vtx)))
  112.                                                                         (apply 'append vtx)
  113.                                                                 )
  114.                                                 )
  115.                                         )
  116.                         )
  117.                 )
  118.                 (vla-put-color (vlax-ename->vla-object tement) 1)
  119.                 (vla-highlight (vlax-ename->vla-object tement) :VLAX-TRUE)
  120.                 (setq LinesTOJoin (cons tement LinesTOJoin))
  121.         )
  122.         (if (> (length LinesTOJoin) 0)
  123.                 (progn
  124.                         (setq ss(ssadd))
  125.                         (foreach n LinesTOJoin
  126.                                 (setq ss(ssadd n ss))
  127.                         )
  128.                         (COMMAND "PEDIT" "M" SS "" "J" "J" "E" "0.1" "")
  129.                 )
  130.         )
  131.         (princ)
  132. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 23:24 , Processed in 2.043214 second(s), 57 queries .

© 2020-2025 乐筑天下

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