我"被逼"做一次伸手党..求大师出手
本帖最后由 ysq101 于 2017-10-14 18:34 编辑我本来就是菜鸟一个,然而又3年多没碰过LISP了现在竟然一些基本的函数的忘记得七七八八了.
所以直接做一次伸手党
求大神们帮帮忙...
在此拜谢了~~~
程序要求如下:
1,拓朴出以上各区域并标好区域号(只需要数字)
2,输出全部交点(顶点)的个数及座标点
3,输出每个多边形(区域)的颜色 信息
本帖最后由 llsheng_73 于 2017-10-18 17:05 编辑
ysq101 发表于 2017-10-15 00:06
果然高手...基本正确..就是这个意思...
只是色彩是由人工改好后再生文本...
既然染色一定是人工的,那么前边拓扑部分就由你自己的ARX来完成,毕竟ARX速度要快得多
然后人工染色
最后只需要写一个输出TXT的,如果对点号顺序没特别要求的话,其实很简单
(defun getcolor(e / c)
(if(setq e(entget e)c(assoc 62 e))
(cdr c)
(cdr(assoc 62(tblsearch"layer"(cdr(assoc 8 e)))))
))
(defun plinexy(e)
(mapcar'cdr(vl-remove-if'(lambda(x)(/=(car x)10))(entget e)))
)
(defun Pldir(pt)
(<(apply'+(mapcar'(lambda(x y)(-(*(car x)(cadr y))(*(car y)(cadr x))))(cons(last pt)pt)pt))0))
(defun c:tt(/ s f i e p pt txt c)
(if(and(setq s(ssget'((0 . "lwpolyline")(-4 . "&")(70 . 1))))
(setq s(vl-remove-if'(lambda(x)(/=(type x)'ename))(mapcar'cadr(ssnamex s)))
f(getfiled "" "" "txt" 1))
(setq txt""f(open f"w")))
(progn
(foreach e s
(foreach i(if(pldir(setq p(plinexy e)))(setq p(reverse p))p)
(if(not(member i pt))(setq pt(append pt(list i))))
(setq txt(strcat(itoa(vl-position i pt))"\n"txt)))
(setq c(getcolor e)
c(cadr(assoc c(append'((1" 0 0 0 0 0 0 276")
(2" 0 0 0 0 0 0 260")
(3" 0 0 0 0 0 0 400")
(4" 0 0 0 1 0 0 384")
(5" 0 0 0 3 0 0 384")
(6" 0 0 25 0 25 0 260")
(7" 0 0 0 2 0 0 384")
(8" 0 0 0 0 0 0 384")
(9" X X X 0 X X XXX"))
(list(list c(strcat" 0 0 0 0 0 0 "(itoa c)))))))
txt(strcat"\n"(itoa(length p))c"\n"txt)))
(setq txt(strcat"\n"(itoa(length s))"\n"txt)
i(length pt));;;;
(foreach p(reverse pt)
(entmakex(mapcar'cons'(0 1 10 40 62)(list"text"(itoa i)p 0.3 1)));;;;
(setq i(1- i)txt(strcat(rtos(car p)2 4)" "(rtos(cadr p)2 4)"\n"txt)))
(write-line(strcat(itoa(length pt))"\n\n"txt)f)
(close f))
))
图上好象是ucs坐标的,写出的是世界坐标,可能需要自行处理下
凹所在三角形(n-1点,n点,n+1点)的方向一定与多段线整体方向相反
手动置顶222222222222 需求看不懂 革天明 发表于 2017-10-14 14:14
需求看不懂
为了输出TXT 难道要我“重新出山”???
(话说这话不适当。。还没入门呢);P
@xyp1964
原文件已上 原始图有限制条件吗,比如: 各直线一定是横平竖直?小正方形一定是水平居中和垂直居中的?总的点数一定是8个点?区域是如何决定的?颜色是如何决定的?楼主整合的功能和要求比较多,而条件感觉没完全讲清楚。 vectra 发表于 2017-10-14 19:33
原始图有限制条件吗,比如: 各直线一定是横平竖直?小正方形一定是水平居中和垂直居中的?总的点数一定是8 ...
各直线不一定是横平竖直(大多数是斜线)
形状大小不一定相同...多为四边形和三角形
点的个数也有1000个左右
颜色是手动改成需要的颜色
所为区域..也全都是拓朴出来的闭合多线段
最终目的是为了输出那些 数字代码
回答完毕 本帖最后由 llsheng_73 于 2017-10-14 22:41 编辑
拓扑比较麻烦,颜色那也没看懂具体要求
假定已经拓扑好了,输出文本还是比较简单
所有拓扑出来的区域(闭合多段线)的顶点坐标(去重处理)取出来放入一个列表,
然后输出这个表的个数以及每个点的坐标
每个区域按的坐标按顺时针方向排列,然后每个点在总表中找它所在位置+1(点号)
其它没说的都不是事了
最麻烦的还是拓扑问题
可以参考G版的拓扑处理或者用他的ARX里边的拓扑命令TOPU来完成