请斑竹帮忙。绘制新图式围墙的程序
<font face="Verdana">绘制新图式围墙的程序能否发一个啊</font> yx1985321发表于2010-11-24 13:15:00static/image/common/back.gif绘制新图式围墙的程序能否发一个啊站内搜索更多有关的信息
</div>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>新图式围墙有两种</p>
<p>采用有关测绘软件就可以了,很方便</p>
<p>网络上有下载</p> 老大帮帮忙啊。找不到呀。急啊 <p>下载南方cass200以上版本都行</p> 现在变成了新图式了。没有办法绘制出来啊 本帖最后由 461045462 于 2010-12-4 16:25 编辑
有一个修改围墙短线为2007版格式的,不知你能否使用?
因为有些画围墙的方式不一样。你试试吧。
命令:gwq
haoyong
在04 内可以吗
本帖最后由 mandala 于 2011-4-11 15:10 编辑
新图式的围墙有几种做法,一种是画线、插块的,一种是用线型的。前一种方法的缺点是删除比较麻烦,还得选中一个个块删除,另外很多这类程序存在围墙转弯时,块有时候会伸出在墙外的情况,当然花些功夫这个问题还是能够解决的。用线型的缺点是前期得做线型,但有了线型之后就一劳永逸了。
发一个我自己写的lsp吧,是用线型的,1比500比例下,单位为米。你可以参考一下思路。不过你得先做一个新围墙的线型wq2012,和一个符号间隔为一半的线型wq2012b,如图:。
(defun c:wq (/ *error* lay ltp E2 en enl a E3 ss n ssn vss len el ent1)
(prompt "绘制07版按比例围墙,符号在前进方向左侧。")
(print)
(defun *error* (msg)
(prompt "程序出错!返回到起始状态。")
(setvar "CMDECHO" 0)
(command "._undo" "_e")
;;设置undo结束点
(command "._u")
(princ)
) ;_ 结束defun
;;把*error*函数放在主程序里边作为内部定义
(setvar "CMDECHO" 0)
(command "._undo" "_be")
;;建立undo点
(setq lay (getvar "clayer"))
(setq ltp (getvar "celtype"))
; (setvar "clayer" "wall")
(setvar "celtype" "wq2012")
(setvar "plinewid" 0)
(setvar "plinegen" 1)
(setvar "CMDECHO" 1)
(if (= (setq th (getreal "输入墙厚度:(默认为0.5):")) nil)
(setq th 0.5)
) ;_ 结束if
(command "._PLINE")
(while (> (getvar "cmdactive") 0) (command pause))
(setvar "CMDECHO" 0)
(setq E2 (entlast))
(setq en (entlast))
(setq enl (entget en))
(setq enl (vl-remove-if '(lambda (x) (/= 42 (car x))) enl))
(setq a (vlax-ename->vla-object (entlast)))
(vla-offset a (- th))
(setq E3 (entlast))
(if (eq E3 (entnext E2))
;;判断是否只生成一个对象
(progn
(command "_.LINE"
"_NON"
(vlax-curve-getStartPoint E2)
"_NON"
(vlax-curve-getStartPoint E3)
""
) ;_ 结束command
(command "_.LINE"
"_NON"
(vlax-curve-getEndPoint E2)
"_NON"
(vlax-curve-getEndPoint E3)
""
) ;_ 结束command
(command "chprop" E3 "" "lt" "continuous" "")
(command "_.explode" e2)
(setq ss (SSGET "P")
n0
) ;_ 结束setq
(repeat (sslength ss)
(setq ssn (ssname ss n))
(setq vss (vlax-ename->vla-object ssn))
(setq len (vlax-curve-getDistAtPoint
vss
(vlax-curve-getEndPoint vss)
) ;_ 结束vlax-curve-getDistAtPoint
) ;_ 结束setq
(setq el (entget ssn))
(if (and (< len 10) (> len 4.5))
(if (< (cdr (nth n enl)) 0)
(progn
(setq el (subst (cons 6 "WQ2012b") (assoc 6 el) el))
(entmod el)
(command "pedit" ssn "y" "")
(setq ent1 (entlast))
(reverseLwp ent1)
) ;_ 结束progn
(progn
(setq el (subst (cons 6 "WQ2012b") (assoc 6 el) el))
(entmod el)
) ;_ 结束progn
) ;_ 结束if
(if (< (cdr (nth n enl)) 0)
(progn
(command "pedit" ssn "y" "")
(setq ent1 (entlast))
(reverseLwp ent1)
) ;_ 结束progn
) ;_ 结束if
) ;_ 结束if
(setq n (1+ n))
) ;_ 结束repeat
) ;_ 结束progn
(progn
(princ "绘制失败。同一条围墙请勿交叉!!!! ")
(setq E3 E2)
(while (setq E2 (entnext E2))
(entdel E2)
) ;_ 结束while
(entdel E3)
) ;_ 结束progn
) ;_ 结束if
(setvar "clayer" lay)
(setvar "celtype" ltp)
(command "._undo" "_e")
;;设置undo结束点
(princ)
) ;_ 结束defun
线形怎么做的?
页:
[1]
2