清除检查井内管线(理正试用版)
菜瓜
菜瓜 Lv.4
2003年04月30日 12:08:57
只看楼主

(defun c:d3 (/ ent_lns ent_ln ent_jings ent_jing pt bj tmp_cir pt1 c0 c1) (princ "******** 清除检查井内管线 *******") (command "_.undo" "_begin") (setvar "osmode" 0) (princ "\n选择检查井:") (setq ent_jings (ssget ((0 . "insert") (2 . "$WX_JCJ"))))

(defun c:d3 (/ ent_lns ent_ln ent_jings ent_jing pt bj tmp_cir pt1 c0 c1)
(princ "******** 清除检查井内管线 *******")
(command "_.undo" "_begin")
(setvar "osmode" 0)
(princ "\n选择检查井:")
(setq ent_jings (ssget ((0 . "insert") (2 . "$WX_JCJ"))))
(princ "\n选择管线:")
(setq ent_lns (ssget ((0 . "line") (8 . "wp_*"))))
(setq c1 0)
(repeat (sslength ent_jings)
(setq ent_jing (ssname ent_jings c1))
(setq pt (sws_getval ent_jing 10))
(setq bj (sws_getval ent_jing 41))
(setq bj (* 0.5 bj))
(command "circle" pt bj)
(setq tmp_cir (entlast))

(setq c0 0)
(repeat (sslength ent_lns)
(setq ent_ln (ssname ent_lns c0))
(setq pt1 (car (xdrx_entity_intersect ent_ln tmp_cir)))
(if (/= pt1 nil) (command "break" ent_ln pt1 pt))
(setq c0 (1+ c0))
);end repeat
(command "erase" tmp_cir "")

(setq c1 (1+ c1))
);end repeat
(command "_.undo" "_end")
(princ)

)

(defun sws_GetVal (wz_ent wz_id / wz_elst wz_val)
(setq wz_elst (entget wz_ent))
(setq wz_Val (cdr (assoc wz_id wz_elst)))
(princ)
wz_Val
)
菜瓜
2003年04月30日 12:16:56
2楼
http://www.xdcad.net/down/show.php?id=237
去以上站点下载 XDRX_API Build 30422,使用时一并加载
不会用的可以请教 fen 老大哦,:)
回复
菜瓜
2003年04月30日 12:19:27
3楼
本程序仅用于“理正给排水v6.5试用版本”,解决室外“清除检查井内管线”命令的问题,正版用户不需使用本程序。
用什么问题与建议请跟帖
回复
飞鱼
2003年06月29日 13:40:12
4楼
谢谢菜大侠写的东东,但我用的时候有时会出问题,提示如下:

d3 ******** 清除检查井内管线 *******_.undo
Auto/Control/BEgin/End/Mark/Back/: _begin
Command:
选择检查井:
Select objects: 1 found

Select objects:
选择管线:
Select objects: 1 found

Select objects: Other corner: 0 found

Select objects: 1 found

Select objects:
circle 3P/2P/TTR/: Diameter/ : -1000.000000000000
Value must be positive and nonzero.
error: Function cancelled
(COMMAND "circle" PT BJ)
(REPEAT (SSLENGTH ENT_JINGS) (SETQ ENT_JING (SSNAME ENT_JINGS C1)) (SETQ PT
(SWS_GETVAL ENT_JING 10)) (SETQ BJ (SWS_GETVAL ENT_JING 41)) (SETQ BJ (* 0.5
BJ)) (COMMAND "circle" PT BJ) (SETQ TMP_CIR (ENTLAST)) (SETQ C0 0) (REPEAT
(SSLENGTH ENT_LNS) (SETQ ENT_LN (SSNAME ENT_LNS C0)) (SETQ PT1 (CAR
(XDRX_ENTITY_INTERSECT ENT_LN TMP_CIR))) (IF (/= PT1 nil) (COMMAND "break"
ENT_LN PT1 PT)) (SETQ C0 (1+ C0))) (COMMAND "erase" TMP_CIR "") (SETQ C1 (1+
C1)))
(C:D3)
Diameter/ : *Cancel*

