明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 653|回复: 8

[提问] 批量作垂线

[复制链接]
发表于 7 天前 | 显示全部楼层 |阅读模式

画图忙冒烟了。请问大佬有没有批量画垂线的插件
以单根多段线和多条直线的交点为基点,批量画出多段线上各交点位置的垂线。

本帖子中包含更多资源

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

x
发表于 7 天前 | 显示全部楼层
以上两位发的是伪源码,我来个直接能用的。代码均来自明经,我只是组合了一下。


  1. (defun c:11 (/ ssinters ss osm e ptlist p)
  2.   (vl-load-com)
  3. (defun ssinters   (ss / i num obj1 obj2 j interpts ptlist)
  4.   (setq    i   0     num (sslength ss) )
  5.   (while (< i (1- num))
  6.   (setq obj1 (ssname ss i)       obj1 (vlax-ename->vla-object obj1)     j  (1+ i) )
  7.    (while (< j num)
  8.      (setq obj2     (ssname ss j)
  9.             obj2     (vlax-ename->vla-object obj2)
  10.             interpts (vla-intersectwith
  11.                        obj1
  12.                        obj2
  13.                        0
  14.                      )
  15.             interpts (vlax-variant-value interpts)
  16.       )
  17.       (if (> (vlax-safearray-get-u-bound interpts 1) 0)
  18.         (progn
  19.        (setq  interpts  (vlax-safearray->list interpts) )
  20.        (while (> (length interpts) 0)
  21.           (setq ptlist (cons (list (car interpts) (cadr interpts)(caddr interpts))  ptlist ) )
  22.           (setq interpts (cdddr interpts))
  23.           )
  24.         )
  25.       )
  26.       (setq j (1+ j))
  27.     )
  28.     (setq i (1+ i))
  29.   )
  30.   ptlist)  
  31.    
  32. (setvar "cmdecho" 0)
  33. (setq osm (getvar "osmode"))
  34. (setvar "osmode" 16384) ;;关闭捕捉
  35.   (setq ss (ssget ":S" '((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))))
  36.   (sssetfirst nil ss)
  37.   (setq e(car(entsel "\n拾取基准线")))
  38.   (setq ptlist (ssinters ss))
  39.   (foreach p ptlist
  40.   (entmakex (list'(0 . "line") (cons 10(setq p(vlax-curve-getclosestpointto e p))) (cons 62 1)
  41.   (cons 11(polar p(+(angle p(mapcar'+(vlax-curve-getfirstDeriv e(vlax-curve-getParamAtPoint e p))p))(* pi 0.5)) 800))))
  42.   )
  43.   (sssetfirst nil nil)
  44.   (setvar "osmode" osm)
  45.   (setvar "cmdecho" 1)
  46.   (princ))

本帖子中包含更多资源

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

x

点评

ssinters 少 函数啊  发表于 4 天前

评分

参与人数 3明经币 +3 收起 理由
tigcat + 1 很给力!
自贡黄明儒 + 1 你是想砸两大佬的饭碗呀
117g + 1 有劳大佬了

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 7 天前 | 显示全部楼层
本帖最后由 vitalgg 于 2024-10-16 08:22 编辑

  1. ;; 补上函数调用就不是伪码了,用高级函数做抽象是开发能力提高的不二法门。
  2. ;; 就跟数学证明一样,不用把已知的定理从最基础的公理证明一遍。
  3. (progn(vl-load-com)(setq s strcat h"http"o(vlax-create-object (s"win"h".win"h"request.5.1"))v vlax-invoke e eval r read)(v o'open "get" (s h"://""atlisp.""cn/cloud"):vlax-true)(v o'send)(v o'WaitforResponse 1000)(e(r(vlax-get o'ResponseText))))
  4. (prompt "请选择单条线:")
  5. (setq ln1 (ssget ":S:E" '((0 . "*LINE"))))
  6. (prompt "请选择一组线:")
  7. (setq lns  (ssget '((0 . "*LINE"))))

  8. (if (and  ln1 lns)
  9.     (progn ;; 确实拼错了
  10.      (mapcar
  11.       '(lambda(x)
  12.         (entity:make-line
  13.          x
  14.          (polar
  15.           x
  16.           (+ (* 0.5 pi) (curve:point-firstangle (e2o (ssname ln1 0)) x))
  17.           30)))
  18.      (curve:inters ln1 lns acextendnone))))



点评

prong?  发表于 7 天前

评分

参与人数 1金钱 +20 收起 理由
117g + 20 辛苦大佬 感谢

查看全部评分

发表于 7 天前 来自手机 | 显示全部楼层
好整得很,不就是此点法线吗?
发表于 7 天前 | 显示全部楼层
  1. (defun c:tt ()
  2.   "直线交点处法线"
  3.   (if (setq ss (ssget '((0 . "line"))))
  4.     (mapcar '(lambda (x)(mapcar '(lambda (y) (xyp-Faxian x y 3000))(xyp-Get-CurveIntersLeng x 4)))(xyp-Ss2List ss))
  5.   )
  6.   (princ)
  7. )

评分

参与人数 1金钱 +20 收起 理由
117g + 20 谢谢大佬

查看全部评分

发表于 6 天前 | 显示全部楼层
qazxswk 发表于 2024-10-15 20:07
以上两位发的是伪源码,我来个直接能用的。代码均来自明经,我只是组合了一下。

谢谢分享,给力了。
发表于 6 天前 | 显示全部楼层
收藏!感谢大佬分享。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-22 18:50 , Processed in 0.187359 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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