明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1944|回复: 6

[讨论]線段連結同時改變物件厚度

[复制链接]
发表于 2004-2-21 11:18 | 显示全部楼层 |阅读模式
類似acad2000\express\pljoin的功能,不用距離判斷,端點相接才處理,希望功能如下


1.批量處理


2.線(line,lwpolyline,arc)為相同圖層才join


3."line","arc"不與其他線join時依舊為"line","arc"


4.同時改變"lwpolyline"的厚度=各線厚度*長度/pl長度


這在工程量計算分段牆體的平均高度(厚度)是很有用的,謝謝
发表于 2004-2-21 12:35 | 显示全部楼层
3、“不与其他线join时”,那到底要JION,还是不要JION,什么时候要JION,什么时候又不JION?



4、长度和PL长度各指什么?
 楼主| 发表于 2004-2-21 13:14 | 显示全部楼层
3.原pljoin的功能,未與其他線相連的"line",經處理後會變成"lwpolyline",希望程序設計考量該"line"還是"line"


4.平均厚度為被join的"line,lwpolyline,arc"各線長度*各線原先厚度/join後的長度


例line1長20,厚度2.5,line2長15,厚度2.8->pline長35,厚度2.63(取二位)
发表于 2004-2-21 13:34 | 显示全部楼层
但如果两条有角度的LINE合并后,又如何能得到一条LINE呢?只能是PLINE,LINE是不会拐弯的
 楼主| 发表于 2004-2-21 13:47 | 显示全部楼层
沒錯,不論"line"是否有角度,若"line1"與其他"line2","line3"...合併就成為"lwpolyline"


cad2000\express\pljoin不論"line"是否被join,原"line"會變成"lwpolyline",不希望是這樣的結果
 楼主| 发表于 2004-2-24 12:55 | 显示全部楼层
本帖最后由 作者 于 2004-2-26 13:48:48 编辑

