明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: mandala

[基础] 请大家帮忙看看这段LSP问题出在哪里:(特别请Gu_xl 和Longfin 两位来看看:)

  [复制链接]
 楼主| 发表于 2010-12-19 10:51:29 | 显示全部楼层
本帖最后由 mandala 于 2010-12-19 18:43 编辑
461045462 发表于 2010-12-18 23:36
学习了.........
好像画不了粗的单线,不知是为什么?
请指教


哦,没有说清楚,粗的单线是这么个lsp,跟上边的不同,但在圆弧顺向的环节上运用了同样的一些原理。其实粗和细只是增加几个变量和ssget、pedit命令而已,同时去掉了检查pline是否交叉的if语句。要这个lsp主要是为了使pline中的圆弧都保持顺向,不然简单的pline命令就可以实现了:

  1. (defun c:FUCK1(/ en enl enlist x n el)
  2. (setvar "clayer" "wall")(setvar "celtype" "wq2012")(setvar "plinewid" 0.3)(setvar "plinegen" 1)(setvar "CMDECHO" 1)
  3. (command "_.pline" )
  4. (while (= 1 (getvar "cmdactive"))
  5. (command pause)
  6. )
  7. (setq en (entlast));;以下开始检查是否有圆弧反转,并使之顺向:
  8. (setq enl (entget en))
  9. (setq enl (vl-remove-if '(lambda (x) (/= 42 (car x))) enl))
  10. (command "_.explode" en)
  11. (while (setq en (entnext en))
  12. (setq enlist (cons en enlist))
  13. )
  14. (setq enlist (reverse enlist)
  15. n 0)
  16. (repeat (length enlist)
  17. (if (/= 0 (cdr (nth n enl)))
  18. (if (< (cdr (nth n enl)) 0)
  19. (progn
  20. (setq el (entget (nth n enlist)))
  21. (setq el (subst (cons 6 "WQ2013") (assoc 6 el) el))
  22. (entmod el)
  23. )
  24. )
  25. )
  26. (setq n (1+ n))
  27. );;反转完毕
  28. (setq x (SSGET "P")) (command "_pedit" "m" x "" "Y" "W" "0.3" ""));;改宽度
  29. (setvar "clayer" "continuous")(setvar "celtype" "continuous")(setvar "plinewid" 0) (princ);;把默认线型设回初始,以免继续画图时麻烦
  30. )


在测绘行业2007版的新版图式中,对围墙的表示方法做了很大的改变,这几个lisp是专门为此设计的。

点评

谢谢,学习了。 我是采用南方cass软件作图。 用lsp修改小黑块,加粗的方式  发表于 2010-12-19 19:08
 楼主| 发表于 2010-12-19 17:27:48 | 显示全部楼层
461045462 发表于 2010-12-18 23:36
学习了.........
好像画不了粗的单线,不知是为什么?
请指教

加载线型后,直接用pl 似乎就能画出细线围墙
-------------------------------------------
在实际工作中,往往加载了某个线型后,仅仅用pline解决不了画线的问题,必须把画好的pline再打散(起码我想不出其它办法)。如果有更好的办法,何必花如此多的精力来写这个lsp呢。

在这个帖子里,尤其是8楼,我说明了为什么:http://bbs.mjtd.com/thread-84628-1-1.html
发表于 2010-12-20 12:01:12 | 显示全部楼层
热心人很多,感动呀!
 楼主| 发表于 2010-12-22 20:30:13 | 显示全部楼层
本帖最后由 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,[q,aa.shx,s=1],0

*WQ2013,新围墙(反向)
A,10,[q,aa.shx,y=-0.5,s=1],0

斜坡是这样的:(形就是一条长为1的竖直短线,名称为921)

*536,斜坡(前进左向)

A,0.01,[921,aa.SHX,S=1],0,[921,aa.SHX,y=1,S=1],1.99,[921,aa.SHX,S=1],2

栅栏是这样的:(形是一个直径为1的圆,名字是133。其实圆可以在lin中直接定义,不用形也可以)

*680,栅栏(前进左向)
A,4.5,[921,aa.SHX,S=1],4.5,-0.5,[133,aa.SHX,S=1],-0.5



这4条线型由上到下依次是wq2012、wq2013、680、536。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2010-12-22 20:32:12 | 显示全部楼层
本帖最后由 mandala 于 2010-12-22 20:36 编辑

其实制作线型最难的在制作形文件。以前的shp要自己写,那语法绝对雷人。现在有了express等工具就容易了。其它的都是一些小的枝节,比起写lsp来实在是太简单了,呵呵。自己动手做一次你就会明白的。

靠,这个536斜坡的lin是我徒弟写的,刚才看了一下挺雷人,用两段短线接起来变成一段长线……其实用s=2就可以了。明天教训这小子去。
发表于 2010-12-22 21:49:26 | 显示全部楼层
mandala 发表于 2010-12-22 20:32
其实制作线型最难的在制作形文件。以前的shp要自己写,那语法绝对雷人。现在有了express等工具就容易了。其 ...

谢谢
说的很详细。我学习练习做做。
徒弟做的很好了。
不是明天教训这小子去,而是要表扬


发表于 2010-12-23 20:09:46 | 显示全部楼层
Gxl大哥那是相当的好啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 18:25 , Processed in 0.178483 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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