这时就出现一个画圆的状态,以检查井中心为圆心,很奇怪,同样的图上,大部分可以,就是有一些检查井老出这样的问题,不知怎么回事?
回复
菜瓜
2003年06月29日 20:48:31
5楼
今天我自己电脑上也出现同样问题,还没找出原因,以下是改进版,只需要框选一次,但是执行的速度比较慢,有些代码需要大虾优化一下,:)
回复
菜瓜
2003年06月29日 20:51:06
6楼
(defun c:d3 (/ ents ent flag ent_lns ent_ln ent_jings ent_jing pt bj tmp_cir pt1 c0 c1 pos cs)
(princ "******** 清除检查井内管线 *******")
(command "_.undo" "_begin")
(setvar "osmode" 0)
;;;以下生成理正检查井和管线的选择集
(setq ents (ssget ((-4 . "")
(-4 . "")
(-4 . "or>"))
)
)

(setq ent_jings nil ent_lns nil)
;;;以下生成一条线的选择集
(setq flag T)
(setq c0 0)
(while flag
(setq ent (ssname ents c0))
(if (= (sws_getval ent 0) "LINE")
(progn
(setq ent_lns (ssadd ent))
(setq flag nil)
)
)
(setq c0 (1+ c0))
)


;;;以下生成一个圆的选择集
(setq flag T)
(setq c0 0)
(while flag
(setq ent (ssname ents c0))
(if (= (sws_getval ent 0) "INSERT")
(progn
(setq ent_jings (ssadd ent))
(setq flag nil)
)
)
(setq c0 (1+ c0))
)
;;;以下生分别生成圆和直线的选择集
(setq c0 0)
(repeat (sslength ents)
(setq ent (ssname ents c0))
(if (= (sws_getval ent 0) "LINE") (ssadd ent ent_lns) (ssadd ent ent_jings))
(setq c0 (1+ c0))
)

(xdrx_pbarbegin "清除室外检查井内管线." (* (sslength ent_jings) (sslength ent_lns)))
(xdrx_pbarsetpos 0)
(setq pos 0)
(setq c1 0)
(princ "\n总共需要处理")
(princ (* (sslength ent_jings) (sslength ent_lns)))
(princ " 次,已经处理了\n")
(repeat (sslength ent_jings)
(setq ent_jing (ssname ent_jings c1))
(setq pt (sws_getval ent_jing 10))
(setq bj (sws_getval ent_jing 41))
(setq bj (* 0.5 bj))
(command "circle" pt bj)
(setq tmp_cir (entlast))

(setq c0 0)
(repeat (sslength ent_lns)
(setq ent_ln (ssname ent_lns c0))
(setq pt1 (car (xdrx_entity_intersect ent_ln tmp_cir)))
(if (/= pt1 nil) (command "break" ent_ln pt1 pt))
(setq c0 (1+ c0))
(setq pos (1+ pos))
(princ "\r")(princ pos)
(xdrx_pbarsetpos pos)
);end repeat
(command "erase" tmp_cir "")

(setq c1 (1+ c1))
);end repeat
(xdrx_pbarend)
(princ "\n处理完毕。")
(command "_.undo" "_end")
(princ)

)
回复
菜瓜
2003年06月29日 20:53:45
7楼
(defun c:d5 (/ ens ent ent_lns ent_ln ent_jings ent_jing pt bj tmp_cir pt1 c0 c1 poss pos cs flag)
(princ "******** 清除检查井内管线(纯圆) *******")
(command "_.undo" "_begin")
(setvar "osmode" 0)
(setq ents (ssget ((0 . "line,circle"))))
(if (= ents nil)(exit))

(setq ent_jings nil ent_lns nil)
;;;以下生成一条线的选择集
(setq flag T)
(setq c0 0)
(while flag
(setq ent (ssname ents c0))
(if (= (sws_getval ent 0) "LINE")
(progn
(setq ent_lns (ssadd ent))
(setq flag nil)
)
)
(setq c0 (1+ c0))
)


;;;以下生成一个圆的选择集
(setq flag T)
(setq c0 0)
(while flag
(setq ent (ssname ents c0))
(if (= (sws_getval ent 0) "CIRCLE")
(progn
(setq ent_jings (ssadd ent))
(setq flag nil)
)
)
(setq c0 (1+ c0))
)
;;;以下生分别生成圆和直线的选择集
(setq c0 0)
(repeat (sslength ents)
(setq ent (ssname ents c0))
(if (= (sws_getval ent 0) "LINE") (ssadd ent ent_lns) (ssadd ent ent_jings))
(princ (sslength ent_lns))
(princ "+")
(setq c0 (1+ c0))
)

(princ "\n总共需要处理")
(princ (* (sslength ent_jings) (sslength ent_lns)))
(princ " 次,已经处理了\n")
(setq poss (* (sslength ent_jings) (sslength ent_lns)))
(xdrx_pbarbegin "清除室外检查井内管线." poss)
(xdrx_pbarsetpos 0)
(setq pos 0)
(setq c1 0)
(repeat (sslength ent_jings)
(setq ent_jing (ssname ent_jings c1))
(setq pt (sws_getval ent_jing 10))
(setq bj (sws_getval ent_jing 40))
;(setq bj (* 0.5 bj))
(command "circle" pt bj)
(setq tmp_cir (entlast))

(setq c0 0)
(repeat (sslength ent_lns)
(setq ent_ln (ssname ent_lns c0))
(setq pt1 (car (xdrx_entity_intersect ent_ln tmp_cir)))
(if (/= pt1 nil) (command "break" ent_ln pt1 pt))
(setq c0 (1+ c0))
(setq pos (1+ pos))
(princ "\r")(princ pos)
(xdrx_pbarsetpos pos)
);end repeat
(command "erase" tmp_cir "")

(setq c1 (1+ c1))
);end repeat
(xdrx_pbarend)
(command "_.undo" "_end")
(princ)
)
回复
lizheng
2003年06月29日 21:11:31
8楼
嘻嘻,菜冬瓜还做了不少工作呀!可喜。
不过告诉大家一下,正式版本可是不存在该问题的呀!
回复
飞鱼
2003年06月30日 00:28:04
9楼
晕倒啊……
用第一个无法执行,

