明经CAD社区

 找回密码
 注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 1029|回复: 24

[提问] 我"被逼"做一次伸手党..求大师出手

[复制链接]
发表于 2017-10-13 20:41 | 显示全部楼层 |阅读模式
4明经币
本帖最后由 ysq101 于 2017-10-14 18:34 编辑

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












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






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

最佳答案

查看完整内容

既然染色一定是人工的,那么前边拓扑部分就由你自己的ARX来完成,毕竟ARX速度要快得多 然后人工染色 最后只需要写一个输出TXT的,如果对点号顺序没特别要求的话,其实很简单 图上好象是ucs坐标的,写出的是世界坐标,可能需要自行处理下 凹所在三角形(n-1点,n点,n+1点)的方向一定与多段线整体方向相反

点评

上dwg文件  发表于 2017-10-14 17:28
发表于 2017-10-13 20:41 | 显示全部楼层
本帖最后由 llsheng_73 于 2017-10-18 17:05 编辑
ysq101 发表于 2017-10-15 00:06
果然高手...基本正确..就是这个意思...

只是色彩是由人工改好后再生文本...

既然染色一定是人工的,那么前边拓扑部分就由你自己的ARX来完成,毕竟ARX速度要快得多
然后人工染色

最后只需要写一个输出TXT的,如果对点号顺序没特别要求的话,其实很简单
  1. (defun getcolor(e / c)
  2.   (if(setq e(entget e)c(assoc 62 e))
  3.     (cdr c)
  4.     (cdr(assoc 62(tblsearch"layer"(cdr(assoc 8 e)))))
  5.     ))
  6. (defun plinexy(e)
  7.   (mapcar'cdr(vl-remove-if'(lambda(x)(/=(car x)10))(entget e)))
  8.   )
  9. (defun Pldir(pt)
  10.   (<(apply'+(mapcar'(lambda(x y)(-(*(car x)(cadr y))(*(car y)(cadr x))))(cons(last pt)pt)pt))0))
  11. (defun c:tt(/ s f i e p pt txt c)
  12.   (if(and(setq s(ssget'((0 . "lwpolyline")(-4 . "&")(70 . 1))))
  13.   (setq s(vl-remove-if'(lambda(x)(/=(type x)'ename))(mapcar'cadr(ssnamex s)))
  14.         f(getfiled "" "" "txt" 1))
  15.   (setq txt""f(open f"w")))
  16.     (progn
  17.       (foreach e s
  18. (foreach i(if(pldir(setq p(plinexy e)))(setq p(reverse p))p)
  19.    (if(not(member i pt))(setq pt(append pt(list i))))
  20.    (setq txt(strcat(itoa(vl-position i pt))"\n"txt)))
  21. (setq c(getcolor e)
  22.        c(cadr(assoc c(append'((1" 0 0 0 0 0 0 276")
  23.        (2" 0 0 0 0 0 0 260")
  24.        (3" 0 0 0 0 0 0 400")
  25.        (4" 0 0 0 1 0 0 384")
  26.        (5" 0 0 0 3 0 0 384")
  27.        (6" 0 0 25 0 25 0 260")
  28.        (7" 0 0 0 2 0 0 384")
  29.        (8" 0 0 0 0 0 0 384")
  30.        (9" X X X 0 X X XXX"))
  31.        (list(list c(strcat" 0 0 0 0 0 0 "(itoa c)))))))
  32.        txt(strcat"\n"(itoa(length p))c"\n"txt)))
  33.       (setq txt(strcat"\n"(itoa(length s))"\n"txt)
  34.      i(length pt));;;;
  35.       (foreach p(reverse pt)
  36. (entmakex(mapcar'cons'(0 1 10 40 62)(list"text"(itoa i)p 0.3 1)));;;;
  37. (setq i(1- i)txt(strcat(rtos(car p)2 4)" "(rtos(cadr p)2 4)"\n"txt)))
  38.       (write-line(strcat(itoa(length pt))"\n\n"txt)f)
  39.       (close f))
  40.     ))

图上好象是ucs坐标的,写出的是世界坐标,可能需要自行处理下



凹所在三角形(n-1点,n点,n+1点)的方向一定与多段线整体方向相反

本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2017-10-14 11:34 | 显示全部楼层
手动置顶222222222222
回复

使用道具 举报

发表于 2017-10-14 14:14 | 显示全部楼层
需求看不懂
回复

使用道具 举报

 楼主| 发表于 2017-10-14 14:35 | 显示全部楼层

为了输出TXT
回复

使用道具 举报

 楼主| 发表于 2017-10-14 17:28 | 显示全部楼层
难道要我“重新出山”???
(话说这话不适当。。还没入门呢)
回复

使用道具 举报

 楼主| 发表于 2017-10-14 18:32 | 显示全部楼层
@xyp1964
原文件已上
回复

使用道具 举报

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

使用道具 举报

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

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

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

回答完毕
回复

使用道具 举报

发表于 2017-10-14 22:36 | 显示全部楼层
本帖最后由 llsheng_73 于 2017-10-14 22:41 编辑

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2018-5-23 13:12 , Processed in 0.385920 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2013 Comsenz Inc.

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