找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2304|回复: 7

[编程申请] 根据多段线LIST命令信息重新画多段线

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

发表于 2016-5-8 14:14:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
看了NEWER版主发的提取多段线顶点信息写到文件的帖子,想起来了我们经常会得到给的土地部门给的多段线信息文件,文件内容就是CAD下LIST命令生成的内容,比如:

  1.              LWPOLYLINE  图层: 0
  2.                             空间: 模型空间
  3.                    句柄 = 1b5
  4.               打开
  5.     固定宽度    0.0000
  6.               面积   587466.1219
  7.             长度   5700.7978

  8.           于端点  X=3683.0189  Y= 695.8106  Z=   0.0000
  9.           于端点  X=2865.6202  Y= 969.4175  Z=   0.0000
  10.           于端点  X=2298.6385  Y= 417.4864  Z=   0.0000
  11.           于端点  X=1585.1864  Y=1304.3500  Z=   0.0000
  12.           于端点  X=3347.5547  Y=1351.5236  Z=   0.0000
  13.           于端点  X=2227.7657  Y=1106.2209  Z=   0.0000

复制代码
能不能用程序打开这个文件,然后自动给多段线画出来呢? 我们都是一点一点手输入画的,太慢了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-5-8 15:38:03 | 显示全部楼层
本帖最后由 newer 于 2016-5-8 15:42 编辑

写了个,挺有意思的这功能,试用下看看

  1. (defun c:tt ()
  2.   (if (setq fn (xdrx_system_selectFiles "选取POLYLINE信息文件名" "" "txt" 0))
  3.     (progn
  4.       (setq ff nil)
  5.       (if (setq f (XD::List:FromFile (car fn)))
  6.         (progn
  7.           (setq nums 0)
  8.           (mapcar
  9.             '(lambda (x)
  10.                (if (xdrx_string_find x "闭合")
  11.                  (setq isclosed t)
  12.                )
  13.                (if (and
  14.                      (xdrx_string_find x "于端点")
  15.                      (setq px (XD::String:MatchNumAfter x "x=" T))
  16.                      (setq py (XD::String:MatchNumAfter x "y=" T))
  17.                    )
  18.                  (setq ff (cons (list (atof px) (atof  py)) ff)
  19.                        nums (1+ nums)
  20.                  )
  21.                )
  22.              )
  23.             f
  24.           )
  25.           (setq ff (reverse ff))
  26.           (setq e (xdrx_polyline_make ff))
  27.           (if isclosed
  28.             (xdrx_setpropertyvalue e "isclosed" t)
  29.           )
  30.         )
  31.       )
  32.     )
  33.   )
  34.   (princ)
  35. )

点评

运行了下代码,太方便了,这下同事有福了,提个小建议,试了下有弧线的多段线文件,好像不支持,能不能支持下呢? 另外最好把信息里面的层,颜色,宽度啥的都给支持下就更好了,谢谢!!  详情 回复 发表于 2016-5-8 17:39
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

已领礼包: 264个

财富等级: 日进斗金

发表于 2016-5-8 14:47:33 来自手机 | 显示全部楼层
如果是英文版的信息啥样?

点评

没英文版本,猜的,可能是 LAYER , CONSTANT WIDTH COLOR啥的吧  详情 回复 发表于 2016-5-8 15:30
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-5-8 15:30:29 | 显示全部楼层
iLisp 发表于 2016-5-8 14:47
如果是英文版的信息啥样?

没英文版本,猜的,可能是 LAYER , CONSTANT WIDTH COLOR啥的吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-5-8 15:41:24 | 显示全部楼层
忘说了,里面的函数 XD::String:MatchNumAfter 见 http://bbs.xdcad.net/thread-704144-1-1.html
另外,默认的文件是TXT文件,如果不是,自己在对话框里面找下你的文件。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

 楼主| 发表于 2016-5-8 17:39:30 | 显示全部楼层
newer 发表于 2016-5-8 15:38
写了个,挺有意思的这功能,试用下看看

运行了下代码,太方便了,这下同事有福了,提个小建议,试了下有弧线的多段线文件,好像不支持,能不能支持下呢? 另外最好把信息里面的层,颜色,宽度什么的都给支持下就更好了,谢谢!!

点评

呵呵,再试试,把所有的都加入了,有颜色,有层,有起始宽度,终止宽度,有弧线。。。 [attachimg]53156[/attachimg]  详情 回复 发表于 2016-5-8 20:38
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-5-8 20:38:27 | 显示全部楼层
marting 发表于 2016-5-8 17:39
运行了下代码,太方便了,这下同事有福了,提个小建议,试了下有弧线的多段线文件,好像不支持,能不能支 ...

