明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1631|回复: 4

多段线生成临时偏移线,然后阳角进行连线

[复制链接]
发表于 2024-5-11 14:41:36 | 显示全部楼层 |阅读模式
5明经币
本帖最后由 weimeng555 于 2024-5-11 20:04 编辑

如附件测试图纸思路,麻烦各位路过大佬出手。感激不尽

附件: 您需要 登录 才可以下载或查看,没有账号?注册
发表于 2024-5-12 19:13:50 | 显示全部楼层
本帖最后由 czb203 于 2024-5-12 19:21 编辑

  1. (defun c:tt (/ c:tt dist en en1 getplinepts lst-remove-dups p1 p2 p3 p4 pt ptlst ptlst1 xd_convex_hull xd_convex_hull_sort_an xdl-sort xj-getlwpt)
  2. (vl-load-com)
  3. (defun XDL-SORT(lst sortlst / n)
  4.   (if (listp sortlst)
  5.     (if (listp (car sortlst))
  6.       (setq sortlst (reverse sortlst))
  7.       (setq sortlst (list sortlst))
  8.     )
  9.     (setq sortlst (list (list nil sortlst)))
  10.   )
  11.   (foreach n sortlst
  12.     (setq lst (vl-sort lst '(lambda (s1 s2)
  13.          (apply (cadr n) (list (if (car n) (nth  (car n) s1)s1)
  14.           (if (car n) (nth  (car n) s2)s2))))))
  15.     )
  16.   )
  17. (defun lst-remove-dups(pts fuzz / pt x)
  18. (cond ((=(length pts)1) pts)
  19.        (t(setq pt(car pts))
  20.          (cons pt(vl-remove-if '(lambda(x)(equal pt x fuzz))
  21.                (lst-remove-dups(cdr pts)fuzz))
  22.          )
  23.      ))
  24. )
  25. (defun XD_convex_hull_sort_an(pt an ls / re)
  26.   (setq re (mapcar '(lambda(x) (list (rem (+ (* 2 pi)(- (angle pt x) an))(* 2 pi))(distance pt x) x)) ls))
  27.     (setq re (XDL-SORT re '((0 <)(1 >))))
  28.   (last(car re))
  29. )
  30. (defun XD_convex_hull (lst / re tblst AN BG RESULT)
  31.   (setq lst (lst-remove-dups lst 0))
  32.   (setq lst (XDL-SORT lst '((0 <)(1 <))));;按XY增排序
  33.   (setq bg (car lst)
  34. an (/ pi -2)
  35.   )
  36.   (setq tblst (list bg))
  37.   (while
  38.     (and (> (length lst) 2)
  39.   (not (and (> (length tblst) 1) (= (car tblst) (last tblst)))
  40.   )
  41.     )
  42.      (setq result (XD_convex_hull_sort_an (car tblst) an (vl-remove (car tblst) lst)))
  43.      (setq an (angle (car tblst) result))
  44.      (setq tblst (cons result tblst))
  45.   )
  46.   tblst
  47. )
  48. (defun GetPlinePts( name / ents pts)
  49.   (setq ents (entget name))
  50.   (while (setq ents (member (assoc 10 ents) ents))
  51.     (setq pts (append pts (list (cdar ents))))
  52.     (setq ents (cdr ents))
  53.   )
  54.   pts
  55. )
  56.   (defun xj-getlwpt (enn / ent lst)
  57.     (setq ent (entget enn))
  58.     (setq lst (list))
  59.     (foreach x ent (if (= (car x) 10) (setq lst (cons (cdr x) lst))))
  60.     lst
  61.   )
  62.   (setq dist (getdist
  63.                (strcat
  64.                  "\n输入偏移距离:<"
  65.                  (rtos (getvar "OFFSETDIST"))
  66.                  ">"
  67.                )
  68.              )
  69.   )
  70.   (if (null dist)
  71.     (setq dist (getvar "offsetdist"))
  72.     (setvar "offsetdist" dist)
  73.   )
  74.   (setq en    (car (entsel "\n请选择线:"))
  75.         ptlst (xj-getlwpt en)
  76.                 ptlst (XD_convex_hull ptlst)
  77.   )
  78.   (command "offset" dist en pause "")
  79.   (setq en1    (entlast)
  80.         ptlst1 (xj-getlwpt en1)
  81.                     ptlst1 (XD_convex_hull ptlst1)
  82.   )
  83.   (if (> (length ptlst) 2)
  84.     (progn
  85.       (setq ptlst  (cdr (reverse (cdr (reverse ptlst))))
  86.             ptlst1 (cdr (reverse (cdr (reverse ptlst1))))
  87.       )
  88.       (mapcar '(lambda (x y) (entmake (list '(0 . "LINE") (cons 10 x) (cons 11 y)))) ptlst ptlst1)
  89.     )
  90.   )
  91.   (entdel en1)
  92.   (princ)
  93. )
回复

使用道具 举报

发表于 2024-5-13 08:22:16 | 显示全部楼层
好像第一个点间没连线吧?
回复

使用道具 举报

发表于 2024-5-19 02:34:14 来自手机 | 显示全部楼层
这个比较简单,我写过ARX版的
回复

使用道具 举报

 楼主| 发表于 2024-5-19 16:04:45 | 显示全部楼层
bai2000 发表于 2024-5-13 08:22
好像第一个点间没连线吧?

这里测试图,确实是漏掉了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-5 02:42 , Processed in 0.308826 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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