乐筑天下

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

[编程交流] 连接三维多段线

[复制链接]

63

主题

242

帖子

181

银币

后起之秀

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

铜币
319
发表于 2022-7-6 08:26:57 | 显示全部楼层 |阅读模式
大家好
可以通过lisp连接三维多段线
谢谢
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 08:33:38 | 显示全部楼层
不是百分之百确定,但看看这个名为PEDIT3D的lisp例程。
 
href=”http://www.black-cad.de">http://www.black-cad.de
回复

使用道具 举报

15

主题

335

帖子

322

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 08:42:31 | 显示全部楼层
也许是上师李给出的答案!
 
http://lee-mac.com/polylineprograms.html
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 08:48:00 | 显示全部楼层
这是一个非常古老的1:
  1. ;=======================================================================
  2. ;    JPline.Lsp                                 May 30, 2007
  3. ;    Joins Any 2 ECS LINEs, ARCs, Or POLYLINEs That Have A
  4. ;    Common End Point Into New WCS 3DPOLY
  5. ;================== Start Program ======================================
  6. (princ "\nCopyright (C) 2007, Fabricated Designs, Inc.")
  7. (princ "\nLoading JPline v1.5 ")
  8. ;;;1.5 LWPolyLines & zerop Thickness
  9. (setq jp_ nil lsp_file "JPline")
  10. ;==== For Automated Calling From Another Program =======================
  11. (defun jp_auto (ar1 ar2)       ;;;Provide enames Of
  12.      (jp_make ar1 ar2))       ;;;2 Entities To Join
  13. ;================== Macros =============================================
  14. (defun PDot ()(princ "."))
  15. (defun Beep (/ f)
  16. (and (wcmatch (getvar "PLATFORM") "*DOS*")
  17.      (setq f (open "con" "w"))
  18.      (write-char '7 f)
  19.      (close f)))
  20. (defun Err (e)
  21.           (beep)
  22.           (princ (strcat "\nError: ** " e " ** "))
  23.           (quit))
  24. (PDot);++++++++++++ Set Modes & Error ++++++++++++++++++++++++++++++++++
  25. (defun jp_smd ()
  26. (SetUndo)
  27. (setq oldlay (getvar "CLAYER")
  28.       olderr *error*
  29.      *error* (lambda (e)
  30.                (while (> (getvar "CMDACTIVE") 0)
  31.                       (command))
  32.                (and (/= e "quit / exit abort")
  33.                     (princ (strcat "\nError: *** " e " *** ")))
  34.                (command "_.UNDO" "_END" "_.U")
  35.                (jp_rmd))
  36.       jp_var '(
  37. ("CMDECHO"   . 0) ("MENUECHO" . 0)
  38. ("MENUCTL"   . 0) ("MACROTRACE" . 0)
  39. ("OSMODE"    . 0) ("SORTENTS" . 119)
  40. ("REGENMODE" . 1) ("MODEMACRO" . ".")
  41. ("BLIPMODE"  . 0) ("EXPERT"   . 0)
  42. ("SNAPMODE"  . 1) ("PLINEWID"   . 0.0)
  43. ("ORTHOMODE" . 1) ("GRIDMODE" . 0)
  44. ("ELEVATION" . 0) ("THICKNESS"  . 0)
  45. ("UCSICON"   . 0) ("HIGHLIGHT" . 1)
  46. ("COORDS"    . 2) ("DRAGMODE" . 2)
  47. ("CECOLOR"   . "BYLAYER") ("CELTYPE" . "BYLAYER")))
  48. (foreach v jp_var
  49.      (setq m_v (cons (getvar (car v)) m_v)
  50.            m_n (cons (car v) m_n))
  51.      (setvar (car v) (cdr v)))
  52. (if (not (entnext))
  53.      (err "There Are No Entities To Work With!"))
  54. (princ (strcat (getvar "PLATFORM") " Release " (substr (ver) 18 2)
  55.   " -  Join LINES, ARCS, & PLINES ....\n"))
  56. (princ))
  57. (PDot);++++++++++++ Return Modes & Error +++++++++++++++++++++++++++++++
  58. (defun jp_rmd ()
  59. (SetLayer oldlay)
  60. (setq *error* olderr)
  61. (mapcar 'setvar m_n m_v)
  62. (command "_.UNDO" "_END")
  63. (prin1))
  64. (PDot);++++++++++++ Set And Start An Undo Group ++++++++++++++++++++++++
  65. (defun SetUndo ()
  66. (and (zerop (getvar "UNDOCTL"))
  67.      (command "_.UNDO" "_ALL"))
  68. (and (= (logand (getvar "UNDOCTL") 2) 2)
  69.      (command "_.UNDO" "_CONTROL" "_ALL"))
  70. (and (= (logand (getvar "UNDOCTL")  8)
  71.      (command "_.UNDO" "_END"))
  72. (command "_.UNDO" "_GROUP"))
  73. (PDot);++++++++++++ Make Layer Current +++++++++++++++++++++++++++++++++
  74. (defun SetLayer (lay_name / lay_list lay_flag)
  75. (if (not (tblsearch "LAYER" lay_name))
  76.      (command "_.LAYER" "_MAKE" lay_name "")
  77.      (progn
  78.       (setq lay_list (tblsearch "LAYER" lay_name)
  79.             lay_flag (cdr (assoc 70 lay_list)))
  80.       (if (= (logand lay_flag  1)  1)
  81.           (command "_.LAYER" "_THAW" lay_name ""))
  82.       (if (minusp (cdr (assoc 62 lay_list)))
  83.           (command "_.LAYER" "_ON" lay_name ""))
  84.       (if (= (logand lay_flag  4)  4)
  85.           (command "_.LAYER" "_UNLOCK" lay_name ""))
  86.       (and (= (logand lay_flag 16) 16)
  87.            (princ "\nCannot Set To XRef Dependent Layer")
  88.            (quit))
  89.       (command "_.LAYER" "_SET" lay_name ""))))
  90. (PDot);++++++++++++ Convert LINE To 3DPOLY +++++++++++++++++++++++++++++
  91. (defun ledit (ln / ld lay pt1 pt2 lty thk clr hf vf)
  92. (and (= (type ln) 'ENAME)
  93.       (setq ld (entget ln))
  94.       (= (cdr (assoc 0 ld)) "LINE")
  95.       (setq lay (cdr (assoc  8 ld))
  96.             pt1 (cdr (assoc 10 ld))
  97.             pt2 (cdr (assoc 11 ld))
  98.             lty (if (assoc  6 ld) (cdr (assoc  6 ld)) "BYLAYER")
  99.             thk (if (assoc 39 ld) (cdr (assoc 39 ld)) 0.0)
  100.             clr (if (assoc 62 ld) (cdr (assoc 62 ld)) 256)))
  101. (if (and pt1 pt2)
  102.      (progn
  103.        (if (equal (caddr pt1) (caddr pt2) 0.0001)
  104.            (setq hf 0 vf 0)
  105.            (setq hf 8 vf 32 thk 0.0 lty "BYLAYER"))
  106.        (entdel ln)
  107.        (entmake (list (cons 0 "POLYLINE")(cons 8 lay)(cons 66 1)
  108.                       (cons 10 (list 0.0 0.0 0.0))(cons 70 hf)
  109.                       (cons 40 0.0)(cons 41 0.0)(cons 210 (list 0.0 0.0 1.0))
  110.                       (cons 71 0)(cons 72 0)(cons 73 0)(cons 74 0)(cons 75 0)
  111.                       (cons 62 clr)(cons 39 thk)(cons 6 lty)))
  112.        (entmake (list (cons 0 "VERTEX")(cons 8 lay)(cons 10 pt1)
  113.                       (cons 40 0.0)(cons 41 0.0)(cons 42 0.0)
  114.                       (cons 70 vf)(cons 50 0.0)
  115.                       (cons 71 0)(cons 72 0)(cons 73 0)(cons 74 0)
  116.                       (cons 62 clr)(cons 39 thk)(cons 6 lty)))
  117.        (entmake (list (cons 0 "VERTEX")(cons 8 lay)(cons 10 pt2)
  118.                       (cons 40 0.0)(cons 41 0.0)(cons 42 0.0)
  119.                       (cons 70 vf)(cons 50 0.0)
  120.                       (cons 71 0)(cons 72 0)(cons 73 0)(cons 74 0)
  121.                       (cons 62 clr)(cons 39 thk)(cons 6 lty)))
  122.        (entmake (list (cons 0 "SEQEND")(cons 8 lay))))
  123.      (progn
  124.        (princ "\n*LEDIT* Unsuccessful ")
  125.        (exit))))
  126. (PDot);++++++++++++ Get Entity Name ++++++++++++++++++++++++++++++++++++
  127. (defun GetOne (/ st os)
  128. (setq os (getvar "SNAPMODE") s nil)
  129. (setvar "SNAPMODE" 0)
  130. (while (not st)
  131.        (setq st (ssget)))
  132. (while (> (sslength st) 1)
  133.        (setq st nil)
  134.        (princ "\nOnly 1 At A Time Please\n")
  135.        (while (not st)
  136.               (setq st (ssget))))
  137. (setvar "SNAPMODE" os)
  138. (setq s (ssname st 0)))
  139. ;++++++++++++ FINDPATH +++++++++++++++++++++++++++++++++++++++++++
  140. ;;;Returns ECS Point Values Of PLINE
  141. (defun findpath (en / pl ed sp_flg cl_flg bf nl i vp bf vf pl_flg)
  142. (setq ed (entget en))
  143. (and (/= "POLYLINE" (cdr (assoc 0 ed)))
  144.       (princ "\nUnable To Find The Path For This Entity ")
  145.       (exit))
  146. (setq pl_flg (cdr (assoc 70 ed)))
  147. (and (= (logand pl_flg 1) 1)
  148.       (setq cl_flg T))
  149. (and (= (logand pl_flg 4) 4)
  150.       (setq sp_flg T))
  151. (and (or (= (logand pl_flg 16) 16)
  152.           (= (logand pl_flg 64) 64))
  153.       (princ "\nInvalid POLYLINE Mesh ")
  154.       (exit))
  155. (while (/= "SEQEND" (cdr (assoc 0 (entget (entnext en)))))
  156.         (setq en (entnext en)
  157.               ed (entget en)
  158.               vp (cdr (assoc 10 ed))
  159.               bf (cdr (assoc 42 ed))
  160.               vf (cdr (assoc 70 ed)))
  161.         (cond ((= "SEQEND" (cdr (assoc 0 (entget (entnext en)))))
  162.                (setq pl (cons vp pl)))
  163.               ((and (/= bf 0.0)
  164.                     (/= "SEQEND" (cdr (assoc 0 (entget (entnext en))))))
  165.                (add_arc vp (cdr (assoc 10 (entget (entnext en)))) bf))
  166.               ((and (/= bf 0.0)
  167.                     cl_flg
  168.                     (= "SEQEND" (cdr (assoc 0 (entget (entnext en))))))
  169.                (add_arc vp (last pl) bf))
  170.               ((and (= bf 1.0)
  171.                     (not cl_flg)
  172.                     (= "SEQEND" (cdr (assoc 0 (entget (entnext en))))))
  173.                (princ))
  174.               ((and sp_flg
  175.                     (= bf 0.0)
  176.                     (= (logand vf  8))
  177.                (setq pl (cons vp pl)))
  178.               ((and (not sp_flg)
  179.                     (= bf 0.0)
  180.                     (/= (logand vf  8))
  181.                (setq pl (cons vp pl)))))
  182. (if (and cl_flg
  183.           (not (equal (car pl) (last pl))))
  184.      (setq pl (cons (last pl) pl)))
  185. (setq i 0)
  186. (while (< i (length pl))
  187.         (while (equal (nth i pl) (nth (1+ i) pl) 0.0001)
  188.                (setq i (1+ i)))
  189.         (and (nth i pl)
  190.              (setq nl (cons (nth i pl) nl)))
  191.         (setq i (1+ i)))
  192.   nl)
  193. (defun add_arc (sp ep bulge / alist x1 x2 y1 y2 cotbce
  194.                ce ra sa ea ia inc qty na temp rseg)
  195. (setq x1 (car sp);;Modified Bulge
  196.        x2 (car ep);;Conversion By
  197.        y1 (cadr sp);;Duff Kurland
  198.        y2 (cadr ep);;Autodesk, Inc.
  199.    cotbce (/ (- (/ 1.0 bulge) bulge) 2.0)
  200.        ce (list (/ (+ x1 x2 (- (* (- y2 y1) cotbce))) 2.0)
  201.                 (/ (+ y1 y2    (* (- x2 x1) cotbce) ) 2.0)
  202.                 (caddr sp))
  203.        ra (distance ce sp)
  204.        sa (atan (- y1 (cadr ce)) (- x1 (car ce)))
  205.        ea (atan (- y2 (cadr ce)) (- x2 (car ce))))
  206. (if (minusp sa)
  207.      (setq sa (+ sa (* 2.0 pi))))
  208. (if (minusp ea)
  209.      (setq ea (+ ea (* 2.0 pi))))
  210. (if (minusp bulge)
  211.      (setq temp sa sa ea ea temp))
  212. (if (> sa ea)
  213.      (setq ia (+ (- (* pi 2.0) sa) ea))
  214.      (setq ia (- ea sa)))
  215. (if (not rseg)
  216.      (progn
  217.        (initget 6)
  218.        (setq rseg (getint "\nNumber Of Segments To A 180 Degree Arc <16>:   "))
  219.        (and (not rseg)
  220.             (setq rseg 16))))
  221. (setq qty (abs (fix (/ ia (/ pi rseg)))))
  222. (if (< qty 2)
  223.      (setq qty 2))
  224. (setq na sa
  225.       inc (/ (abs ia) qty))
  226. (repeat (1+ qty)
  227.      (setq alist (cons (polar ce na ra) alist)
  228.               na (+ sa inc)
  229.               sa na))
  230. (if (not (equal sp (car alist) 0.0001))
  231.      (setq alist (reverse alist)))
  232. (foreach a alist
  233.      (setq pl (cons a pl))))
  234. (PDot);++++++++++++ Make 3DPOLY From 2 PLINES   ++++++++++++++++++++++++
  235. (defun jp_make (p1 p2)
  236. (command "_.UCS" "_World")
  237. (if (= (cdr (assoc 0 (entget p1))) "LINE")
  238.      (progn
  239.        (ledit p1)
  240.        (setq p1 (entlast))))
  241. (if (= (cdr (assoc 0 (entget p1))) "ARC")
  242.      (progn
  243.        (if (not (equal (cdr (assoc 210 (entget p1))) 0.00001))
  244.            (command "_.UCS" "_E" p1))
  245.        (command "_.PEDIT" p1 "_Yes" "_Exit")
  246.        (setq p1 (entlast))))
  247. (command "_.UCS" "_World")
  248. (if (= (cdr (assoc 0 (entget p2))) "LINE")
  249.      (progn
  250.        (ledit p2)
  251.        (setq p2 (entlast))))
  252. (if (= (cdr (assoc 0 (entget p2))) "ARC")
  253.      (progn
  254.        (if (not (equal (cdr (assoc 210 (entget p2))) 0.00001))
  255.            (command "_.UCS" "_E" p2))
  256.        (command "_.PEDIT" p2 "_Yes" "_Exit")
  257.        (setq p2 (entlast))))
  258. (command "_.UCS" "_World")
  259. (setq l1 (findpath p1))
  260. (setq l2 (findpath p2))
  261. (foreach v l1 (setq w1 (cons (trans v p1 0) w1)))
  262. (foreach v l2 (setq w2 (cons (trans v p2 0) w2)))
  263. (cond ((equal (last w1) (car w2) 0.0001)    (princ))
  264.        ((equal (last w2) (car w1) 0.0001)    (setq w1 (reverse w1)
  265.                                                    w2 (reverse w2)))
  266.        ((equal (last w1) (last w2) 0.0001)   (setq w2 (reverse w2)))
  267.        ((equal (car w1) (car w2) 0.0001)     (setq w1 (reverse w1)))
  268.        (t  (err "Entities Do Not Have Common End Points")))
  269. (setq w2 (cdr w2))
  270. (command "_.3DPOLY")
  271. (foreach p w1
  272.       (command p))
  273. (foreach p w2
  274.       (command p))
  275. (command "")
  276. (entdel p1)
  277. (entdel p2)
  278. (redraw (entlast)))
  279. (PDot);++++++++++++ Compare 2 PLINEs +++++++++++++++++++++++++++++++++++
  280. (defun jp_comp (/ df1 df2 et1 et2 lt1 lt2 la1 la2 tk1 tk2 cl1 cl2
  281.               wd1 wd2 wd3 wd4 lter tker laer cler wder)
  282. (if (equal e1 e2)
  283.      (err "Cannot Join Same Entity"))
  284. (setq df1 (entget e1)
  285.        df2 (entget e2)
  286.        et1 (cdr (assoc 0 df1))
  287.        et2 (cdr (assoc 0 df2))
  288.        lt1 (cdr (assoc 6 df1))
  289.        lt2 (cdr (assoc 6 df2))
  290.        la1 (cdr (assoc 8 df1))
  291.        la2 (cdr (assoc 8 df2))
  292.        tk1 (cdr (assoc 39 df1))
  293.        tk2 (cdr (assoc 39 df2))
  294.        wd1 (cdr (assoc 40 df1))
  295.        wd2 (cdr (assoc 40 df2))
  296.        wd3 (cdr (assoc 41 df1))
  297.        wd4 (cdr (assoc 41 df2))
  298.        cl1 (cdr (assoc 62 df1))
  299.        cl2 (cdr (assoc 62 df2)))
  300.   (and (or lt1 lt2)
  301.        (setq lter t))
  302.   (and (/= la1 la2)
  303.        (setq laer t))
  304.   (and (or tk1 tk2)
  305.        (not (zerop tk1))
  306.        (not (zerop tk2))
  307.        (setq tker t))
  308.   (and (/= cl1 cl2)
  309.        (setq cler t))
  310.   (if (and (= et1 "POLYLINE")
  311.            (= et2 "POLYLINE")
  312.            (or (/= wd1 0.0)
  313.                (/= wd2 0.0)
  314.                (/= wd3 0.0)
  315.                (/= wd4 0.0)))
  316.       (setq wder t))
  317.   (if (or lter tker wder)
  318.       (progn
  319.         (beep)
  320.         (princ "\nEntities Contain ")
  321.         (if wder (princ "WIDTHS"))
  322.         (and wder (and lter tker)
  323.              (princ ", "))
  324.         (and wder lter (not tker)
  325.              (princ " & "))
  326.         (and wder tker (not lter)
  327.              (princ " & "))
  328.         (if lter (princ "LINETYPES"))
  329.         (and lter tker
  330.              (princ " & "))
  331.         (if tker (princ "THICKNESS"))
  332.         (princ " That Can Not Be Duplicated")
  333.         (initget "Yes No")
  334.         (if (= "No" (getkword "\nContinue:  <Y>:   "))
  335.             (exit))))
  336.    (if laer
  337.        (progn
  338.           (beep)
  339.           (princ "\nEntities Reside On Different Layers")
  340.           (princ "\nNew 3DPOLY Will Be Constructed On LAyer ")
  341.           (prin1 (getvar "CLAYER"))
  342.           (getstring " Press Any Key To Continue:  ")))
  343.    (if (and (not laer)
  344.             (/= (getvar "CLAYER") la1))
  345.        (SetLayer la1))
  346.    (if cler
  347.        (progn
  348.           (beep)
  349.           (princ "\nEntities Have Different Colors")
  350.           (princ "\nNew 3DPOLY Will Be Constructed With Color "BYLAYER"")
  351.           (getstring " Press Any Key To Continue:  ")))
  352.    (if (and cl1
  353.            (not cler)
  354.            (not (zerop cl1)))
  355.        (setvar "CECOLOR" (itoa cl1))))
  356. (PDot);************ Main Program ***************************************
  357. (defun jp_ (/ m_v m_n olderr oldlay jp_var e1 e2 l1 l2 w1 w2 s)
  358. (jp_smd)
  359. (princ "\nSelect 1st LINE, ARC, or PLINE:  ")
  360. (setq e1 (GetOne))
  361. (if (= "LWPOLYLINE" (cdr (assoc 0 (entget e1))))
  362.      (command "_.CONVERTPOLY" "Heavy" e1 ""))
  363. (princ "\nSelect 2nd LINE, ARC, or PLINE:  ")
  364. (setq e2 (GetOne))
  365. (if (= "LWPOLYLINE" (cdr (assoc 0 (entget e2))))
  366.        (command "_.CONVERTPOLY" "Heavy" e2 ""))
  367. (jp_comp)
  368. (jp_make e1 e2)
  369. (jp_rmd))
  370. (PDot);************ Load Program ***************************************
  371. (defun C:JPline () (jp_))
  372. (if jp_ (princ "\nJPline Loaded\n"))
  373. (prin1)
  374. ;================== End Program ========================================
  375. ;Tested With R12_c3 DOS & R13_c4a DOS
  376. ;Copyright (C) 2007, Fabricated Designs, Inc.
  377. ;"AS IS" Public Domain Software Donated By

 
-大卫
回复

使用道具 举报

16

主题

119

帖子

109

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
82
发表于 2022-7-6 08:54:42 | 显示全部楼层
 
我已经多次使用这个lisp例程。
对我来说效果很好。
回复

使用道具 举报

63

主题

242

帖子

181

银币

后起之秀

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

铜币
319
发表于 2022-7-6 09:02:32 | 显示全部楼层
链接不工作
回复

使用道具 举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-6 09:05:09 | 显示全部楼层
 
我点击了这个帖子中的所有链接,它们工作正常。
 
你在尝试哪个链接?
回复

使用道具 举报

5

主题

1074

帖子

1088

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-6 09:12:16 | 显示全部楼层
 
很难反驳这种逻辑,因为它通常是这样的!
回复

使用道具 举报

16

主题

119

帖子

109

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
82
发表于 2022-7-6 09:15:59 | 显示全部楼层
 
似乎到Pedit3D lisp的链接不起作用。
 
我确实有一份lisp的副本,其中有一条声明:“未经作者同意,禁止以任何形式复制、修改和分发本软件或其任何部分,除非本文明确规定。”
在网站链接页面上有一条声明“这是免费下载的版本”
 
也许版主可以声明我是否可以上传到这里。
 
或者MOTE-z,也许你可以给作者发电子邮件,电子邮件地址在链接页面上。
回复

使用道具 举报

scj

0

主题

29

帖子

31

银币

限制会员

铜币
-2
发表于 2022-7-6 09:24:47 | 显示全部楼层
很抱歉输入了错别字
http://www.black-cad.de
希望我得到它。。。
它现在也适用于螺旋曲线。
祝你好运
约琴
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 08:51 , Processed in 1.549293 second(s), 72 queries .

© 2020-2025 乐筑天下

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