呵呵,再试试,把所有的都加入了,有颜色,有层,有起始宽度,终止宽度,有弧线。。。
读多段线信息生成POLYLINE.gif

  1.                   LWPOLYLINE  图层: 0
  2.                             空间: 模型空间
  3.                    颜色: 1 (红)    线型: BYLAYER
  4.                    句柄 = 1e4
  5.             闭合
  6.               面积   780964.8950
  7.          周长   3246.5184

  8.           于端点  X=1447.4090  Y= 291.7655  Z=   0.0000
  9.     起点宽度   30.0000
  10.       端点宽度    3.0000
  11.           于端点  X=1750.9345  Y= 906.9609  Z=   0.0000
  12.     起点宽度    0.0000
  13.       端点宽度    0.0000
  14.              凸度    0.6649
  15.             圆心  X=1421.7274  Y=1069.4078  Z=   0.0000
  16.             半径  367.1053
  17.        起点角度       334
  18.          端点角度       108
  19.           于端点  X=1306.9718  Y=1418.1160  Z=   0.0000
  20.     起点宽度    0.0000
  21. 按 ENTER 键继续:
  22.       端点宽度    0.0000
  23.              凸度    0.2954
  24.             圆心  X=1512.5144  Y= 793.4781  Z=   0.0000
  25.             半径  657.5867
  26.        起点角度       108
  27.          端点角度       174
  28.           于端点  X= 858.4789  Y= 861.7260  Z=   0.0000
  29.     起点宽度    0.0000
  30.       端点宽度    0.0000
  31.              凸度    0.4866
  32.             圆心  X=1376.4363  Y= 807.6764  Z=   0.0000
  33.             半径  520.7698
  34.        起点角度       174
  35.          端点角度       278

复制代码
  1. (defun c:tt ()
  2.   (if (setq fn (xdrx_system_selectFiles "选取POLYLINE信息文件名" "" "txt" 0))
  3.     (progn
  4.       (setq ff nil
  5.             bulges nil
  6.             sws nil
  7.             ews nil
  8.       )
  9.       (if (setq f (XD::List:FromFile (car fn)))
  10.         (progn
  11.           (setq nums 0)
  12.           (mapcar
  13.             '(lambda (x)
  14.                (if (xdrx_string_find x "闭合")
  15.                  (setq isclosed t)
  16.                )
  17.                (if (setq lyr (XD::String:MatchNumAfter x "图层:" nil))
  18.                  (setq lyr1 (car lyr))
  19.                )
  20.                (if (setq clr (XD::String:MatchNumAfter x "颜色:" nil))
  21.                  (setq clr1 (car clr))
  22.                )
  23.                (if (setq cw (XD::String:MatchNumAfter x "固定宽度" nil))
  24.                  (setq cw (car cw))
  25.                )
  26.                (if (and
  27.                      (xdrx_string_find x "于端点")
  28.                      (setq px (XD::String:MatchNumAfter x "x=" nil))
  29.                      (setq py (XD::String:MatchNumAfter x "y=" nil))
  30.                    )
  31.                  (setq ff (cons (list (atof (car px)) (atof (car py))) ff)
  32.                        nums (1+ nums)
  33.                  )
  34.                )
  35.                (if (setq sw (XD::String:MatchNumAfter x "起点宽度" nil))
  36.                  (setq sws (cons (list (- nums 1) (atof (car sw))) sws))
  37.                )
  38.                (if (setq sw (XD::String:MatchNumAfter x "端点宽度" nil))
  39.                  (progn
  40.                    (setq old (assoc (- nums 1) sws)
  41.                          new (append
  42.                                old
  43.                                (list (atof (car sw)))
  44.                              )
  45.                          sws (subst
  46.                                new
  47.                                old
  48.                                sws
  49.                              )
  50.                    )
  51.                  )
  52.                )
  53.                (if (setq bulge (XD::String:MatchNumAfter x "凸度" nil))
  54.                  (setq bulges (cons (list (- nums 1) (atof (car bulge)))
  55.                                     bulges
  56.                               )
  57.                  )
  58.                )
  59.              )
  60.             f
  61.           )
  62.           (setq ff (reverse ff))
  63.           (setq e (xdrx_polyline_make ff))
  64.           (mapcar
  65.             '(lambda (x)
  66.                (xdrx_setpropertyvalue e "bulgeat" x)
  67.              )
  68.             bulges
  69.           )
  70.           (mapcar
  71.             '(lambda (x)
  72.                (xdrx_setpropertyvalue e "widthat" x)
  73.              )
  74.             sws
  75.           )
  76.           (if isclosed
  77.             (xdrx_setpropertyvalue e "isclosed" t)
  78.           )
  79.           (if cw
  80.             (xdrx_setpropertyvalue e "ConstantWidth" cw)
  81.           )
  82.           (xdrx_setpropertyvalue e "layer" lyr1)
  83.           (xdrx_setpropertyvalue e "color" (atoi clr1))
  84.         )
  85.       )
  86.     )
  87.   )
  88.   (princ)
  89. )


点评

完美,试用了下,完全符合要求了,谢谢N版  详情 回复 发表于 2016-5-8 22:49
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

 楼主| 发表于 2016-5-8 22:49:31 | 显示全部楼层
newer 发表于 2016-5-8 20:38
呵呵,再试试,把所有的都加入了,有颜色,有层,有起始宽度,终止宽度,有弧线。。。

完美,试用了下,完全符合要求了,谢谢N版
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-29 03:35 , Processed in 0.412037 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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