yx1985321 发表于 2010-11-24 13:15:00

请斑竹帮忙。绘制新图式围墙的程序

<font face="Verdana">绘制新图式围墙的程序能否发一个啊</font>

461045462 发表于 2010-11-25 07:14:00

yx1985321发表于2010-11-24 13:15:00static/image/common/back.gif绘制新图式围墙的程序能否发一个啊
站内搜索更多有关的信息

</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>新图式围墙有两种</p>
<p>采用有关测绘软件就可以了,很方便</p>
<p>网络上有下载</p>

yx1985321 发表于 2010-11-25 17:55:00

老大帮帮忙啊。找不到呀。急啊

461045462 发表于 2010-11-26 07:24:00

<p>下载南方cass200以上版本都行</p>

yx1985321 发表于 2010-12-1 20:09:47

现在变成了新图式了。没有办法绘制出来啊

461045462 发表于 2010-12-4 16:21:50

本帖最后由 461045462 于 2010-12-4 16:25 编辑

有一个修改围墙短线为2007版格式的,不知你能否使用?
因为有些画围墙的方式不一样。你试试吧。
命令:gwq







lichunyu 发表于 2011-4-11 14:01:20

haoyong

lichunyu 发表于 2011-4-11 14:01:54

在04 内可以吗

mandala 发表于 2011-4-11 15:04:33

本帖最后由 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

tianguo_hell 发表于 2011-5-16 12:14:08

线形怎么做的?
页: [1] 2
查看完整版本: 请斑竹帮忙。绘制新图式围墙的程序