明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1277|回复: 5

[函数] 生成相交线的外轮廓和闭合图元

  [复制链接]
发表于 2022-5-9 22:04 | 显示全部楼层 |阅读模式
本帖最后由 guosheyang 于 2022-6-17 18:09 编辑

    借用三维命令将多个相交线生成外轮廓和封闭图元,,2017CAD测试通过  ,建议高版本测试,有问题请反馈。
;借用三维命令将多个相交线生成外轮廓和封闭图元(样条线 多段线 直线 圆 椭圆 圆弧 椭圆弧均适用)
;参数:ss 需要生成外轮廓和封闭图元的相交曲线选择集         
;注意:spl线不能自相交,对封闭嵌套曲线生成的嵌套面域未做处理
;(ygs_outline_bo(ssget))
(defun ygs_outline_bo(ss / JX PT SJD SS1 SZ UN_SURF YSD YXD ZSD ZXD ZXYS)
  (setvar 'cmdecho 0)
  (setvar 'delobj 3)
  (setq zxys(LM:ssboundingbox ss)
        zxd(list(-(car (car zxys))100)(-(cadr (car zxys))100)0)
        ysd(list(+(car (cadr zxys))100)(+(cadr (cadr zxys))100)0)
        zsd(list(car zxd)(cadr ysd)0)
        yxd(list(car ysd)(cadr zxd)0)
        sjd(list zxd yxd ysd zsd));四角点
(setq ss1(ssget "WP" sjd '((0 . "LWPOLYLINE,POLYLINE"))))
(vl-cmdf "qaflags" 1 ".explode" ss1 """qaflags" 0);炸开多段线
(setq ss(ssget "WP" sjd )
       sz(getvar 'surfacemodelingmode))
(if(= sz 1)
    (command "_.extrude""MO""SU" ss "" 2 """"
            "_.union" (ssget "A" '((0 . "NURBSURFACE"))) "")
    (command "_.extrude""MO""SU" ss "" 2 """"
           "_.union" (ssget "A" '((0 . "EXTRUDEDSURFACE"))) "")
)
(setq un_surf(entlast))
(entmakex(append (list '(0 . "LWPOLYLINE")
                          '(100 . "AcDbEntity")
                          '(100 . "AcDbPolyline")
                          '(62 . 0)
                          (cons 90 (length sjd))
                          (cons 70 1)
                   )
                   (mapcar '(lambda (pt) (cons 10 pt)) sjd)
         )
)
(command "_.REGION"
         (setq jx(entlast))
        ""
        "_.intersect"
           (entlast)
           un_surf
        ""
   "_.erase" ss ""
)
; (entdel jx)
  (setq ss(ssget "WP" sjd ))
  (command "region" ss ""
           "_vscurrent" "C")
  (princ)
)
;选择集包围盒 -Lee Mac
(defun LM:ssboundingbox(sel / idxllp ls1 ls2 obj urp)
    (repeat (setq idx(sslength sel))
        (setq obj (vlax-ename->vla-object(ssname sel(setq idx (1- idx)))))
        (if (and (vlax-method-applicable-p obj 'getboundingbox)
                 (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list obj 'llp 'urp))))
            )
            (setq ls1 (cons (vlax-safearray->list llp) ls1)
                  ls2 (cons (vlax-safearray->list urp) ls2)
            )
        )
    )
    (if (and ls1 ls2)
        (mapcar '(lambda ( a b ) (apply 'mapcar (cons a b))) '(min max) (list ls1 ls2))
    )
)


评分

参与人数 1明经币 +1 收起 理由
tigcat + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-5-10 09:20 | 显示全部楼层
谢谢大神分享,厉害厉害
发表于 2022-5-10 16:25 | 显示全部楼层
历害了,谢谢
发表于 2022-6-10 15:49 | 显示全部楼层
谢谢大神分享,厉害厉害
发表于 2022-9-1 02:01 | 显示全部楼层
用不了,——,———
 楼主| 发表于 2022-9-1 07:40 | 显示全部楼层
LYC688 发表于 2022-9-1 02:01
用不了,——,———

你的CAD版本是多少?低了不行的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-28 03:39 , Processed in 0.272239 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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