atoma654 发表于 2002-11-18 16:26:00

有多段线20个,直线3个,有什么命令把它们合成为一根多段线没有?

luoyihua 发表于 2002-11-18 17:01:00

pedit命令

本帖最后由 作者 于 2002-11-18 17:01:58 编辑

有,用pedit命令,然后按提示操作就行。但pedit命令对被操作的对象有要求,被合并的对象必须严格连续,我第一次实用此命令时,就因为连续问题,反复了许多次,才完成。

hzzwwq 发表于 2002-11-18 19:46:00

这样!!!

你所说的线条有没有都连在一起?!

如果是全部连在一起的,那可以输入pe→回车→选所要连接的连在一起线条→按J→就可以了!!!(注意:选择线条必须一条一条的选,否则可能连不上)

还有如果是AUTOCAD2002版本,能安装EXPRESS辅助工具,它有一个命令很好用mpedit→选择所需连接的线条(这个命令不需一条一条的选择线条,可以一次性选择所有需要连接的线条)→按J→就可以连在一起了!!!

xbbcad 发表于 2002-11-18 20:59:00

原来我有这个程序,在R14下也可以,但要求选择的线段必须存在一条PLNE

本帖最后由 作者 于 2002-11-18 20:59:10 编辑

有时间的朋友可以帮忙改一下,改好了给我发一个:)
(defun c:pj(/ prg laname selet entname ent name n pw a b c olderr) ;PJ合并多义线主程序

(defun Pjlw(pjsel pjpw / prg laname selet entname ent name n pw sum)
(setq selet pjsel pjsel nil pw pjpw pjpw nil)
(setq n 0 sum 0)
(if (and (/= selet nil) (/= pw nil))
   (repeat (sslength selet)
       (setq entname (ssname selet n))
       (setq ent (entget entname))
       (setq name (cdr (assoc 0 ent)))
       (if (or (= name "LINE") (= name "ARC"));改变直线段或弧线段线宽
         (progn
         (command "pedit" entname "y" "w" pw \r)
         (setq sum (1+ sum))
         )
       )
       (if (= name "CIRCLE");调用改变圆线宽函数
         (progn
         (chcircle ent)
         (setq sum (1+ sum))
         )
       )
       (setq n (1+ n))
   ) ;end repeat
) ;end if
) ;END PJlw

;(initget "l s o")
(setq olderr *error* *error* wwz_err)

(prompt "合并多义线...\n")
(setq prg (strcase (getstring "\n输入层名L/指定层上实体S/<选择实体O>:") T))
(if (= prg "l")
   (progn
    (setq laname (getstring "\n输入层名:"))
    (setq selet (ssget "x" (list (cons 8 laname))))
   )
)
(if (= prg "s")
   (progn
   (write-line "\n指定层上实体:")
   (setq a (car (entsel)))
   (setq c (entget a))
   (setq laname (cdr (assoc 8 c)))
   (setq selet (ssget "x" (list (cons 8 laname))))
   )
)
(if (or (= prg "o") (= prg ""))
   (progn
   (write-line "\n选择实体:")
   (setq selet (ssget))
   )
)
(setq n 0 sum 0)
(setvar "CMDECHO" 0)
(if selet
   (repeat (sslength selet)
       (setq entname (ssname selet n))
       (setq ent (entget entname))
       (setq name (cdr (assoc 0 ent)))
       (if (OR (= name "LWPOLYLINE") (= name "POLYLINE"));连接多义线,R14为LWPOLYLINE
      (progn
         (command "pedit" entname "J" selet "" "")
         (setq sum (1+ sum))
         ;(setq selet (ssdel entname selet))
      )
       ;ELSE 非多义线则改变成多义线,设线宽为0
      ;(progn
      ;(if (or (= name "LINE") (= name "ARC")(= name "CIRCLE"))
      ;   (progn
      ;   (pjlw selet 0.0)
      ;   (command "pedit" entname "J" selet "" "")
      ;   )
      ;)
      ;);end progn
       );end if
       (setq n (1+ n))
;       (setq selet (ssdel entname selet))
   ) ;end repeat
) ;end if
(setvar "CMDECHO" 1)
(if (> sum 0) (princ "\n连接完毕.\n"))

(setq *error*olderr)
(princ)
) ;END PJ

atoma654 发表于 2002-11-19 15:22:00

嗯,都是连在一起的,MPEDIT我试了,不同平面都不能连~#_#

同平面都好说啊。

atoma654 发表于 2002-11-19 15:34:00

_3dpoly不在一个平面的线看来是连不了。

hzzwwq 发表于 2002-11-19 18:25:00

是三维的线吗?!

原来你说是在三维上连成一条线啊!!!!

三维上连我自己有时都容易看错到底有没有接在一起,你的线有没有相交?!

龙龙仔 发表于 2002-11-20 10:15:00

连接聚合线__这类问题请到”Autolisp/ visual lisp 编程技术”提出

本帖最后由 作者 于 2002-11-20 10:15:58 编辑

(defun C:PLINE_JOIN (/ HOLDECHO PRG SELET ENTNAME LAYNAME NAME N)
(command "_.UNDO" "GROUP")
(setq HOLDECHO (getvar "CMDECHO"))
(initget "L S ")
(prompt "\n连接聚合线...")
(setq        PRG (getstring "\n输入层名(L)/指定层上实体(S)/<选择实体>: ")
)
(cond
    ((= PRG "L")
   (while (not (tblsearch "LAYER"
                          (setq LAYNAME (getstring "\n输入层名: "))
               )
          )
   )
   (setq
       SELET (ssget "X"
                  (list (cons 8 LAYNAME)
                          (cons 0 "LWPOLYLINE,POLYLINE,LINE,ARC")
                  )
             )
   )
    )
    ((= PRG "S")
   (while (not (setq LAYNAME (entsel "\n指定层上实体: "))))
   (setq
       SELET (ssget
             "X"
             (list (cons 8 (cdr (assoc 8 (entget (car LAYNAME)))))
                     (cons 0 "LWPOLYLINE,POLYLINE,LINE,ARC")
             )
             )
   )
    )
    (t
   (prompt "\n选择实体: ")
   (setq SELET (ssget '((0 . "LWPOLYLINE,POLYLINE,LINE,ARC"))))
    )
)
(setq N 0)
(setvar "CMDECHO" 0)
(if SELET
    (while (setq ENTNAME (ssname SELET N))
      (setq NAME (cdr (assoc 0 (entget ENTNAME))))
      (if NAME
        (progn
          (if (or (= NAME "LWPOLYLINE") (= NAME "POLYLINE"))
          (command "_.pedit" ENTNAME "J" SELET "" "")
          (command "_.pedit" ENTNAME "" "J" SELET "" "")
          )
        )
      )
      (setq N (1+ N))
    )
)
(setvar "CMDECHO" HOLDECHO)
(command "_.UNDO" "END")
(princ)
)
(prompt "\n连接聚合线 Type Pline_join,BY 龙龙仔")
(princ)
页: [1]
查看完整版本: 有多段线20个,直线3个,有什么命令把它们合成为一根多段线没有?