明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1966|回复: 6

如何将选择的线段结合成pl线呢(已经解决)并执行vba的程序?(新手跪求)

[复制链接]
发表于 2011-10-17 18:35:01 | 显示全部楼层 |阅读模式
本帖最后由 qcw911 于 2011-10-20 19:42 编辑
复制代码
  1. (defun c:tt (/         gxl-Sel-ReDrawSel
  2.        gxl-Sel-SSsub     gxl-Sel-SSJoin
  3.        gxl-sel-SSgetLineatPoint
  4.        getline
  5.       )
  6.   (defun gxl-Sel-ReDrawSel (Sel mode / m n)
  7.     (setq m (sslength Sel)
  8.     n 0
  9.     )
  10.     (repeat m
  11.       (redraw (ssname Sel n) mode)
  12.       (setq n (1+ n))
  13.     )          ;repeat
  14.   )
  15.   (defun gxl-Sel-SSsub (ss1 ss2 / ss n)
  16.     (cond
  17.       ((and ss1 ss2)
  18.        (setq n 0)
  19.        (repeat (sslength ss2)
  20.    (ssdel (ssname ss2 n) ss1)
  21.    (setq n (1+ n))
  22.        )
  23.       )
  24.       ((and ss1 (not ss2))
  25.        ss1
  26.       )
  27.       (T
  28.        (setq ss1 nil)
  29.       )
  30.     )
  31.     ss1
  32.   )
  33.   (defun gxl-Sel-SSJoin  (ss1 ss2 / ename ss cnt)
  34.     (if  ss1
  35.       (progn
  36.   (if (= (type ss1) 'ENAME)
  37.     (progn
  38.       (setq
  39.         ename ss1
  40.         ss1   (ssadd)
  41.       )
  42.       (ssadd ename ss1)
  43.     )
  44.   )
  45.       )
  46.     )
  47.     (if  ss2
  48.       (progn
  49.   (if (= (type ss2) 'ENAME)
  50.     (progn
  51.       (setq
  52.         ename ss2
  53.         ss2   (ssadd)
  54.       )
  55.       (ssadd ename ss2)
  56.     )
  57.   )
  58.       )
  59.     )
  60.     (setq ss (ssadd))
  61.     (if  (and ss1 ss2)
  62.       (progn
  63.   ;(setq ss ss2 cnt 0)
  64.   (setq cnt 0)
  65.   (repeat  (sslength ss2)
  66.     (ssadd (ssname ss2 cnt) ss)
  67.     (setq cnt (1+ cnt))
  68.   )
  69.   (setq cnt 0)
  70.   (repeat  (sslength ss1)
  71.     (ssadd (ssname ss1 cnt) ss)
  72.     (setq cnt (1+ cnt))
  73.   )
  74.       )
  75.     )
  76.     (if  (and ss1 (not ss2))
  77.       (setq ss ss1)
  78.     )
  79.     (if  (and ss2 (not ss1))
  80.       (setq ss ss2)
  81.     )
  82.     (if  (> (sslength ss) 0)
  83.       ;;(eval ss)
  84.       ss
  85.       nil
  86.     )
  87.   )
  88.   (defun gxl-sel-SSgetLineatPoint (pt jd / px py px0 px1 py0 py1 ss pz)
  89.     (setq px  (car pt)
  90.     px0 (- px jd)
  91.     px1 (+ px jd)
  92.     py  (cadr pt)
  93.     py0 (- py jd)
  94.     py1 (+ py jd)
  95.     pz  (caddr pt)
  96.     )
  97.     (setq ss
  98.      (ssget "x"
  99.       (list  '(0 . "line")
  100.       '(-4 . "<or")

  101.       '(-4 . "<and")
  102.       '(-4 . ">=,>=,=")
  103.       (list 10 px0 py0 pz)
  104.       '(-4 . "<=,<=,=")
  105.       (list 10 px1 py1 pz)
  106.       '(-4 . "and>")

  107.       '(-4 . "<and")
  108.       '(-4 . ">=,>=,=")
  109.       (list 11 px0 py0 pz)
  110.       '(-4 . "<=,<=,=")
  111.       (list 11 px1 py1 pz)
  112.       '(-4 . "and>")

  113.       '(-4 . "or>")
  114.       )
  115.      )
  116.     )
  117.     (if  ss
  118.       (GXL-SEL-REDRAWSEL ss 3)

  119.     )
  120.     ss
  121.   )
  122.   (defun getline (pt jd / s s1 n p1 p2)

  123.     (setq s (gxl-sel-SSgetLineatPoint pt jd))
  124.     (if  s
  125.       (progn
  126.   (setq s1    (GXL-SEL-SSSUB s ssrtl)
  127.         ssrtl (GXL-SEL-SSJOIN ssrtl s1)
  128.   )

  129.   (if s1
  130.     (progn
  131.       (setq n 0)
  132.       (repeat (sslength s1)
  133.         (setq p1 (cdr (assoc 10 (entget (ssname s1 n))))
  134.         p2 (cdr (assoc 11 (entget (ssname s1 n))))
  135.         )
  136.         (getline p2 jd)
  137.         (getline p1 jd)
  138.         (setq n (1+ n))
  139.       )
  140.     )
  141.   )
  142.       )
  143.     )

  144.   )


  145.   (defun jion (/ ss s)
  146.     (setq ss (ssget '((-4 . "<OR")
  147.           (0 . "LINE")
  148.           (0 . "ARC")
  149.           (-4 . "<AND")
  150.           (0 . "LWPOLYLINE")
  151.           (70 . 0)
  152.           (-4 . "AND>")
  153.           (-4 . "OR>")
  154.          )
  155.        )
  156.     )
  157.     (while ss
  158.       (setq s (ssname ss 0))
  159.       (if (or (= "LINE" (cdr (assoc 0 (entget s))))
  160.         (= "ARC" (cdr (assoc 0 (entget s))))
  161.     )
  162.   (command "pedit" s "y" "j" "p" "" "x")
  163.   (command "pedit" s "j" "p" "" "x")
  164.       )
  165.       (setq ss (ssget "p"))
  166.     )
  167.     (princ)
  168.   )

  169. ;;;程序开始
  170.   (princ "\n选择直线")
  171.   (setq enline (car (entsel)))
  172.   (initget 5 "  ")
  173. ;;;  (setq jd (getreal "精确度<0.001>"))
  174. ;;;  (if (= jd "")
  175.   (setq jd 0.001)
  176. ;;;  )
  177.   (setq pt1 (cdr (assoc 10 (entget enline))))
  178.   (setq pt2 (cdr (assoc 11 (entget enline))))
  179.   (setq ssrtl (ssadd enline))
  180.   (getline pt1 jd)
  181.   (getline pt2 jd)
  182.   (sssetfirst nil ssrtl)
  183.   (jion)




  184. ;;;  ssrtl
  185. )

上面是GL_xl版主写的,选择一条直线,相邻的线段都选择
怎样修改,将选择后的线段结合成pl线呢? 不知道在哪里修改.

还有
我公司用vba编写了程序
命令行过程是这样的 vbastmt
                 (setvar “filetrad” 200)
                  Ckcase   用户选择线段

我编写 是 (command “vbastmt”)
          (setvar “filetrad” 200)
          (command “ckcase” pasue)
这样行吗?
我也不知道改到那里
请大侠们帮帮忙
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2011-10-17 23:33:20 | 显示全部楼层
pedit命令就可以实现。
 楼主| 发表于 2011-10-18 08:17:37 | 显示全部楼层
本帖最后由 qcw911 于 2011-10-18 08:17 编辑
ljttjl 发表于 2011-10-17 23:33
pedit命令就可以实现。

我是新手
这个我知道
如何修改呢
帮帮忙
发表于 2011-10-18 22:23:50 | 显示全部楼层
查看autocad命令帮助文件
 楼主| 发表于 2011-10-19 08:59:16 | 显示全部楼层
本帖最后由 qcw911 于 2011-10-19 09:00 编辑
ljttjl 发表于 2011-10-18 22:23
查看autocad命令帮助文件


这个是我找到的程序
但是结合VBA就不行了
命令行过程是这样的    vbastmt
                                   (setvar “filetrad” 200)
                                  Ckcase   用户选择线段

我编写 是     (command “vbastmt”)
                   (setvar “filetrad” 200)
                   (command “ckcase” pasue)
这样行吗?
插写在那里
  1. (vl-load-com)
  2. (defun gotonexten (en pt / box en2 en2lst ep i sp ss)
  3.   (setq        box (* (/ (getvar "pickbox") (cadr (getvar "screensize")))
  4.                (getvar "viewsize")
  5.             )
  6.   )
  7.   (setq        ss (ssget "c"
  8.                   (mapcar '- pt (list box box))
  9.                   (mapcar '+ pt (list box box))
  10.            )
  11.   )
  12.   (if ss
  13.     (progn
  14.       (ssdel en ss)
  15.       (setq i 0)
  16.       (while (setq en2 (ssname ss i))
  17.         (setq i (1+ i))
  18.         (setq
  19.           sp (vl-catch-all-apply 'vlax-curve-getStartPoint (list en2))
  20.         )
  21.         (if (listp sp)
  22.           (progn (setq ep (vlax-curve-getEndPoint en2))
  23.                  (cond ((equal sp pt 1e-8)
  24.                         (setq en2lst (cons (list en2 ep) en2lst))
  25.                        )
  26.                        ((equal ep pt 1e-8)
  27.                         (setq en2lst (cons (list en2 sp) en2lst))
  28.                        )
  29.                  )
  30.           )
  31.         )
  32.       )
  33.     )
  34.   )
  35.   en2lst
  36. )
  37. ;楢銛楢慄c:ss-----fsxm  2007/01/29


  38. (defun c:ss (/ en enp ept spt ss addnext)
  39.   (if (and (setq enp (entsel))
  40.            (ssget (cadr enp) '((0 . "*line,arc,circle,ellipse")))
  41.       )
  42.     (progn
  43.       (setq en (car enp))
  44.       (setq spt (vlax-curve-getStartPoint en))
  45.       (setq ept (vlax-curve-getendPoint en))
  46.       (setq ss (ssadd))
  47.       (ssadd en ss)
  48.       (defun addnext (en pt / next)
  49.         (if (setq next (gotonexten en pt))
  50.           (foreach a next
  51.             (if        (not (ssmemb (car a) ss))
  52.               (progn (ssadd (car a) ss)
  53.                      (apply 'addnext a)
  54.               )
  55.             )
  56.           )
  57.         )
  58.       )
  59.       (addnext en spt)
  60.       (addnext en ept)
  61.       (if (= 0 (getvar "cmdactive"))
  62.         (sssetfirst nil ss)
  63.       )
  64.       ss
  65.       (jion)
  66.     )
  67.     (progn
  68.       (princ "\n枹?庢?徾埥?庢椆旕curve?宆?徾!")
  69.       (princ)
  70.     )
  71.   )
  72. )

  73. (defun jion (/ ss s)
  74.   (setq        ss (ssget '((-4 . "<OR")
  75.                     (0 . "LINE")
  76.                     (0 . "ARC")
  77.                     (-4 . "<AND")
  78.                     (0 . "LWPOLYLINE")
  79.                     (70 . 0)
  80.                     (-4 . "AND>")
  81.                     (-4 . "OR>")
  82.                    )
  83.            )
  84.   )
  85.   (while ss
  86.     (setq s (ssname ss 0))
  87.     (if        (or (= "LINE" (cdr (assoc 0 (entget s))))
  88.             (= "ARC" (cdr (assoc 0 (entget s))))
  89.         )
  90.       (command "pedit" s "y" "j" "p" "" "x")
  91.       (command "pedit" s "j" "p" "" "x")
  92.     )
  93.     (setq ss (ssget "p"))
  94.   )
  95.   (princ)
  96. )
 楼主| 发表于 2011-10-20 08:36:06 | 显示全部楼层
跪求,那位高手能来相助啊
 楼主| 发表于 2011-10-20 19:47:45 | 显示全部楼层
帖子快沉了,是不是我没说明白啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-25 04:54 , Processed in 0.200613 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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