Command: d3
******** 清除检查井内管线 *******_.undo
Auto/Control/BEgin/End/Mark/Back/: _begin
Command: error: bad argument type
(SSNAME ENTS C0)
(SETQ ENT (SSNAME ENTS C0))
(WHILE FLAG (SETQ ENT (SSNAME ENTS C0)) (IF (= (SWS_GETVAL ENT 0) "LINE")
(PROGN (SETQ ENT_LNS (SSADD ENT)) (SETQ FLAG nil))) (SETQ C0 (1+ C0)))
(C:D3)
*Cancel*

用第二个执行过程出错:
Command: d5 ******** 清除检查井内管线(纯圆) *******_.undo
Auto/Control/BEgin/End/Mark/Back/: _begin
Command:
Select objects: Other corner: 14 found
7 were filtered out.

Select objects:
error: bad argument type
(ENTGET WZ_ENT)
(SETQ WZ_ELST (ENTGET WZ_ENT))
(SWS_GETVAL ENT 0)
(= (SWS_GETVAL ENT 0) "CIRCLE")
(IF (= (SWS_GETVAL ENT 0) "CIRCLE") (PROGN (SETQ ENT_JINGS (SSADD ENT)) (SETQ
FLAG nil)))
(WHILE FLAG (SETQ ENT (SSNAME ENTS C0)) (IF (= (SWS_GETVAL ENT 0) "CIRCLE")
(PROGN (SETQ ENT_JINGS (SSADD ENT)) (SETQ FLAG nil))) (SETQ C0 (1+ C0)))
(C:D5)
*Cancel*
回复

相关推荐

APP内打开