找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1150|回复: 12

[编程申请] 类似xdrx_curve_extend的剪切功能

[复制链接]

已领礼包: 8612个

财富等级: 富甲天下

发表于 2016-10-24 22:59:04 | 显示全部楼层 |阅读模式

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

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

×
xdrx_curve_extend实在是太好用了,能够一次延伸一组曲线到指定点,可惜没有一个类似的剪切程序,xdrx_curve_trim与它并不是对应的。各位大神能否写一个不用trim命令的程序,一次将一组曲线的指定侧部分截掉。用法如下:(func ss p0 pt),p0是边界点,pt是指定侧的任意点,用来判断截去的部分。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-25 00:02:37 | 显示全部楼层
裁剪的参数应该是个边界,不能是一个点

裁剪边界你希望是直线?

另外,下面这个图形,如果点到圆外面,你希望得到的图形是什么?

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

使用道具 举报

已领礼包: 6545个

财富等级: 富甲天下

发表于 2016-10-25 00:13:26 | 显示全部楼层
谢谢提供,学习一下了!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2016-10-25 11:43:04 | 显示全部楼层
写个函数,试试,裁剪边界可以是直线实体,直线两点表,几何实体(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)
)

评分

参与人数 1D豆 +5 收起 理由
liuyj + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

使用道具 举报

已领礼包: 8612个

财富等级: 富甲天下

 楼主| 发表于 2016-10-26 00:33:13 | 显示全部楼层
xdrx_curve_extend不也可以只用一个点做延伸到的位置吗?我理解应该是这个点和点距曲线或延长线的最近点组成的点表作为边界,这样就可以用lispboy的函数了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-26 00:51:57 | 显示全部楼层

延伸可以假定,因为延伸,曲线的方向是固定轨迹的,可以用一个点和这个轨迹垂直,求得延伸到的点。

而边界不行, 边界只给一个点,怎么假定边界的第二点呢? 总平行或者垂直X轴吗?你要是个斜的边界怎么办?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8612个

财富等级: 富甲天下

 楼主| 发表于 2016-10-26 10:57:09 | 显示全部楼层
其实我要求的不含封闭曲线,如果点在曲线上,很简单,如果点不在曲线上,将点和到曲线的最近点组成点表,但是不绘出边界曲线。换个说法,就是将曲线的指定侧的端点延伸或缩短到指定的位置
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-26 11:04:06 | 显示全部楼层

你是要裁剪一根吗?

下面这个图,要裁剪那些白色线, 你只给一点,怎么能确定裁掉他们呢?

QQ截图20161026110202.png


LISPBOY的函数够通用了,你要是想按你的一点p1,可以根据你的图形,计算一个第二点p2给函数就行了

(xd::curve:trim ss (list p1 p2) pt)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8612个

财富等级: 富甲天下

 楼主| 发表于 2016-10-26 12:06:17 | 显示全部楼层
我给的要求是两点,上面的函数已经够用了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2017-5-4 20:09:08 | 显示全部楼层
cad 自带程序 qextrim 就可以做到你的想法
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-5-4 20:12:29 | 显示全部楼层

楼主是想要个函数,自己写LISP去做想做的事。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6434个

财富等级: 富甲天下

发表于 2017-12-21 20:47:06 | 显示全部楼层
试试lispboy的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 97个

财富等级: 招财进宝

发表于 2017-12-27 10:00:52 | 显示全部楼层

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-29 03:25 , Processed in 0.199058 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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