明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 429014673

[基础] [求助]打断的线段如何复原且为多线段

  [复制链接]
 楼主| 发表于 2010-7-23 18:00:00 | 显示全部楼层

;;;多段线除重点,来自晓东CAD

具体命令是什么呀?

 楼主| 发表于 2010-7-23 18:03:00 | 显示全部楼层
candy-jhl发表于2010-7-23 15:13:00用pedit命令,然后把线join是不是可以

是可以,打散还是出很多线的,不是三条线。

发表于 2010-7-23 21:13:00 | 显示全部楼层
用pedit里面有个编辑节点,可以把多余的节点转移到定点,但是那样比较麻烦,还不如重新画
发表于 2010-7-24 00:04:00 | 显示全部楼层

不就是串联线吗?

楼上的那位已经回答了,用pedit命令,然后选join

我们放样套料是常用!

发表于 2010-7-24 11:18:00 | 显示全部楼层
  1. (defun c:Test (/ ACAD_ERR ERR_INFO oldcmdecho)
  2. (vl-load-com)
  3. ;_返回多段线坐标表
  4. (defun Get_PL_plist (ename / ELEV EN ENTL FLAG PT VLIST)
  5.   (defun LI_item (n alist)
  6.     (cdr (assoc n alist))
  7.   )
  8.   (setq
  9.     vlist '()
  10.     entl  (entget ename)
  11.     en   (LI_item 0 entl)
  12.   )
  13.   (cond
  14.     ((= en "LWPOLYLINE")
  15.      (setq
  16.        vlist '()
  17.        Elev  (LI_item 38 entl)
  18.      )
  19.      (foreach pt entl
  20.        (if (= (car pt) 10)
  21.   (setq vlist (cons (list (cadr pt) (caddr pt) Elev) vlist))
  22.        )
  23.      )
  24.      (setq vlist (reverse vlist))
  25.     )
  26.     ((= en "POLYLINE")
  27.      (setq
  28.        ename (entnext ename)
  29.        entl  (entget ename)
  30.        en    (LI_item 0 entl)
  31.        vlist '()
  32.      )
  33.      (while (= en "VERTEX")
  34.        (setq flag (LI_item 70 entl))
  35.        (if (and
  36.       (zerop (logand flag 1))
  37.       (zerop (logand flag 2))
  38.       (zerop (logand flag 8))
  39.       (/= flag 128)
  40.     )
  41.   (setq
  42.     pt  (LI_item 10 entl)
  43.     vlist (cons pt vlist)
  44.   )
  45.        )
  46.        (setq
  47.   ename (entnext ename)
  48.   entl  (entget ename)
  49.   en    (LI_item 0 entl)
  50.        )
  51.      )
  52.      (setq vlist (reverse vlist))
  53.     )
  54.   )
  55.   vlist
  56. )
  57. ;_主程序
  58. (defun acad->app
  59.        (/ obj obj_i pl_new ANG1 ANG2 I ISCLOSE OBJ_ENAME OBJ_VLA PL X del_obj)
  60.   (setq oldcmdecho (getvar "cmdecho"))
  61.   (setvar "cmdecho" 0)
  62.   (while (not (setq obj (ssget '((0 . "*POLYLINE"))))))
  63.   (setq obj_i -1)
  64.   (initget "Y N")
  65.   (setq del_obj (getkword "是否删除原对象?[是(Y)/否(N)]]<否>:"))
  66.   (repeat (sslength obj)
  67.     (setq obj_ename (ssname obj (setq obj_i (1+ obj_i))))
  68.     (setq obj_vla (vlax-ename->vla-object obj_ename))
  69.     (setq pl (Get_PL_plist obj_ename)) ;_三维坐标表
  70.     (setq pl (mapcar '(lambda (x) (list (car x) (cadr x))) pl)) ;_二维坐标表
  71.     (setq isclose (vlax-curve-isClosed obj_vla)) ;_是否闭合
  72.     (if isclose
  73.       (setq pl (reverse (cons (cadr pl) (cons (car pl) (reverse pl)))))
  74.     )
  75.     (setq pl_new '())
  76.     (setq i 0)
  77.     (foreach x pl
  78.       (setq i (1+ i))
  79.       (if (not isclose)
  80. (progn
  81.    (if (or (= i 1) (= i (length pl)))
  82.      (progn
  83.        (setq pl_new (cons x pl_new))
  84.        (if (= i 1)
  85.   (setq ang1 (angle x (nth i pl)))
  86.        )
  87.      )
  88.      (progn
  89.        (setq ang2 (angle x (nth i pl)))
  90.        (if ang2
  91.   (progn
  92.     (if (not (equal ang1 ang2 0.0000001))
  93.       (setq pl_new (cons x pl_new))
  94.     )
  95.     (setq ang1 ang2)
  96.   )
  97.        )
  98.      )
  99.    )
  100. )
  101. (progn
  102.    (if (/= i (length pl))
  103.      (progn
  104.        (setq ang2 nil)
  105.        (if (= i 1)
  106.   (setq ang1 (angle x (nth i pl)))
  107.   (setq ang2 (angle x (nth i pl)))
  108.        )
  109.        (if ang2
  110.   (progn
  111.     (if (not (equal ang1 ang2 0.0000001))
  112.       (setq pl_new (cons x pl_new))
  113.     )
  114.     (setq ang1 ang2)
  115.   )
  116.        )
  117.      )
  118.    )
  119. )
  120.       )
  121.     )
  122.     (command "pline")
  123.     (mapcar '(lambda (x)
  124.         (command x)
  125.       )
  126.      pl_new
  127.     )
  128.     (if isclose
  129.       (command "Close")
  130.       (command "")
  131.     )
  132.     (if (= del_obj "Y")
  133.       (entdel obj_ename)
  134.       )
  135.   );_end repeat
  136.   (setvar "cmdecho" oldcmdecho)
  137. );_end defun acad->app
  138.   
  139. ;_以下为错误信息显示
  140. (setq acad_err (vl-catch-all-apply
  141.    '(lambda ()
  142.       (acad->app)
  143.     )
  144.         )
  145. )
  146. (if (vl-catch-all-error-p acad_err) ;_如果返回的是错误对象
  147.   (progn
  148.     (setq err_info (vl-catch-all-error-message acad_err)) ;_截获错误信息
  149.     (setq err_info (strcat "\n错误提示:" err_info))
  150.     (setvar "cmdecho" oldcmdecho)
  151.     (vl-exit-with-error (princ err_info))
  152.   )
  153. )
  154. (princ)
  155. )
 楼主| 发表于 2010-7-25 14:13:00 | 显示全部楼层
gufeng发表于2010-7-24 11:18:00以下内容为程序代码: (defun c:Test (/ ACAD_ERR ERR_INFO oldcmdecho) (vl-load-com) ;_返回多段线坐标表 (defun Get_PL_plist (ename / ELEV EN ENTL FLAG PT VLIST)  
原来的线还在,最好可以删除。

 楼主| 发表于 2010-7-25 14:14:00 | 显示全部楼层
原来的线还在,最好可以删除。
发表于 2010-7-26 16:54:00 | 显示全部楼层

是否删除原对象?[是(Y)/否(N)]]<否>:"   

   提示是输入Y不就可以删除了?

发表于 2011-12-23 14:48:02 | 显示全部楼层
9楼的源程序好像少了一个子程序 POLYDUMPPOINT 9楼的楼主能否补上,多谢了
发表于 2012-3-16 15:21:53 | 显示全部楼层
确实少了,麻烦补上来,多谢!
123下一页
返回列表 发新帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-7-22 12:55 , Processed in 0.161611 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表