明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1194|回复: 3

[已解答] 关于多段线,线中线提取并按照格式输出到文本的问题,请各位大神解答!

[复制链接]
发表于 2014-1-1 18:17 | 显示全部楼层 |阅读模式
  1. ;BY:小罗
  2. ;2013年12月28日
  3. (defun c:tt( / ? biao ent file geshu huidian i j mc name path ss tiaoshu xx xzbiao yy yzbiao)
  4.   (setq path (getfiled "保存" "" "txt" 1));;;;;;;;;;;;;;;;;;获取路径
  5.   (setq file (open path "w"));----------------------打开文件,没有则新建!
  6.   (write-line "[属性描述]" file);-------------------------------------
  7.   (write-line "坐标系=80国家大地坐标系" file);                             ;
  8.   (write-line "几度分带=3" file)                                                      ;  
  9.   (write-line "投影类型=高斯克吕格" file)                                         ;
  10.   (write-line "计量单位=米" file)                                                     ;   写入表头
  11.   (write-line "带号=36" file)                                                           ;
  12.   (write-line "精度=0.001" file)                                                      ;
  13.   (write-line "转换参数=,,,,,," file)                                                   ;
  14.   (write-line "[地块坐标]" file)      ;                                                 ;   
  15.   (setq ss (ssget '((0 . "LWPOLYLINE"))))?;;;;;;;;;;选择多段线
  16.   (setq i 0)                ;;;;;;;初始化变量
  17.   (setq geshu 0)       ;;;为计算界址点名称
  18.   (setq tiaoshu 0)     ;;;;计算外围多少多少
  19.   (repeat (sslength ss);;;;;循环开始,这里是对选择集作循环。
  20.     (setq huidian (1+ geshu));计算回点的点号
  21.     (setq tiaoshu (1+ tiaoshu))
  22.     (write-line (strcat "," ",1," "外围" (itoa tiaoshu) "," "面" "," "H-48-72-(17)" ",综合用地,,@") file) ;;;;计算外围多少多少
  23.     (setq name (ssname ss i));得到选择集中图元名称
  24.     (setq ent (entget name));得到图元组码表
  25.     (setq j 0) ;;;;;;;初始化变量,准备对组码表进行循环,提取组码为10的坐标
  26.     (repeat (length ent);循环开始
  27.       (setq biao (car (nth j ent)));;;;提取组码
  28.       (if (= biao 10)     ;;; 进行判断,如果组码为10就执行以下代码
  29.        (progn   
  30.   (setq xx (cadr (nth j ent))) ;;;;;;提取X坐标
  31.   (setq yy (caddr (nth j ent)));;;;提取Y坐标
  32.   (setq geshu (1+ geshu))
  33.   (setq mc (strcat "J" (itoa  geshu) "," "1" ","));;;;;计算界址点名称
  34.   (write-line (strcat mc (rtos yy) "," (rtos xx)) file);;;;;写入文本中
  35.   (princ)
  36.        )
  37.       )
  38.       (setq j (1+ j))
  39.     );;;;内循环结束
  40.     (setq xzbiao (rtos (cadr (assoc 10 ent))))
  41.     (setq yzbiao (rtos (caddr (assoc 10 ent))))
  42.     (write-line (strcat (strcat "J" (itoa  huidian) "," "1" ",") yzbiao "," xzbiao) file);;;回点,返回这条多段线的第一个提取的顶点!
  43.     (setq i (1+ i))
  44.   );;整个循环结束
  45.   (close file);;;;关闭文件,内容才能被正式写入!
  46. )

代码如上,这是小弟自己写的代码,但是实现的功能只能是提取那种最外围的多段线,如果多段线内另有多段线,想按照要求提取里面的多段线,并且按照格式输出,小弟就力有不足了!
小弟的代码实现的功能为:


将这种单一的多段线坐标提取出来,并按照格式输出成如下格式:

文本中,“外围1”、“外围2”代表图中的两条多段线,最前面的J1、J2之类的就是多段线顶点的点号,没什么讲究,按照顺序编的
两个逗号中间的“1”代表的是这两条线为最外面的多段线,现在问题来了,如果出现如下情况:


要将多段线内的多段线也给提取出来,并按照这种格式输出:

文本中两个逗号之间的“2”和“3”代表“外围2”多段线内的多段线,要按照这种格式提取出来,小弟不知道该如何做,还请大神指点,不胜感激!


本帖子中包含更多资源

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

x
 楼主| 发表于 2014-1-1 20:54 | 显示全部楼层
自己顶一下,大神快来啊!
发表于 2014-1-2 12:08 | 显示全部楼层
用"ssget"+"wp"判断一下界址线里面是否还包含界址线,不包含就过去,包含就在提取
 楼主| 发表于 2014-1-2 20:50 | 显示全部楼层
蓝图测绘 发表于 2014-1-2 12:08
用"ssget"+"wp"判断一下界址线里面是否还包含界址线,不包含就过去,包含就在提取

兄弟,谢谢了,你给的思路不错,已经实现了,不过就是不太完善,就是选择的是时候不能一起选,只能选择最外围的线,让程序来判断里面是否还有线,如果一起选择的话,提取出来就会出错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-20 03:42 , Processed in 0.182228 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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