461045462 发表于 2010-12-18 23:36 http://bbs.mjtd.com/static/image/common/back.gif
学习了.........
好像画不了粗的单线,不知是为什么?
请指教
哦,没有说清楚,粗的单线是这么个lsp,跟上边的不同,但在圆弧顺向的环节上运用了同样的一些原理。其实粗和细只是增加几个变量和ssget、pedit命令而已,同时去掉了检查pline是否交叉的if语句。要这个lsp主要是为了使pline中的圆弧都保持顺向,不然简单的pline命令就可以实现了:
(defun c:FUCK1(/ en enl enlist x n el)
(setvar "clayer" "wall")(setvar "celtype" "wq2012")(setvar "plinewid" 0.3)(setvar "plinegen" 1)(setvar "CMDECHO" 1)
(command "_.pline" )
(while (= 1 (getvar "cmdactive"))
(command pause)
)
(setq en (entlast));;以下开始检查是否有圆弧反转,并使之顺向:
(setq enl (entget en))
(setq enl (vl-remove-if '(lambda (x) (/= 42 (car x))) enl))
(command "_.explode" en)
(while (setq en (entnext en))
(setq enlist (cons en enlist))
)
(setq enlist (reverse enlist)
n 0)
(repeat (length enlist)
(if (/= 0 (cdr (nth n enl)))
(if (< (cdr (nth n enl)) 0)
(progn
(setq el (entget (nth n enlist)))
(setq el (subst (cons 6 "WQ2013") (assoc 6 el) el))
(entmod el)
)
)
)
(setq n (1+ n))
);;反转完毕
(setq x (SSGET "P")) (command "_pedit" "m" x "" "Y" "W" "0.3" ""));;改宽度
(setvar "clayer" "continuous")(setvar "celtype" "continuous")(setvar "plinewid" 0) (princ);;把默认线型设回初始,以免继续画图时麻烦
)
在测绘行业2007版的新版图式中,对围墙的表示方法做了很大的改变,这几个lisp是专门为此设计的。
461045462 发表于 2010-12-18 23:36 static/image/common/back.gif
学习了.........
好像画不了粗的单线,不知是为什么?
请指教
加载线型后,直接用pl 似乎就能画出细线围墙
-------------------------------------------
在实际工作中,往往加载了某个线型后,仅仅用pline解决不了画线的问题,必须把画好的pline再打散(起码我想不出其它办法)。如果有更好的办法,何必花如此多的精力来写这个lsp呢。
在这个帖子里,尤其是8楼,我说明了为什么:http://bbs.mjtd.com/thread-84628-1-1.html 热心人很多,感动呀! 本帖最后由 mandala 于 2010-12-22 20:44 编辑
回一下461045462的问题,wq2012等线型是如何制作的:
是这样的:拿wq2012为例,首先要从做形开始:在cad中画一个边长为0.5的实心小方块(形不支持填充,要实心就在里边多加几条线),方块的左下角坐标是0,0。然后用cad里的express(中文版的叫ET扩展工具,一样)里的“制作形”工具,把这个小方块做成一个a.shp(随便起名)文件。这个文件是可以用记事本编辑的,所以你可以把几个形做成的shp的内容集中到一个shp里边,但要注意shp里边每个形的开始都有编号,不要重复了,另外给每个形一个名称,比如这个小方块,我给它名字就是“q”。最后用compile命令把你做好的aa.shp编译成aa.shx文件,并把它放在默认路径下边。
然后设置在cad开始时自动载入aa.shx,比如在a.lsp里加入一段命令:(command"load""aa.shx")。接下来就是编辑一个线型文件(*。lin)来设置wq2012线型了。写线型文件是有一定语法的,不过很简单,你稍微一琢磨就会明白。比如wq2012、wq2013就是这么一句话:
*WQ2012,新围墙
A,10,,0
*WQ2013,新围墙(反向)
A,10,,0
斜坡是这样的:(形就是一条长为1的竖直短线,名称为921)
*536,斜坡(前进左向)
A,0.01,,0,,1.99,,2
栅栏是这样的:(形是一个直径为1的圆,名字是133。其实圆可以在lin中直接定义,不用形也可以)
*680,栅栏(前进左向)
A,4.5,,4.5,-0.5,,-0.5
这4条线型由上到下依次是wq2012、wq2013、680、536。
本帖最后由 mandala 于 2010-12-22 20:36 编辑
其实制作线型最难的在制作形文件。以前的shp要自己写,那语法绝对雷人。现在有了express等工具就容易了。其它的都是一些小的枝节,比起写lsp来实在是太简单了,呵呵。自己动手做一次你就会明白的。
靠,这个536斜坡的lin是我徒弟写的,刚才看了一下挺雷人,用两段短线接起来变成一段长线……其实用s=2就可以了。明天教训这小子去。
mandala 发表于 2010-12-22 20:32 static/image/common/back.gif
其实制作线型最难的在制作形文件。以前的shp要自己写,那语法绝对雷人。现在有了express等工具就容易了。其 ...
谢谢
说的很详细。我学习练习做做。
徒弟做的很好了。
不是明天教训这小子去,而是要表扬
Gxl大哥那是相当的好啊。
页:
1
[2]