312735894 发表于 2014-1-1 18:17:32

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

;BY:小罗
;2013年12月28日
(defun c:tt( / ? biao ent file geshu huidian i j mc name path ss tiaoshu xx xzbiao yy yzbiao)
(setq path (getfiled "保存" "" "txt" 1));;;;;;;;;;;;;;;;;;获取路径
(setq file (open path "w"));----------------------打开文件,没有则新建!
(write-line "[属性描述]" file);-------------------------------------
(write-line "坐标系=80国家大地坐标系" file);                           ;
(write-line "几度分带=3" file)                                                      ;
(write-line "投影类型=高斯克吕格" file)                                       ;
(write-line "计量单位=米" file)                                                   ;   写入表头
(write-line "带号=36" file)                                                         ;
(write-line "精度=0.001" file)                                                      ;
(write-line "转换参数=,,,,,," file)                                                   ;
(write-line "[地块坐标]" file)      ;                                                 ;   
(setq ss (ssget '((0 . "LWPOLYLINE"))))?;;;;;;;;;;选择多段线
(setq i 0)                ;;;;;;;初始化变量
(setq geshu 0)       ;;;为计算界址点名称
(setq tiaoshu 0)   ;;;;计算外围多少多少
(repeat (sslength ss);;;;;循环开始,这里是对选择集作循环。
    (setq huidian (1+ geshu));计算回点的点号
    (setq tiaoshu (1+ tiaoshu))
    (write-line (strcat "," ",1," "外围" (itoa tiaoshu) "," "面" "," "H-48-72-(17)" ",综合用地,,@") file) ;;;;计算外围多少多少
    (setq name (ssname ss i));得到选择集中图元名称
    (setq ent (entget name));得到图元组码表
    (setq j 0) ;;;;;;;初始化变量,准备对组码表进行循环,提取组码为10的坐标
    (repeat (length ent);循环开始
      (setq biao (car (nth j ent)));;;;提取组码
      (if (= biao 10)   ;;; 进行判断,如果组码为10就执行以下代码
       (progn   
(setq xx (cadr (nth j ent))) ;;;;;;提取X坐标
(setq yy (caddr (nth j ent)));;;;提取Y坐标
(setq geshu (1+ geshu))
(setq mc (strcat "J" (itoageshu) "," "1" ","));;;;;计算界址点名称
(write-line (strcat mc (rtos yy) "," (rtos xx)) file);;;;;写入文本中
(princ)
       )
      )
      (setq j (1+ j))
    );;;;内循环结束
    (setq xzbiao (rtos (cadr (assoc 10 ent))))
    (setq yzbiao (rtos (caddr (assoc 10 ent))))
    (write-line (strcat (strcat "J" (itoahuidian) "," "1" ",") yzbiao "," xzbiao) file);;;回点,返回这条多段线的第一个提取的顶点!
    (setq i (1+ i))
);;整个循环结束
(close file);;;;关闭文件,内容才能被正式写入!
)
代码如上,这是小弟自己写的代码,但是实现的功能只能是提取那种最外围的多段线,如果多段线内另有多段线,想按照要求提取里面的多段线,并且按照格式输出,小弟就力有不足了!
小弟的代码实现的功能为:

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

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

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

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


312735894 发表于 2014-1-1 20:54:13

自己顶一下,大神快来啊!

蓝图测绘 发表于 2014-1-2 12:08:10

用"ssget"+"wp"判断一下界址线里面是否还包含界址线,不包含就过去,包含就在提取

312735894 发表于 2014-1-2 20:50:19

蓝图测绘 发表于 2014-1-2 12:08 static/image/common/back.gif
用"ssget"+"wp"判断一下界址线里面是否还包含界址线,不包含就过去,包含就在提取

兄弟,谢谢了,你给的思路不错,已经实现了,不过就是不太完善,就是选择的是时候不能一起选,只能选择最外围的线,让程序来判断里面是否还有线,如果一起选择的话,提取出来就会出错
页: [1]
查看完整版本: 关于多段线,线中线提取并按照格式输出到文本的问题,请各位大神解答!