本帖最后由 狂刀lxx 于 2011-5-10 23:34 编辑



请留意演示,有多分支选择gong neng
以下是源码,纯无聊抛砖引玉,有要修改完善者勿扰


  1. ;| xj(连接首尾相连线条成封闭多义线) --by 狂刀 2007.9
  2. 说明: 方式:单点一条,自动搜索,多分支提示.
  3. |;
  4. (defun c:xj (/ E ESS FIL OS P1 PA PX0 PX1 ROOP SS SS2 SSS SSS2 X ee)
  5.   (princ "\n 连接首尾相连线条成封闭多义线------by 狂刀 2007.9")
  6.   (command ".undo" "be")
  7.   (setq fil '((0 . "LINE,ARC,*POLYLINE"))
  8. os (getvar "osmode")
  9. pa (getvar "PEDITACCEPT")
  10. ssend(ssadd))
  11.   (setvar "osmode" 0)
  12.   (setvar "PEDITACCEPT" 1)
  13.   ;; 生成首尾相连选集.
  14.   (while (and (princ "\n 选形成多义线的其中一条边线 <退出>:")
  15.        (setq ss (ssget ":S" fil))
  16.   )
  17.     (setq sss (ssadd)
  18.    sss2(ssadd)
  19.    roop nil)
  20.     (setq e (ssname ss 0)
  21.    e0 e
  22.    p0 (vlax-curve-getstartpoint e)
  23.    p1(vlax-curve-getendpoint e))
  24.     (vlax-put (vlax-ename->vla-object e) 'color 1)
  25.     (ssadd e sss)
  26.     (subxj ee p0)
  27.     (subxj ee p1)
  28.     (command ".pedit" "m" sss "" "j" 0.01  "")
  29.     (setq ee (entlast))
  30.     (redraw ee 3)
  31.     ;(vlax-put (vlax-ename->vla-object ee) 'color 3)
  32.     (ssadd ee ssend)
  33.   )
  34.   (mapcar '(lambda(x)(redraw x 4))(xss2lst ssend))
  35.   (setvar "PEDITACCEPT" pa)
  36.   (setvar "osmode" os)
  37.   (command ".undo" "e")
  38.   (princ)
  39. )
  40. ;;
  41. (defun subxj (EE p1 / PX0 PX1 ROOP X esss ess)
  42.   (setq e ee)
  43.   (while (and (setq ss2 (ssget "c" p1 p1 fil))
  44.   (not rooP)
  45.     )
  46.       (setq ess (xss2lst ss2)
  47.      esss(xss2lst sss))
  48.       (mapcar'(lambda(x)(setq ess(vl-remove x ess))) esss)
  49.       (if (not (member e0 ess))
  50. (if (and ess (< 1 (length ess)))
  51.    (progn (mapcar '(lambda (x) (redraw x 3)) ess)
  52.    (setq e (car (entsel "\n 选择分支:")))
  53.    (mapcar '(lambda (x) (redraw x 4)) ess)
  54.    )
  55.    (setq e (car ess))
  56. )
  57.       )
  58.       (if (and e (not (ssmemb e sss)))
  59. (progn
  60.    (ssadd e sss)
  61.    (vlax-put (vlax-ename->vla-object e) 'color 1)
  62.    (setq px0 (vlax-curve-getstartpoint e)
  63.   px1 (vlax-curve-getendpoint e)
  64.    )
  65.    (if (equal p1 px0 1e-4)
  66.      (setq p1 px1)
  67.      (setq p1 px0)
  68.    )
  69. )
  70. (setq roop T)
  71.       )
  72.     )
  73. )
  74. ;; 配套函数, 提取选集实体名列表.
  75. (defun xss2lst (ss / i e lst)
  76.   (setq i -1)
  77.   (while (setq e (ssname ss (setq i (1+ i))))
  78.     (setq lst (cons e lst))
  79.   )
  80.   (reverse lst)
  81. )



网友答:
1006882982 发表于 2012-6-26 03:27
(defun c:pp()
    (setq cm (getvar "cmdecho"))
    (setvar "cmdecho" 0)

感谢分享~
单线或多线转多段线~

网友答: 這個功能效率很高,謝謝樓主分享    謝謝分享


网友答: 這個功能效率很高,謝謝樓主分享    謝謝分享

网友答: 谢谢楼主的分享
收藏了,下来学习领会
谢谢

网友答: 收藏备用,呵呵

网友答: no function definition: VLAX-CURVE-GETSTARTPOINT

网友答: 收藏备用

网友答: 备用!正在收集这方面的资料做水力计算!

网友答: 谢谢分享。程序利用点的方式获取物体进行组建多义线。

网友答: 狂刀的程序,一定要收藏!

网友答: 希望你天天都无聊,呵呵

网友答: 正缺这功能呢
  • 上一篇:批量LSP转FAS
  • 下一篇:没有了