明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 406|回复: 7

[资源] 沿线均布9点定位、定角集成《三领设计 V3.0 》

[复制链接]
发表于 2024-5-27 19:43 | 显示全部楼层 |阅读模式
本帖最后由 尘缘一生 于 2024-5-27 19:45 编辑

关于沿线均布,涉及不少东西,下面展示下《三领设计 v3.0》的现今集成-->
三领认为:关于沿线均布,如果不能准确定位和角度正确,就失去了开发的意义
下一步将来:三领将加定位开始点位往后定距-->OK
  1. ;;三领设计 V3.0 沿线均布9点定位---【开始】------
  2. ;by 尘缘一生  QQ:15290049
  3. (defun c:sl-alon-cure (/ ss lis nam)
  4.   (setq ss (ssget ":S"))
  5.   (setq lis (sl-ss-9pt-ang ss))
  6.   (sldis "均布间距" "间距=" "0" "12") ;取距离集成函数,返回sldis1全局变量,带有比例,自理即可
  7.   (setq nam (car (entsel "\n 请选择曲线:")))
  8.   (sl-along-cure (car lis) (cadr lis) (caddr lis) sldis1 nam)
  9. )
  10. ;选择集(9基点)沿线均布---(一级)-----
  11. ;ss 选择 p0 ss基点 ang0 ss初始角度 dis 间距 nam 曲线
  12. (defun sl-along-cure (ss p0 ang0 dis nam / pt ob p n m e ang)
  13.   (setq ob (en2obj nam) n 0 p (1+ (fix (/ (sllen nam) dis))) m (sslength ss)) ;SLLEN 曲线长度函数
  14.   (while (< n p)
  15.     (setq pt (vlax-curve-getPointAtDist ob (* dis n)))
  16.     (setq pt (vlax-curve-getClosestPointTo nam pt nil))
  17.     (if (> m 1)
  18.       (setq ang (+ (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv nam (vlax-curve-getparamatpoint nam pt))) pi2));切线的垂线角
  19.       (setq ang (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv nam (vlax-curve-getparamatpoint nam pt))));切线角
  20.     )
  21.     (aypercurve nam pt) ;此为曲线点位垂线辅助线
  22.     (setq e (entlast))
  23.     (command "copy" ss "" "_non" p0 "_non" pt)
  24.     (sl-ssrot (last_ent e) pt (- ang ang0))
  25.     (setq n (1+ n))
  26.   )
  27. )
  28. ;;曲线垂线 nam曲线实体名 p曲线上点---(一级)------
  29. (defun aypercurve (nam p / dd ang p1 p2)
  30.   (setq p (vlax-curve-getClosestPointTo nam p nil))
  31.   (setq dd (p2uu 50.0))
  32.   (setq ang (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv nam (vlax-curve-getparamatpoint nam p)))) ;切线
  33.   (setq p1 (polar p (+ ang pi2) dd))
  34.   (setq p2 (polar p (- ang pi2) dd))
  35.   (fy_lineformat (makeline p1 p2) "中心线" "CENTER" 0.4 6) ;画线函数
  36. )
  37. ;选择集ss 以基点p0 旋转ang(弧度)---(一级)-----
  38. ;(sl-rot (ssget) (getpoint) (* pi 0.25))
  39. (defun sl-ssrot (ss p0 ang / mat i o)
  40.   (setq mat (mat:rotation (trans p0 1 0) ang)) ;旋转矩阵,自理
  41.   (setq mat (vlax-tmatrix mat))
  42.   (repeat (setq i (sslength ss))
  43.     (setq o (en2obj (ssname ss (setq i (1- i)))))
  44.     (vla-transformby o mat)
  45.   )
  46.   ;(sl-wzgz ss) 《三领设计》集成之 "文字归正",可注销
  47.   (princ)
  48. )
  49. ;;当前视口取比例值-----(一级)-----
  50. (defun p2uu (pix)
  51.   (* pix (/ (getvar "VIEWSIZE") (cadr (getvar "SCREENSIZE"))))
  52. )
  53. ;;实体、选择集定9点、轴角度-----(一级)----
  54. ;;返回(ss p0 ang)
  55. (defun sl-ss-9pt-ang (ss / bb ms1 ms2 loop p0 plis p1 p2 p3 p4 p5 p6 p7 p8 p9 ang n i nam)
  56.   (setq plis (getpt ss))
  57.   (setq plis (graham-scan plis))
  58.   (if (or (< (length plis) 3) (and (>= (length plis) 3) (<= (det (car plis) (cadr plis) (caddr plis)) 0.0)))
  59.     (setq plis (reverse plis))
  60.   )
  61.   (setq
  62.     plis (car (minarearectangle plis)) ;高飞鸟求凸包,以下求9点位
  63.     p1 (car plis)
  64.     p3 (cadr plis)
  65.     p9 (caddr plis)
  66.     p7 (cadddr plis)
  67.     p2 (sl:mid p1 p3)
  68.     p4 (sl:mid p1 p7)
  69.     p6 (sl:mid p3 p9)
  70.     p8 (sl:mid p7 p9)
  71.     p5 (sl:mid p1 p9)
  72.   )
  73.   (if (> (distance p1 p2) (distance p2 p3))
  74.     (setq ang (angle p1 p2))
  75.     (setq ang (angle p2 p3))
  76.   )
  77.   (setq ang (angle-sharp ang)) ;角度转为1,4象限
  78.   (setq ms1 "\n->定位 [逆转90度(TAB)/左下(1)/下中(2)/右下(3)/左中(4)/正中(5)/右中(6)/左上(7)/上中(8)/右上(9)/取角(A)](左键、右键、空格>定位)")
  79.   (setq p0 p5)
  80.   (setq ms2 "-->当前<正中>")
  81.   (princ (strcat ms1 ms2))
  82.   (setq loop T)
  83.   (while loop
  84.     (redraw)
  85.     (slslx p0 0) ;交叉矢量线
  86.     (grdraw-drawjt p0 (polar p0 ang (p2uu 80.0))) ;箭头矢量
  87.     (setq bb (grread T 8))
  88.     (cond
  89.       ((or (= (car bb) 3) ;;左键
  90.          (= (car bb) 11)  ;;右键设置为回车时
  91.          (= (car bb) 25)  ;;右键设置为屏幕菜单时
  92.          (equal bb '(2 32))  ;;空格键
  93.        )
  94.         (setq loop nil)
  95.       )
  96.       ((member bb '((2 9)))      ;;table 键
  97.         (setq ang (+ ang pi2))
  98.       )
  99.       ((member bb '((2 65) (2 97)))  ;;A 旋转定角
  100.         (setq ang (angle p0 (getpoint p0 "\n 定角->:")))
  101.       )
  102.       ((equal bb '(2 49))  ;; 1键
  103.         (setq p0 p1 ms2 "当前<左下>")
  104.         (princ (strcat ms1 ms2))
  105.       )
  106.       ((equal bb '(2 50)) ;; 2键
  107.         (setq p0 p2 ms2 "当前<下中>")
  108.         (princ (strcat ms1 ms2))
  109.       )
  110.       ((equal bb '(2 51)) ;; 3键
  111.         (setq p0 p3 ms2 "当前<右下>")
  112.         (princ (strcat ms1 ms2))
  113.       )
  114.       ((equal bb '(2 52))  ;; 4键
  115.         (setq p0 p4 ms2 "当前<左中>")
  116.         (princ (strcat ms1 ms2))
  117.       )
  118.       ((equal bb '(2 53))  ;; 5键
  119.         (setq p0 p5 ms2 "当前<正中>")
  120.         (princ (strcat ms1 ms2))
  121.       )
  122.       ((equal bb '(2 54)) ;; 6键
  123.         (setq p0 p6 ms2 "当前<右中>")
  124.         (princ (strcat ms1 ms2))
  125.       )
  126.       ((equal bb '(2 55)) ;; 7键
  127.         (setq p0 p7 ms2 "当前<左上>")
  128.         (princ (strcat ms1 ms2))
  129.       )
  130.       ((equal bb '(2 56)) ;; 8键
  131.         (setq p0 p8 ms2 "当前<上中>")
  132.         (princ (strcat ms1 ms2))
  133.       )
  134.       ((equal bb '(2 57))  ;; 9键
  135.         (setq p0 p9 ms2 "当前<右上>")
  136.         (princ (strcat ms1 ms2))
  137.       )
  138.     )
  139.   )
  140.   (redraw)
  141.   (list ss p0 ang)
  142. )


《三领设计 V3.0》
链接:https://pan.baidu.com/s/1tr_aurX1en3clo4H0FlwNw
提取码:v1gl



本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 金钱 +10 收起 理由
tranque + 1 + 10 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-5-27 23:05 | 显示全部楼层
嗯,迷你的全能复制和沿线布块都可以做的完美。
发表于 2024-5-28 05:11 | 显示全部楼层
lxl217114 发表于 2024-5-27 23:05
嗯,迷你的全能复制和沿线布块都可以做的完美。

你好,请问你说的全能复制和沿线布块,都是迷你的功能吗
发表于 2024-5-28 07:23 | 显示全部楼层
weimeng555 发表于 2024-5-28 05:11
你好,请问你说的全能复制和沿线布块,都是迷你的功能吗

是的,没错。
 楼主| 发表于 2024-5-28 10:27 | 显示全部楼层



继续增加,定2点均布,并与阵列集成,
  1. ;;三领设计 V3.0 沿线均布9点定位---【开始】------
  2. ;by 尘缘一生  QQ:15290049
  3. ;;三领阵列----【开始】------
  4. (defun c:sl-arry ()
  5.   (sl-arry (ssget ":S"))
  6. )
  7. ;;选择集阵列----(一级)------
  8. (defun sl-arry (ss / aw k1 k2 k3 k4 k5 k6 e nam lis pts p1 p2 div)
  9.   (setq
  10.     k1 "直线阵列"
  11.     k2 "环形阵列"
  12.     k3 "二维阵列"
  13.     k4 " 沿线均布 "
  14.     k5 "2P定长均布"
  15.     k6 "2P定量均布"
  16.   )
  17.   (setq aw (sl:do1ordo6 "三领阵列,均布 V3.0" k1 k2 k3 k4 k5 k6))
  18.   (if (or (= aw k4) (= aw k5) (= aw k6))
  19.     (setq lis (sl-ss-9pt-ang ss))
  20.   )
  21.   (if (or (= aw k4) (= aw k5))
  22.     (sldis "均布间距" "间距=" "0" "12")
  23.   )
  24.   (cond
  25.     ((= aw k1)
  26.       (lin-arr ss)
  27.     )
  28.     ((= aw k2)
  29.       (setq e (entlast))
  30.       (cir-arr ss)
  31.       (sl-wzgz (last_ent e))
  32.     )
  33.     ((= aw k3)
  34.       (sed-arr ss)
  35.     )
  36.     ((= aw k4)
  37.       (setq nam (car (entsel "\n 请选择曲线:")))
  38.       (sl-along-cure (car lis) (cadr lis) (caddr lis) sldis1 nam)
  39.     )
  40.     ((or (= aw k5) (= aw k6))
  41.       (setq nam (car (entsel "\n 请选择曲线:")))
  42.       (setq p1 (getpoint "\n 请输入起点:")
  43.         p2 (getpoint p1 "\n 请输入终点:")
  44.       )
  45.       (if (= aw k5)
  46.         (setq pts (sl:DivdeCurve nam p1 p2 nil sldis1))
  47.         (setq div (atoi (inputbox "等分数" "?等分 " "2" "35"))
  48.           pts (sl:DivdeCurve nam p1 p2 t div)
  49.         )
  50.       )
  51.       (sl-along-2p-cure (car lis) (cadr lis) (caddr lis) pts nam)
  52.     )
  53.   )
  54. )
  55. ;;等分曲线,返回点坐标(包含端点)----(一级)----
  56. ;;Curve = 曲线图元名 p1曲线上第一点 p2曲线上第二点
  57. ;;Flag = T 定数等分曲线 nil 定长等分曲线
  58. ;;n = 当 Flag = T 时 n 为等分数,当Flag = nil 时 n 为等分长度
  59. ;;(sl:DivdeCurve (car (entsel "\n选择曲线:")) (getpoint "\n 起点:") (getpoint "\n 终点:") T 5)
  60. ;;((2970.68 2531.75 0.0) (2975.88 2539.01 0.0) (2981.07 2546.27 0.0) (2986.26 2553.53 0.0) (2991.45 2560.79 0.0) (2996.64 2568.05 0.0))
  61. (defun sl:DivdeCurve (curve p1 p2 flag n / d1 d2 d d0 pts)
  62.   (setq
  63.     p1 (vlax-curve-getclosestpointto Curve p1)
  64.     d1 (vlax-curve-getDistAtPoint Curve p1)
  65.     p2 (vlax-curve-getclosestpointto Curve p2)
  66.     d2 (vlax-curve-getDistAtPoint Curve p2)
  67.   )
  68.   (if Flag
  69.     (setq d (/ (- d2 d1) n))
  70.     (setq d (if (minusp (- d2 d1)) (* -1.0 n) n))
  71.   )
  72.   (setq d0 d1)
  73.   (setq pts (cons p1 pts))
  74.   (if (> d2 d1)
  75.     (while (apply '< (list (setq d0 (+ d0 d)) d2))
  76.       (setq pts (cons (vlax-curve-getPointAtDist curve d0) pts))
  77.     )
  78.     (while (apply '> (list (setq d0 (+ d0 d)) d2))
  79.       (setq pts (cons (vlax-curve-getPointAtDist curve d0) pts))
  80.     )
  81.   )
  82.   (setq pts (gps->lst-delsame (cons p2 pts)))
  83.   (reverse pts)
  84. )
  85. ;;六键开关---------(一级)-------
  86. ;;调用形式 (sl:do1ordo6  dname:对话框名称  tog1:开关1 ...)
  87. ;;返回 tog1 tog2 tog3 tog4 tog5 tog6--字符串
  88. ;;(setq aw (sl:do1ordo6 (slmsg "三领阵列,均布 V3.0" "烩皚 V3.0" "sldesign array V3.0") k1 k2 k3 k4 k5 k6))
  89. (defun sl:do1ordo6 (dname tog1 tog2 tog3 tog4 tog5 tog6 / dcl_id str)
  90.   (defun do1do4-dcl (/ lst_str)
  91.     (setq lst_str
  92.       (list
  93.         "num_1_2:dialog"
  94.         "{"
  95.         (strcat "label = "" dname """ ";")
  96.         "initial_focus = tile1;"
  97.         $boxed_column
  98.         $row
  99.         ":button {"
  100.         (strcat "label = "" tog1 """ ";")
  101.         "key = "tile1" ;"
  102.         "}"
  103.         ":button {"
  104.         (strcat "label = "" tog2 """ ";")
  105.         "key = "tile2" ;"
  106.         "}"
  107.         ":button {"
  108.         (strcat "label = "" tog3 """ ";")
  109.         "key = "tile3" ;"
  110.         "}"
  111.         "}"
  112.         ":tile {}"
  113.         $row
  114.         ":button {"
  115.         (strcat "label = "" tog4 """ ";")
  116.         "key = "tile4" ;"
  117.         "}"
  118.         ":button {"
  119.         (strcat "label = "" tog5 """ ";")
  120.         "key = "tile5" ;"
  121.         "}"
  122.         ":button {"
  123.         (strcat "label = "" tog6 """ ";")
  124.         "key = "tile6" ;"
  125.         "}}}"
  126.         $row
  127.         $canbt
  128.         "fixed_width = true;"
  129.         "alignment = centered;"
  130.         "}}"
  131.       )
  132.     )
  133.     (dcl2lisp lst_str)
  134.   )
  135.   ;;---------------------------------
  136.   (setq dcl_id (load_dialog (do1do4-dcl)))
  137.   (new_dialog "num_1_2" dcl_id)
  138.   (set_tile "tile1" "1")
  139.   (action_tile "tile1" "(setq str tog1) (done_dialog 1)")
  140.   (action_tile "tile2" "(setq str tog2) (done_dialog 1)")
  141.   (action_tile "tile3" "(setq str tog3) (done_dialog 1)")
  142.   (action_tile "tile4" "(setq str tog4) (done_dialog 1)")
  143.   (action_tile "tile5" "(setq str tog5) (done_dialog 1)")
  144.   (action_tile "tile6" "(setq str tog6) (done_dialog 1)")
  145.   (action_tile "cancel" "(setq str "") (done_dialog 0)")
  146.   (start_dialog)
  147.   (slunloaddcl dcl_id)
  148.   str
  149. )
  150. ;选择集(9基点)沿线点集均布---(一级)-----
  151. ;ss 选择 p0 ss基点 ang0 ss初始角度 pts 曲线点集 nam 曲线
  152. (defun sl-along-2p-cure (ss p0 ang0 pts nam / pt ob p n m e ang)
  153.   (setq ob (en2obj nam) m (sslength ss))
  154.   (while pts
  155.     (setq pt (car pts))
  156.     (if (> m 1)
  157.       (setq ang (+ (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv nam (vlax-curve-getparamatpoint nam pt))) pi2));切线的垂线角
  158.       (setq ang (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv nam (vlax-curve-getparamatpoint nam pt))));切线角
  159.     )
  160.     (aypercurve nam pt) ;此为曲线点位垂线辅助线
  161.     (setq e (entlast))
  162.     (command "copy" ss "" "_non" p0 "_non" pt)
  163.     (sl-ssrot (last_ent e) pt (- ang ang0))
  164.     (setq pts (cdr pts))
  165.   )
  166. )


本帖子中包含更多资源

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

x
发表于 2024-5-28 15:54 | 显示全部楼层

好的,谢谢回帖,回头有空了,也尝试一手
发表于 2024-5-28 15:54 | 显示全部楼层
很好→很棒!很好~很棒!!很好……很棒!!!
发表于 2024-5-28 15:56 | 显示全部楼层
CAD直接沿路径列阵就干了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-26 20:02 , Processed in 0.192979 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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