有多段线20个,直线3个,有什么命令把它们合成为一根多段线没有?
pedit命令
本帖最后由 作者 于 2002-11-18 17:01:58 编辑有,用pedit命令,然后按提示操作就行。但pedit命令对被操作的对象有要求,被合并的对象必须严格连续,我第一次实用此命令时,就因为连续问题,反复了许多次,才完成。
这样!!!
你所说的线条有没有都连在一起?!如果是全部连在一起的,那可以输入pe→回车→选所要连接的连在一起线条→按J→就可以了!!!(注意:选择线条必须一条一条的选,否则可能连不上)
还有如果是AUTOCAD2002版本,能安装EXPRESS辅助工具,它有一个命令很好用mpedit→选择所需连接的线条(这个命令不需一条一条的选择线条,可以一次性选择所有需要连接的线条)→按J→就可以连在一起了!!!
原来我有这个程序,在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
嗯,都是连在一起的,MPEDIT我试了,不同平面都不能连~#_#
同平面都好说啊。_3dpoly不在一个平面的线看来是连不了。
是三维的线吗?!
原来你说是在三维上连成一条线啊!!!!三维上连我自己有时都容易看错到底有没有接在一起,你的线有没有相交?!
连接聚合线__这类问题请到”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]