找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 630|回复: 0

[曲线] (XD::Curve:Trim)直线边界裁剪曲线选择集

[复制链接]

已领礼包: 51个

财富等级: 招财进宝

发表于 2016-10-28 13:24:03 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::Curve:Trim
调用格式: (XD::Curve:Trim ss bound pt)
参数说明: ss ----- 曲线实体表、选择集
bound -------- 裁剪边界可以是直线实体,直线两点表,几何实体(kXLine,kLingSeg2d/3d)
pt -------------- 裁剪方向任意点
返回值: T
函数简介: 直线边界裁剪曲线选择集,裁剪边界可以是直线实体,直线两点表,几何实体(kXLine,kLingSeg2d/3d)
函数来源: 原创
函数作者: Lispboy
适用版本: XDRX API 
最后更新时间: 2016-10-28
备注: 裁剪边界可以是直线实体,直线两点表,几何实体(kXLine,kLingSeg2d/3d)
演示图片: -

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
(defun XD::Curve:Trim (ss bound pt / #direction #pointOnLine dis1 p1 p2 tf x xline)
  (if (= (type ss) 'PICKSET)
    (setq ss (xdrx_pickset->ents ss))
  )
  (cond
    ((= (type bound) 'LIST))
    ((= (type bound) 'ENAME)
      (if (setq tf (xdge::type bound))
        (progn
          (if (xdrx_string_regexps "kLine[2|3]d" tf)
            (progn
              (xdge::getpropertyvalue bound "pointOnLine" "direction")
              (setq bound (list #pointOnLine (mapcar
                                               '+
                                               #pointOnLine
                                               #direction
                                             )
                          )
              )
            )
            (setq bound (xdge::getpropertyvalue bound "hasstartpoint"
                                                "hasendpoint"
                        )
            )
          )
        )
        (setq bound (xdrx_getpropertyvalue bound "vertices"))
      )
    )
  )
  (setq p1 (car bound)
        p2 (cadr bound)
        xline (xdge::constructor "kLine3d" p1 p2)
  )
  (xdrx_setmark)
  (mapcar
    '(lambda (x)
       (apply
         'xdrx_curve_getsplitcurves
         (cons x (xdrx_entity_intersectwith x xline))
       )
     )
    ss
  )
  (setq ss (append
             ss
             (xdrx_pickset->ents (xdrx_getss))
           )
        dis1 (xdrx_point_dist2Line pt p1 p2)
  )
  (mapcar
    '(lambda (x)
       (if (> (* dis1 (xdrx_point_dist2line (xdrx_getpropertyvalue x "midpoint")
                                            p1 p2
                      )
              ) 0
           )
         (xdrx_entity_delete x)
       )
     )
    ss
  )
  (xdge::free xline)
  t
)


测试代码:

(defun c:tt()
   (if (and (setq ss (ssget '((0 . "*line,arc,circle,ellipse"))))
            (setq e (xdrx_entsel "\n拾取裁剪边界<退出>:" '((0 . "line"))))
            (setq pt (getpoint (xdrx_getpropertyvalue (car e) "midpoint") "\n裁剪方向<退出>:"))
      )
      (xd::curve:trim ss (car e) pt)
   )
   (princ)
)

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-27 13:01 , Processed in 0.345798 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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