[讨论]線段連結同時改變物件厚度
類似acad2000\express\pljoin的功能,不用距離判斷,端點相接才處理,希望功能如下1.批量處理
2.線(line,lwpolyline,arc)為相同圖層才join
3."line","arc"不與其他線join時依舊為"line","arc"
4.同時改變"lwpolyline"的厚度=各線厚度*長度/pl長度
這在工程量計算分段牆體的平均高度(厚度)是很有用的,謝謝 3、“不与其他线join时”,那到底要JION,还是不要JION,什么时候要JION,什么时候又不JION?
4、长度和PL长度各指什么? 3.原pljoin的功能,未與其他線相連的"line",經處理後會變成"lwpolyline",希望程序設計考量該"line"還是"line"
4.平均厚度為被join的"line,lwpolyline,arc"各線長度*各線原先厚度/join後的長度
例line1長20,厚度2.5,line2長15,厚度2.8->pline長35,厚度2.63(取二位) 但如果两条有角度的LINE合并后,又如何能得到一条LINE呢?只能是PLINE,LINE是不会拐弯的 沒錯,不論"line"是否有角度,若"line1"與其他"line2","line3"...合併就成為"lwpolyline"
cad2000\express\pljoin不論"line"是否被join,原"line"會變成"lwpolyline",不希望是這樣的結果 本帖最后由 作者 于 2004-2-26 13:48:48 编辑
已自行設計完成,實例測試中,待測試完成提供源碼(defun c:lljj() (setvar "cmdecho" 0)
(setq selnum (getvar "osmode"))
(setvar "osmode" 0)
(setq cly (getvar "clayer")); (setq p1 (getpoint "\nFirst corner:"))
; (setq p2 (getcorner p1 "\nSecond corner:"))
(setq ss (ssget "X" '((0 . "LINE,LWPOLYLINE,ARC")(62 . 256))))
(setq i 0)
(repeat (sslength ss)
(setq ename (ssname ss i))
(setq endata (entget ename))
(setq enthick (cdr (assoc 39 endata)))
(if (= enthick nil)(command "chprop" ename "" "c" 2 ""))
(setq i (+ i 1))
)
(setq ss (ssget "X" '((0 . "LINE,LWPOLYLINE,ARC")(62 . 256))))
(setq i 0)
(setq sstol 0.0)
(repeat (sslength ss)
(setq ename (ssname ss i))
(setq endata (entget ename))
(setq entype (cdr (assoc 0 endata)))
(setq enthick (cdr (assoc 39 endata)))
(command "lengthen" ename "")
(setq sslen (getvar "perimeter"))
(setq sstol (+ sstol (* sslen enthick)))
(setq i (+ i 1))
)
(setq i 0)
(repeat (sslength ss)
(setq ename (ssname ss i))
(if (/= ename nil)
(progn
(setq endata (entget ename))
(setq entype (cdr (assoc 0 endata)))
(setq enlay (cdr (assoc 8 endata)))
(setq ssp (ssget "x" (list (cons 8 enlay))))
(setq ssp (ssget "p" '((0 . "LINE,LWPOLYLINE,ARC")(62 . 256))))
(if (and (or (= entype "LINE")(= entype "ARC")) (/= ssp nil))
(progn
(command "pedit" ename "y" "j" ssp "" "w" "1.0" "")
(command "chprop" "l" "" "c" 52 "")
(setq sspp (ssget "l"))
(command "lengthen" sspp "")
(setq sspplen (getvar "perimeter"))
)
(progn
(command "pedit" ename "j" ssp "" "w" "1.0" "")
(command "chprop" "l" "" "c" 52 "")
(setq sspp (ssget "l"))
(command "lengthen" sspp "")
(setq sspplen (getvar "perimeter"))
)
)
(setq ssp (ssget "x" '((0 . "LINE,ARC,LWPOLYLINE")(62 . 256))))
(setq ssptol 0.0)
(if (/= ssp nil)
(progn
(setq j 0)
(setq ssptol 0)
(repeat (sslength ssp)
(setq spname (ssname ssp j))
(setq spdata (entget spname))
(setq sspth (cdr (assoc 39 spdata)))
(command "lengthen" spname "")
(setq ssplen (getvar "perimeter"))
(setq ssptol (+ ssptol (* ssplen sspth)))
(setq j (+ j 1))
)
)
)
)
) (setq i (+ i 1))
(setq minlen (- sstol ssptol))
(setq sppthset (/ minlen sspplen)) (command "chprop" sspp "" "t" sppthset "c" "bylayer" "")
(setq sppthset nil)
(setq ss (ssget "x" '((0 . "LINE,LWPOLYLINE,ARC")(62 . 256))))
) (setq tb (tblsearch "LAYER" "ZTEMP"))
(if (= tb nil)(command "layer" "m" "ZTEMP" "c" 7 "ZTEMP" "")) (setq ss (ssget "x" '((0 . "LWPOLYLINE")))) (setq i 0)
(repeat (sslength ss)
(setq ename (ssname ss i))
(command "copy" ename "" '(0 0) '(0 0))
(command "chprop" "L" "" "la" "ZTEMP" "")
(command "explode" "L")
(setq sstemp (ssget "x" '((8 . "ZTEMP"))))
(setq ntmp (sslength sstemp))
(if (= ntmp 1)(command "explode" ename))
(command "erase" sstemp "")
(setq i (+ i 1))
)
; (setq ss (ssget "X" '((0 . "LINE,LWPOLYLINE,ARC"))))
; (command "chprop" ss "" "c" "bylayer" "")
(setvar "osmode" selnum)
(setvar "clayer" cly)(prin1)
)
(prin1) 另提供一個同pljoin的功能,不同處在非相同圖層不會合併(defun c:llj() (setvar "cmdecho" 0)
(setq selnum (getvar "osmode"))
(setvar "osmode" 0)
(setq cly (getvar "clayer")) (setq p1 (getpoint "\nFirst corner:"))
(setq p2 (getcorner p1 "\nSecond corner:")) (setq ss (ssget "c" p1 p2 '((0 . "LINE,LWPOLYLINE,ARC")))) (setq i 0)
(repeat (sslength ss)
(setq ename (ssname ss i))
(if (/= ename nil)
(progn
(setq endata (entget ename))
(setq entype (cdr (assoc 0 endata)))
(setq enlay (cdr (assoc 8 endata)))
(setq ssp (ssget "p" (list (cons 8 enlay))))
(if (and (or (= entype "LINE")(= entype "ARC")) (/= ssp nil))
(command "pedit" ename "y" "j" ssp "" "w" "1.0" "")
)
)
) (setq i (+ i 1))
(setq ss (ssget "c" p1 p2 '((0 . "LINE,LWPOLYLINE,ARC"))))
)
(setq tb (tblsearch "LAYER" "ZTEMP"))
(if (= tb nil)(command "layer" "m" "ZTEMP" "c" 7 "ZTEMP" "")) (setq ss (ssget "c" p1 p2 '((0 . "LWPOLYLINE")))) (setq i 0)
(repeat (sslength ss)
(setq ename (ssname ss i))
(command "copy" ename "" '(0 0) '(0 0))
(command "chprop" "L" "" "la" "ZTEMP" "")
(command "explode" "L")
(setq sstemp (ssget "c" p1 p2 '((8 . "ZTEMP"))))
(setq ntmp (sslength sstemp))
(if (= ntmp 1)(command "explode" ename))
(command "erase" sstemp "")
(setq i (+ i 1))
)
(setvar "osmode" selnum)
(setvar "clayer" cly)
(prin1)
)
(prin1)
页:
[1]