ysq101 发表于 2017-10-13 20:41:11

我"被逼"做一次伸手党..求大师出手

本帖最后由 ysq101 于 2017-10-14 18:34 编辑

我本来就是菜鸟一个,然而又3年多没碰过LISP了现在竟然一些基本的函数的忘记得七七八八了.
所以直接做一次伸手党
求大神们帮帮忙...
在此拜谢了~~~












程序要求如下:
1,拓朴出以上各区域并标好区域号(只需要数字)
2,输出全部交点(顶点)的个数及座标点
3,输出每个多边形(区域)的颜色 信息






llsheng_73 发表于 2017-10-13 20:41:12

本帖最后由 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点)的方向一定与多段线整体方向相反

ysq101 发表于 2017-10-14 11:34:56

手动置顶222222222222

革天明 发表于 2017-10-14 14:14:08

需求看不懂

ysq101 发表于 2017-10-14 14:35:29

革天明 发表于 2017-10-14 14:14
需求看不懂

为了输出TXT

ysq101 发表于 2017-10-14 17:28:39

难道要我“重新出山”???
(话说这话不适当。。还没入门呢);P

ysq101 发表于 2017-10-14 18:32:38

@xyp1964
原文件已上

vectra 发表于 2017-10-14 19:33:26

原始图有限制条件吗,比如: 各直线一定是横平竖直?小正方形一定是水平居中和垂直居中的?总的点数一定是8个点?区域是如何决定的?颜色是如何决定的?楼主整合的功能和要求比较多,而条件感觉没完全讲清楚。

ysq101 发表于 2017-10-14 21:40:12

vectra 发表于 2017-10-14 19:33
原始图有限制条件吗,比如: 各直线一定是横平竖直?小正方形一定是水平居中和垂直居中的?总的点数一定是8 ...

各直线不一定是横平竖直(大多数是斜线)
形状大小不一定相同...多为四边形和三角形
点的个数也有1000个左右
颜色是手动改成需要的颜色
所为区域..也全都是拓朴出来的闭合多线段

最终目的是为了输出那些   数字代码

回答完毕

llsheng_73 发表于 2017-10-14 22:36:04

本帖最后由 llsheng_73 于 2017-10-14 22:41 编辑

拓扑比较麻烦,颜色那也没看懂具体要求

假定已经拓扑好了,输出文本还是比较简单
所有拓扑出来的区域(闭合多段线)的顶点坐标(去重处理)取出来放入一个列表,
然后输出这个表的个数以及每个点的坐标
每个区域按的坐标按顺时针方向排列,然后每个点在总表中找它所在位置+1(点号)
其它没说的都不是事了
最麻烦的还是拓扑问题
可以参考G版的拓扑处理或者用他的ARX里边的拓扑命令TOPU来完成
页: [1] 2 3
查看完整版本: 我"被逼"做一次伸手党..求大师出手