明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: Gu_xl

[【Gu_xl】] 【Gu_xl】基于方位角计算的拓扑多边形自动构建快速算法

    [复制链接]
发表于 2016-11-1 16:58 | 显示全部楼层
万能的楼主啊,为何要设门槛呢
发表于 2016-11-1 17:14 | 显示全部楼层
还差好远啊,怎么办呢
发表于 2016-11-2 22:31 | 显示全部楼层
如果图中含封闭图形,必须炸开,才能选择
发表于 2017-8-8 12:28 | 显示全部楼层
G版主,太经典了,下载学习,我有个类似的问题需要解决。
发表于 2017-8-9 11:01 | 显示全部楼层

辅助函数复原

本帖最后由 chshsl 于 2017-8-9 11:17 编辑

经过2天的研究G大侠的代码及网盘函数库,复原了,所缺的几个函数,见大家都希望补全,现贴上。希望G大侠不要见怪。用法:1楼中的 辅助函数+8楼代码+本代码。
  1. ;命令: (gxl-massoc 10 (entget (car (entsel "选择多段线:")))) 选择多段线:((35846.5 18949.5)
  2. ;(36264.4 18956.0) (36617.2 18954.3))
  3. ;

  4. (defun gxl-massoc ( d li /  a  ls )
  5.         (setq ls '())
  6.         (while (assoc d li)
  7.                 (progn
  8.                         (setq  a (assoc d li))
  9.                         (setq ls (cons (list (cadr a) (caddr a)) ls))
  10.                         (setq li (xdlsp_list_remove li  a))
  11.                 )
  12.         )
  13.         (reverse ls)
  14. )

  15. (defun xdlsp_list_remove (el val)
  16.   (if (member val el)
  17.     (append
  18.       (reverse (cdr (member val (reverse el))))
  19.       (cdr (member val el))
  20.     )
  21.     el
  22.   )
  23. )

  24. ;输出50个空格
  25. ;(gxl-Str-Space 50) "                                                  "
  26. ;(gxl-Str-Space -1)
  27. (defun gxl-Str-Space ( d  /  a )
  28.     (setq a "")
  29.         (if (>  d 0)
  30.                 (repeat d
  31.                   (setq a (strcat a " " ))
  32.                  )
  33.         )
  34.         a
  35. )

  36. ;删除表中重复项
  37. (defun gxl-ListDumpAtom( l1 /  l2)
  38. (while(setq l2(cons(car l1)l2) l1(vl-remove(car l1)(cdr l1))))
  39. (reverse l2)
  40. )
  41. ;;主测试函数

  42. ;;;测试
  43. (defun c:mkpoly2 ()
  44.   ;;(setundoerr)
  45.   (princ "\n自动拓扑多边形测试!编制:Gu_xl 2010年8月")
  46.   (princ "\n选择线段:")
  47.   ;;;选择的线段必须已经做完打断预处理,请自行添加处理代码
  48.   ;(if (not jd) (setq jd 0.00001))
  49.   (setq jd 0.00001)
  50.   (setq ss (ssget '((0 . "line,arc"))))
  51.   (setq t1 (getvar "cdate"))
  52.   (setq ssl (GXL-SEL-SS->LIST ss))
  53.   (setq nod1 (gxl-ent->Nodes ssl jd))
  54.   (setq coordlist (gxl-ent->Coordinates  (car nod1)))
  55.   (setq touplist (gxl-Toupu-LineList coordlist))
  56.   (setq polylist (gxl-MakePolyList touplist coordlist  (cadr nod1)))
  57.   (setq polylist (gxl-dumpPolyTouPuList polylist))
  58.   (setq n 1)
  59.   (foreach poly polylist
  60.     (setq enlist (mapcar '(lambda (x) (nth (1- (abs x)) ssl)) poly)
  61.   enss (GXL-SEL-LIST->SS enlist)
  62.   )
  63.     (setq en (entlast))
  64.     (command "copy" enss "" '(0 0 0) '(0 0 0))
  65.     (setq enss (GXL-SEL-ENTNEXTALL en))
  66.     (command "pedit" (ssname enss 0) "y" "j" enss "" "")
  67.     (setq en (entlast))
  68.     (gxl-CH_Ent en 62 1)
  69.     (gxl-CH_Ent en 8 "多边形层")
  70.     )
  71.   (princ "\n总计 ")
  72.   (GXL-SYS-TIMEOUT t1)
  73.   (princ "\n共生成 ")
  74.   (princ (length polylist))
  75.   (princ " 个多边形!")
  76.   ;(reerr)
  77.   )
发表于 2017-8-12 13:17 | 显示全部楼层
大侠们,G版主的这个代码,在CAD2008 32位 win7 64位下可以运行,CAD2004 XP下不能运行。求帮助。
发表于 2017-9-19 17:10 | 显示全部楼层
过来学习学习。
发表于 2017-12-28 09:44 | 显示全部楼层
期待版主公布更多的源码!不太懂的版友们是要自己不断拿源码调试修改才能变成自己的。或者说这个就是模仿过程。我也知道大概的原理楼主已经公布了。对于不够精的版友来说,差一点不会就不会。差之毫厘失之千里。当然也尊重楼主的知识产权,如果不方便也非常能理解!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 10:47 , Processed in 0.397982 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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