newer 发表于 2013-9-11 09:42:04

MAPGIS拓扑造区工具实现插件

**** Hidden Message *****

zhangq_cai1 发表于 2013-9-11 10:13:55

看看~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~··

renyong119 发表于 2013-9-11 12:50:55

有点激动,先测试

renyong119 发表于 2013-9-11 13:17:19

老大,我发的测试那张图还是不能拓扑造区

XDSoft 发表于 2013-9-11 13:20:22

renyong119 发表于 2013-9-11 13:17
老大,我发的测试那张图还是不能拓扑造区

不能造有什么提示? 只要你的图形是 曲线组成的,就可以。你截取个图贴上来说明下吧。

XDSoft 发表于 2013-9-11 13:21:36

renyong119 发表于 2013-9-11 13:17
老大,我发的测试那张图还是不能拓扑造区

对了,程序用了最新API提供的随机数函数,你下载了今天刚发布的0911版本的API了吗? 同时还要加载晓东通用LISP函数库。

renyong119 发表于 2013-9-11 13:38:09

已经可以了,已不要知道什么原因,拓扑不成功的时候会删除掉里面的线,有时候会填充一大片出来,我删除填充,发现里面的线被删除,

renyong119 发表于 2013-9-11 13:38:57

不过很感谢了老大了

zhangq_cai1 发表于 2013-9-11 13:47:51

如果只需要最大边界多边形,并填充为ANSI31样式怎么改?~~~~~~~~~~~~~~~~~~~~~··

renyong119 发表于 2013-9-11 14:15:41

测试了5张图,成功完美拓扑造区,就是对样条曲线拓扑造区有问题。

XDSoft 发表于 2013-9-11 15:06:46

renyong119 发表于 2013-9-11 13:38
已经可以了,已不要知道什么原因,拓扑不成功的时候会删除掉里面的线,有时候会填充一大片出来,我删除填充 ...

是的,不能构成封闭区域的线要删除。
对SPLINE,如果你想完美处理它,先用工具把SPLINE转换成PLINE模拟再做。

XDSoft 发表于 2013-9-11 15:11:22

zhangq_cai1 发表于 2013-9-11 13:47
如果只需要最大边界多边形,并填充为ANSI31样式怎么改?~~~~~~~~~~~~~~~~~~~~~··

程序里面有详细的注释,把删除最大变界那行去掉,把CDR的数据都删除掉,就是只保留最大边界了。

然后用:

(setq e(xdrx_hatch_make ent))生成SOLID填充,然后用

(xdrx_hatch_setPattern <hatch 实体名> <图案模式>) 设置填充模式
(xdrx_hatch_setScale <hatch实体名> <新的比例>)   修改比例

就可以实现你的要求了。你自己改改,测试好 贴上来,谢谢!

zhangq_cai1 发表于 2013-9-11 15:55:31

(defun c:Exhazardzoning (/ e ent entl ss x x1 x2)
(if (setq ss (ssget '((0 . "*line,arc,circle,ellipse"))))
    (progn
      (XD::Begin)
      (setq ss (xdrx_entity_explode ss);;炸开曲线
            ss (xdrx_pickset_removedupLine ss) ; 消除重线
            ss (xdrx_curve_intersectbreak ss);;交点打断
            ss (xdrx_geom_searchRegions ss 0);;拓扑多边形
            entl (xdrx_pickset->ents ss);;选择集转实体表
      )
      (if (> (length entl) 0)
      (progn
          (setq entl (mapcar;;查找最大边界多边形
                     '(lambda (x)
                        (cons (car (xdrx_getarea x)) x)
                        )
                     entl
                     )
                entl (vl-sort entl '(lambda (x1 x2)
                                    (> (car x1) (car x2))
                                    )
                     )
                entl (mapcar
                     'cdr
                     entl
                     )
          )
          (foreach e (cdr entl);;遍历多边形表,删除除最大边界多边形外其它图形
            (xdrx_entity_delete (cdr entl))
          )
           (setq ent (xdrx_hatch_make (car entl)))
         (xdrx_hatch_setPatternent"ANSI31");;生成"ANSI31"填充
         (xdrx_hatch_setScaleent(* 10 *bl));;填充比例 *bl为比例常量
          )
      )
      (XD::End)
    )
)
(princ)
)

zhangq_cai1 发表于 2013-9-11 16:07:45

能用(xdrx_geom_searchoutline )求最大边界吗?我把(xdrx_geom_searchRegions ss 0);;拓扑多边形换为(xdrx_geom_searchoutline ss 50)下面查找最大多边形等删了,没测试成功

XDSoft 发表于 2013-9-11 16:14:44

zhangq_cai1 发表于 2013-9-11 16:07
能用(xdrx_geom_searchoutline )求最大边界吗?我把(xdrx_geom_searchRegions ss 0);;拓扑多边形换为(xdrx_ ...

你上面贴的代码能完成你的要求了不? NEWER的程序把所有边界都给你求出 了,里面有排序,entl表里面,car 是最大的轮廓,其他是内部的拓扑多边形。你根据需要处理就行了。

xdrx_geom_searchOutline 是搜索块,HATCH,二维曲线组成的选择集的 最大外轮廓,只生成一个。

xdrx_geom_searchAllOutLine 搜索所有的外部轮廓,可多个。

页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: MAPGIS拓扑造区工具实现插件