已自行設計完成,實例測試中,待測試完成提供源碼
  1. (defun c:lljj()       (setvar "cmdecho" 0)
  2.        (setq selnum (getvar "osmode"))
  3.        (setvar "osmode" 0)
  4.        (setq cly (getvar "clayer"));     (setq p1 (getpoint "\nFirst corner:"))
  5. ;     (setq p2 (getcorner p1 "\nSecond corner:"))     
  6.        (setq ss (ssget "X" '((0 . "LINE,LWPOLYLINE,ARC")(62 . 256))))
  7.             
  8.        (setq i 0)
  9.        (repeat (sslength ss)
  10.              (setq ename (ssname ss i))
  11.              (setq endata (entget ename))
  12.              (setq enthick (cdr (assoc 39 endata)))
  13.              (if (= enthick nil)(command "chprop" ename "" "c" 2 ""))
  14.              (setq i (+ i 1))
  15.        )
  16.       
  17.        (setq ss (ssget "X" '((0 . "LINE,LWPOLYLINE,ARC")(62 . 256))))
  18.      
  19.      
  20.        (setq i 0)
  21.        (setq sstol 0.0)
  22.        (repeat (sslength ss)
  23.              (setq ename (ssname ss i))
  24.              (setq endata (entget ename))
  25.              (setq entype (cdr (assoc 0 endata)))
  26.              (setq enthick (cdr (assoc 39 endata)))
  27.              (command "lengthen" ename "")
  28.              (setq sslen (getvar "perimeter"))
  29.              (setq sstol (+ sstol (* sslen enthick)))
  30.              (setq i (+ i 1))
  31.        )
  32.        (setq i 0)
  33.        (repeat (sslength ss)
  34.              (setq ename (ssname ss i))   
  35.              (if (/= ename nil)
  36.                      (progn
  37.                          (setq endata (entget ename))
  38.                          (setq entype (cdr (assoc 0 endata)))
  39.                          (setq enlay (cdr (assoc 8 endata)))                           
  40.                          (setq ssp (ssget "x" (list (cons 8 enlay))))
  41.                          (setq ssp (ssget "p" '((0 . "LINE,LWPOLYLINE,ARC")(62 . 256))))
  42.                          (if (and (or (= entype "LINE")(= entype "ARC")) (/= ssp nil))
  43.                                  (progn
  44.                                        (command "pedit" ename "y" "j" ssp "" "w" "1.0" "")
  45.                                        (command "chprop" "l" "" "c" 52 "")
  46.                                        (setq sspp (ssget "l"))
  47.                                        (command "lengthen" sspp "")
  48.                                        (setq sspplen (getvar "perimeter"))
  49.                                  )
  50.                                  (progn
  51.                                        (command "pedit" ename "j" ssp "" "w" "1.0" "")
  52.                                        (command "chprop" "l" "" "c" 52 "")
  53.                                        (setq sspp (ssget "l"))
  54.                                        (command "lengthen" sspp "")
  55.                                        (setq sspplen (getvar "perimeter"))
  56.                                  )
  57.                          )     
  58.                          (setq ssp (ssget "x" '((0 . "LINE,ARC,LWPOLYLINE")(62 . 256))))
  59.       
  60.                          (setq ssptol 0.0)
  61.                          (if (/= ssp nil)
  62.                                  (progn
  63.                                        (setq j 0)
  64.                                        (setq   ssptol 0)
  65.                                        (repeat (sslength ssp)
  66.                                              (setq spname (ssname ssp j))
  67.                                              (setq spdata (entget spname))
  68.                                              (setq sspth (cdr (assoc 39 spdata)))
  69.                                              (command "lengthen" spname "")
  70.                                              (setq ssplen (getvar "perimeter"))
  71.                                              (setq ssptol (+ ssptol (* ssplen sspth)))   
  72.                                              (setq j (+ j 1))
  73.                                        )
  74.                                  )
  75.                          )
  76.                      )           
  77.                )           (setq i (+ i 1))
  78.            (setq minlen (- sstol ssptol))
  79.            (setq sppthset (/ minlen sspplen))           (command "chprop" sspp "" "t" sppthset   "c" "bylayer" "")
  80.            
  81.            (setq sppthset nil)     
  82.            (setq ss (ssget "x" '((0 . "LINE,LWPOLYLINE,ARC")(62 . 256))))
  83.            
  84.        )        (setq tb (tblsearch "LAYER" "ZTEMP"))
  85.        (if (= tb nil)(command "layer" "m" "ZTEMP" "c" 7 "ZTEMP" ""))       (setq ss (ssget "x" '((0 . "LWPOLYLINE"))))       (setq i 0)
  86.        (repeat (sslength ss)
  87.              (setq ename (ssname ss i))
  88.              (command "copy" ename "" '(0 0) '(0 0))
  89.              (command "chprop" "L" "" "la" "ZTEMP" "")
  90.              (command "explode" "L")
  91.              (setq sstemp (ssget "x" '((8 . "ZTEMP"))))
  92.              (setq ntmp (sslength sstemp))
  93.              (if (= ntmp 1)(command "explode" ename))
  94.              (command "erase" sstemp "")
  95.              (setq i (+ i 1))
  96.        )
  97. ;       (setq ss (ssget "X" '((0 . "LINE,LWPOLYLINE,ARC"))))
  98. ;       (command "chprop" ss "" "c" "bylayer" "")
  99.        (setvar "osmode" selnum)
  100.        (setvar "clayer" cly)(prin1)
  101. )
  102. (prin1)
 楼主| 发表于 2004-2-26 13:54 | 显示全部楼层
另提供一個同pljoin的功能,不同處在非相同圖層不會合併
  1. (defun c:llj()       (setvar "cmdecho" 0)
  2.        (setq selnum (getvar "osmode"))
  3.        (setvar "osmode" 0)
  4.        (setq cly (getvar "clayer"))       (setq p1 (getpoint "\nFirst corner:"))
  5.        (setq p2 (getcorner p1 "\nSecond corner:"))       (setq ss (ssget "c" p1 p2 '((0 . "LINE,LWPOLYLINE,ARC"))))       (setq i 0)
  6.        (repeat (sslength ss)
  7.            (setq ename (ssname ss i))
  8.            (if (/= ename nil)
  9.                    (progn
  10.                          (setq endata (entget ename))
  11.                          (setq entype (cdr (assoc 0 endata)))
  12.                          (setq enlay (cdr (assoc 8 endata)))                           
  13.                          (setq ssp (ssget "p" (list (cons 8 enlay))))
  14.                          (if (and (or (= entype "LINE")(= entype "ARC")) (/= ssp nil))
  15.                                  (command "pedit" ename "y" "j" ssp "" "w" "1.0" "")
  16.                          )
  17.                    )
  18.            )           (setq i (+ i 1))
  19.            (setq ss (ssget "c" p1 p2 '((0 . "LINE,LWPOLYLINE,ARC"))))
  20.        )
  21.        (setq tb (tblsearch "LAYER" "ZTEMP"))
  22.        (if (= tb nil)(command "layer" "m" "ZTEMP" "c" 7 "ZTEMP" ""))       (setq ss (ssget "c" p1 p2 '((0 . "LWPOLYLINE"))))       (setq i 0)
  23.        (repeat (sslength ss)
  24.              (setq ename (ssname ss i))
  25.              (command "copy" ename "" '(0 0) '(0 0))
  26.              (command "chprop" "L" "" "la" "ZTEMP" "")
  27.              (command "explode" "L")
  28.              (setq sstemp (ssget "c" p1 p2 '((8 . "ZTEMP"))))
  29.              (setq ntmp (sslength sstemp))
  30.              (if (= ntmp 1)(command "explode" ename))
  31.              (command "erase" sstemp "")
  32.              (setq i (+ i 1))
  33.        )
  34.        (setvar "osmode" selnum)
  35.        (setvar "clayer" cly)
  36. (prin1)
  37. )
  38. (prin1)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-21 14:50 , Processed in 0.211723 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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