找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1577|回复: 7

[教学] API应用 动态矩形裁剪图像

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-11-23 00:07:58 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 st788796 于 2014-11-23 00:09 编辑

矩形判断尚未完成,明天继续完善
  1. (defun c:tt (/ e box pts ln p1 p2 obox)
  2.   (defun callback (dynpt / ptl v1 p11 p12 nb)
  3.     (redraw)
  4.     (setq box (xd::pnts:ucs2wcs (XD::DOC:GetView4Pnt))
  5.           ptl (xdrx_curve_getinters pts (xd::pnts:close box) 1)
  6.           p11 (inters (car bpl)
  7.                       (mapcar '+ (car bpl) pvec)
  8.                       dynpt
  9.                       (mapcar '+ dynpt vec)
  10.                       nil
  11.               )
  12.           p12 (xdrx_curve_getinters (list p11 dynpt) ibox)
  13.           nb  (list (car bpl)
  14.                     p11
  15.                     dynpt
  16.                     (inters dynpt
  17.                             (mapcar '+ dynpt pvec)
  18.                             (car bpl)
  19.                             (cadr bpl)
  20.                             nil
  21.                     )
  22.               )
  23.     )
  24.     (apply 'xdrx_grdraw (cons 1 (cons 1 obox)))
  25.     (apply 'xdrx_grdraw (cons 1 (cons 1 ptl)))
  26.     (apply 'xdrx_grdraw (cons 1 (cons 0 nb)))
  27.     (xdrx_setpropertyvalue e "ClipBoundary" nb)
  28.   )
  29.   (if (and (setq e (car (xdrx_entsel "\nPick Image: " '((0 . "IMAGE")))))
  30.            (if (xdrx_getpropertyvalue e "IsClipped")
  31.              (xdrx_setpropertyvalue e "removeClipBoundary" t)
  32.              t
  33.            )
  34.            (setq obox (xdrx_image_boundary e))
  35.            (setq ibox (xdrx_getpropertyvalue e "ClipBoundary"))
  36.            (if (setq ln        (car (xdrx_entsel
  37.                                "\nPick BaseLine<Enter to draw>: "
  38.                                '((0 . "line"))
  39.                              )
  40.                         )
  41.                )
  42.              (setq pts (xdrx_getpropertyvalue ln "startpoint" "endpoint"))
  43.              (if (and (setq p1 (getpoint "\nFirset Point: "))
  44.                       (setq p2 (getpoint p1 "\nSecond Point: "))
  45.                  )
  46.                (setq pts (list p1 p2))
  47.              )
  48.            )
  49.            (setq bpl (vl-sort (xdrx_curve_getinters pts ibox 1)
  50.                               '(lambda (x1 x2)
  51.                                  (if (equal (cadr x1) (cadr x2) 1e-3)
  52.                                    (< (car x1) (car x2))
  53.                                    (< (cadr x1) (cadr x2))
  54.                                  )
  55.                                )
  56.                      )
  57.            )
  58.       )
  59.     (progn
  60.       (setq vec         (mapcar '- (cadr bpl) (car bpl))
  61.             pvec (xdrx_vector_perpvector vec)
  62.       )
  63.       (xdrx_pointmonitor "callback")
  64.       (setq p (getpoint "\nOrther Corner: "))
  65.       (xdrx_pointmonitor)
  66.     )
  67.   )
  68.   (princ)
  69. )
imageclip.gif
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 8611个

财富等级: 富甲天下

发表于 2014-11-23 08:57:38 来自手机 | 显示全部楼层
不错,再整个手绘多义段剪裁的。

点评

这个应用主要是 角度对齐 最大矩形范围裁剪图像的。  详情 回复 发表于 2014-11-23 14:20
手绘多段线的,好像提供过了吧,你想任意的多边形?  详情 回复 发表于 2014-11-23 14:16
任意的反而简单,矩形要有个最大矩形,不知道楼主怎么处理?  详情 回复 发表于 2014-11-23 09:11
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 264个

财富等级: 日进斗金

发表于 2014-11-23 09:11:02 来自手机 | 显示全部楼层
本帖最后由 iLisp 于 2014-11-23 09:12 编辑
liuyj 发表于 2014-11-23 08:57
不错,再整个手绘多义段剪裁的。


任意的反而简单,矩形要有个最大矩形,不知道楼主怎么处理?
看演示选择后复原了,中断时如何处理?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-11-23 12:14:59 来自手机 | 显示全部楼层
这样计算还是有点繁琐,改用 AcGe 库重写
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-11-23 14:16:44 | 显示全部楼层
liuyj 发表于 2014-11-23 08:57
不错,再整个手绘多义段剪裁的。

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-11-23 14:20:57 | 显示全部楼层
liuyj 发表于 2014-11-23 08:57
不错,再整个手绘多义段剪裁的。

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-11-23 18:33:51 | 显示全部楼层
调整了一下,按拾取的起点开始拉矩形,新 API 的 BoundBlock  构造有点问题
  1. (defun c:tt (/                olderr           myerr      _CornerToBoundBlock
  2.              e                pts           ln              p1         p2
  3.              oBoundary        cBoundary  bpl              vec         pvec
  4.              oBoundBlock           lst
  5.             )
  6.   (defun myerr (msg)
  7.     (princ "\n*cancel*")
  8.     (xdrx_pointmonitor)
  9.     (if        cBoundary
  10.       (xdrx_setpropertyvalue e "ClipBoundary" cBoundary)
  11.     )
  12.     (setq *error* olderr)
  13.     (princ)
  14.   )
  15.   (defun _CornerToBoundBlock (p1 p2 vx vy /)
  16.     (list p1
  17.           (inters p1 (mapcar '+ p1 vy) p2 (mapcar '+ p2 vx) nil)
  18.           p2
  19.           (inters p1 (mapcar '+ p1 vx) p2 (mapcar '+ p2 vy) nil)
  20.     )
  21.   )
  22.   (defun callback (dynpt / box ptl cBox)
  23.     (redraw)
  24.     (setq box (xd::pnts:ucs2wcs (XD::DOC:GetView4Pnt))
  25.           ptl (xdrx_curve_getinters pts (xd::pnts:close box) 1)
  26.     )
  27.     (apply 'xdrx_grdraw (cons 1 (cons 1 ptl)))
  28.     (apply 'xdrx_grdraw (cons 1 (cons 1 oBoundary)))
  29.     (setq cBox (_CornerToBoundBlock (car pts) dynpt vec pvec))
  30.     (if
  31.       (apply 'and
  32.              (mapcar '(lambda (x)
  33.                         (> (apply 'xdrx_point_getRelationAtClosedCurve
  34.                                   (cons x oBoundary)
  35.                            )
  36.                            1
  37.                         )
  38.                       )
  39.                      cbox
  40.              )
  41.       )
  42.        (xdrx_setpropertyvalue e "ClipBoundary" cBox)
  43.     )
  44.   )
  45.   (if (and (setq e (car (xdrx_entsel "\n选择图像: " '((0 . "IMAGE")))))
  46.            (if (xdrx_getpropertyvalue e "IsClipped")
  47.              (xdrx_setpropertyvalue e "removeClipBoundary" t)
  48.              t
  49.            )
  50.            (setq oBoundary (xdrx_image_boundary e))
  51.            (setq cBoundary (xdrx_getpropertyvalue e "ClipBoundary"))
  52.            (if (and (setq p1 (getpoint "\n基准点: "))
  53.                     (setq p2 (getpoint p1 "\n方向: "))
  54.                )
  55.              (setq pts (list (trans p1 1 0) (trans p2 1 0)))
  56.            )
  57.       )
  58.     (progn
  59.       (if (< (apply 'xdrx_point_getRelationAtClosedCurve
  60.                     (cons (car pts) oBoundary)
  61.              )
  62.              2
  63.           )
  64.         (progn
  65.           (setq lst (xdrx_curve_getinters pts oBoundary 1))
  66.           (if (< (distance (car pts) (car lst))
  67.                  (distance (car pts) (cadr lst))
  68.               )
  69.             (setq pts (cons (car lst) (cdr pts)))
  70.             (setq pts (cons (cadr lst) (cdr pst)))
  71.           )
  72.         )
  73.       )
  74.       (setq olderr  *error*
  75.             *error* myerr
  76.             vec            (mapcar '- p2 p1)
  77.             pvec    (xdrx_vector_perpvector vec)
  78.       )
  79.       (xdrx_pointmonitor "callback")
  80.       (setq p (getpoint "\n对角点: "))
  81.       (xdrx_pointmonitor)
  82.       (redraw)
  83.       (setq *error* olderr)
  84.     )
  85.   )
  86.   (princ)
  87. )

点评

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-23 18:40:41 | 显示全部楼层
st788796 发表于 2014-11-23 18:33
调整了一下,按拾取的起点开始拉矩形,新 API 的 BoundBlock  构造有点问题

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 15:40 , Processed in 0.191512 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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