找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2170|回复: 8

[教学] XDGE几何库应用(28)--根据四边长及对角线数据绘制四边形

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-10-31 23:16:35 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 st788796 于 2014-11-1 07:53 编辑

相关链接
已知四边形的四条边长和一条对角线自动画四边形
http://bbs.xdcad.net/thread-676647-1-1.html


  1. (defun c:tt (/ fl lst p c1 c2 normal cc3d l1 l2 l3 l4 l5 p nlst tf bp)
  2.   (defun _makerotate (pts /)
  3.     (mapcar '(lambda (x y / dm)
  4.                (setq dm        (xdrx_dimension_makerotate
  5.                           x
  6.                           y
  7.                           (xdrx_line_midp x y)
  8.                           (angle x y)
  9.                         );_字高随当前样式
  10.                )
  11.                (xdrx_setpropertyvalue
  12.                  dm           "DIMBLK1" "_None"   "DIMBLK2" "_None"
  13.                  "DIMSAH"  T             "DIMSD1"  T         "DIMSD2"
  14.                  T           "DIMSE1"  T               "DIMSE2"         T
  15.                 )
  16.              )
  17.             pts
  18.             (cdr pts)
  19.     )
  20.   )
  21.   (if (and (setq fl (getfiled "Select txt" "" "txt" 8))
  22.            (setq lst (xd::list:fromfile fl))
  23.            (setq p (getpoint "\nbase point: "))
  24.       )
  25.     (progn
  26.       (setq lst (mapcar 'distof lst))
  27.       (while lst
  28.         (mapcar 'set '(l1 l2 l3 l4 l5) lst)
  29.         (setq nlst (cons (list l1 l2 l3 l4 l5) nlst)
  30.               lst  (cdr (cddddr lst))
  31.         )
  32.       );_处理边长分组
  33.       (setq c1           (xdge::constructor "kCircArc3d");_默认圆1
  34.             c2           (xdge::constructor "kCircArc3d");_默认圆2
  35.             normal '(0.0 0.0 1.0)
  36.             cc3d   (xdge::constructor "kCurveCurveInt3d");_建立相交体
  37.       )
  38.       (mapcar
  39.         '(lambda (x / p1 p2 p3 box l1 l2 l3 l4 l5 pl vx ln dm dm1)
  40.            (mapcar 'set '(l1 l2 l3 l4 l5) x)
  41.            (setq p3 (polar p 0. l4))
  42.            (xdge::setpropertyvalue c1 "set" p normal l1);_重新设置圆心半径
  43.            (xdge::setpropertyvalue c2 "set" p3 normal l5);_重新设置圆心半径
  44.            (xdge::setpropertyvalue cc3d "set" c1 c2 normal);_设置相交体为 c1 c2
  45.            (setq p1 (car (vl-remove-if-not
  46.                            '(lambda (a)
  47.                               (minusp (xdrx_point_dist2line a p p3));_仅保留上部的交点
  48.                             )
  49.                            (xdge::getpropertyvalue cc3d "intPoints");_两圆交点
  50.                          )
  51.                     )
  52.            )
  53.            (xdge::setpropertyvalue c1 "set" p1 normal l2);_重新设置 圆1
  54.            (xdge::setpropertyvalue c2 "set" p3 normal l3);_重新设置 圆2
  55.            (setq p2  (car (vl-remove-if-not
  56.                             '(lambda (a)
  57.                                (minusp (xdrx_point_dist2line a p1 p3));_仅保留斜线左侧点
  58.                              )
  59.                             (xdge::getpropertyvalue cc3d "intPoints");_重新取得相交体交点
  60.                           )
  61.                      )
  62.                  pl  (xdrx_polyline_make t p p1 p2 p3)
  63.                  box (xdrx_entity_box pl)
  64.                  ln  (xdrx_line_make p1 p3)
  65.                  dm  (_makerotate (list p p1 p2 p3 p))
  66.                  dm1 (car (_makerotate (list p1 p3)))
  67.            )
  68.            (if bp
  69.              (progn
  70.                (xdrx_entity_move
  71.                  (append (list dm1 pl ln) dm)
  72.                  (car box)
  73.                  bp
  74.                );_移动
  75.                (setq bp        (mapcar        '+
  76.                                 bp
  77.                                 (mapcar '- (cadr box) (car box))
  78.                                 '(300. 0. 0.)
  79.                         )
  80.                )
  81.              )
  82.              (setq bp (polar (cadr box) 0. 300))
  83.            )
  84.            (setq tf t)
  85.          )
  86.         (reverse nlst)
  87.       )
  88.       (xdge::free);_释放 Ge
  89.     )
  90.   )
  91.   (princ)
  92. )

算法过程示意

算法过程示意

本帖被以下淘专辑推荐:

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

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-11-1 21:01:48 | 显示全部楼层
hzj268 发表于 2014-11-1 14:53
还是老大善解人意,不过标注出来的有点乱不知道可以解决不,不过.

标注是临时加入的
  1. (defun c:tt (/ fl lst p c1 c2 normal cc3d l1 l2 l3 l4 l5 p nlst tf bp)
  2.   (defun _makerotate (pts /)
  3.     (mapcar '(lambda (x y / dm)
  4.                (setq dm        (xdrx_dimension_makerotate
  5.                           x
  6.                           y
  7.                           (xdrx_line_midp x y)
  8.                           (angle x y)
  9.                         ) ;_字高随当前样式
  10.                )
  11.                (xdrx_setpropertyvalue
  12.                  dm           "DIMBLK1" "_None"   "DIMBLK2" "_None"
  13.                  "DIMSAH"  T             "DIMSD1"  T         "DIMSD2"
  14.                  T           "DIMSE1"  T               "DIMSE2"         T
  15.                 )
  16.                dm
  17.              )
  18.             pts
  19.             (cdr pts)
  20.     )
  21.   )
  22.   (if (and (setq fl (getfiled "Select txt" "" "txt" 8))
  23.            (setq lst (xd::list:fromfile fl))
  24.            (setq p (getpoint "\nbase point: "))
  25.       )
  26.     (progn
  27.       (setq lst (mapcar 'distof lst))
  28.       (while lst
  29.         (mapcar 'set '(l1 l2 l3 l4 l5) lst)
  30.         (setq nlst (cons (list l1 l2 l3 l4 l5) nlst)
  31.               lst  (cdr (cddddr lst))
  32.         )
  33.       ) ;_处理边长分组
  34.       (setq c1           (xdge::constructor "kCircArc3d") ;_默认圆1
  35.             c2           (xdge::constructor "kCircArc3d") ;_默认圆2
  36.             normal '(0.0 0.0 1.0)
  37.             cc3d   (xdge::constructor "kCurveCurveInt3d") ;_建立相交体
  38.       )
  39.       (mapcar
  40.         '(lambda (x / p1 p2 p3 box l1 l2 l3 l4 l5 pl vx ln dm dm1)
  41.            (mapcar 'set '(l1 l2 l3 l4 l5) x)
  42.            (setq p3 (polar p 0. l4))
  43.            (xdge::setpropertyvalue c1 "set" p normal l1) ;_重新设置圆心半径
  44.            (xdge::setpropertyvalue c2 "set" p3 normal l5) ;_重新设置圆心半径
  45.            (xdge::setpropertyvalue cc3d "set" c1 c2 normal) ;_设置相交体为 c1 c2
  46.            (setq p1 (car (vl-remove-if-not
  47.                            '(lambda (a)
  48.                               (minusp (xdrx_point_dist2line a p p3)) ;_仅保留上部的交点
  49.                             )
  50.                            (xdge::getpropertyvalue cc3d "intPoints") ;_两圆交点
  51.                          )
  52.                     )
  53.            )
  54.            (xdge::setpropertyvalue c1 "set" p1 normal l2) ;_重新设置 圆1
  55.            (xdge::setpropertyvalue c2 "set" p3 normal l3) ;_重新设置 圆2
  56.            (setq p2  (car (vl-remove-if-not
  57.                             '(lambda (a)
  58.                                (minusp (xdrx_point_dist2line a p1 p3)) ;_仅保留斜线左侧点
  59.                              )
  60.                             (xdge::getpropertyvalue cc3d "intPoints") ;_重新取得相交体交点
  61.                           )
  62.                      )
  63.                  
  64.                  pl  (xdrx_polyline_make t p p1 p2 p3)
  65.                  box (xdrx_entity_box pl)
  66.                  ln  (xdrx_line_make p1 p3)
  67.                  dm  (_makerotate (list p p1 p2 p3 p p1 p3))
  68.            )
  69.            (if bp
  70.              (progn
  71.                (xdrx_entity_move (cons pl (cons ln dm)) (car box) bp) ;_移动
  72.                (setq bp        (mapcar        '+
  73.                                 bp
  74.                                 (mapcar '- (cadr box) (car box))
  75.                                 '(300. 0. 0.)
  76.                         )
  77.                )
  78.              )
  79.              (setq bp (polar (cadr box) 0. 300))
  80.            )
  81.            (setq tf t)
  82.          )
  83.         (reverse nlst)
  84.       )
  85.       (xdge::free) ;_释放 Ge
  86.     )
  87.   )
  88.   (princ)
  89. )

点评

通过学习,稍作修改可以得 三边+对角线绘制四边形 在此非常感谢st788796!  详情 回复 发表于 2014-11-5 16:16
老大问题已解决.  详情 回复 发表于 2014-11-2 15:27
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

已领礼包: 1371个

财富等级: 财源广进

发表于 2014-11-1 14:53:17 | 显示全部楼层
:)还是老大善解人意,不过标注出来的有点乱不知道可以解决不,不过.
QQ图片20141101145346.png
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 924个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 1371个

财富等级: 财源广进

发表于 2014-11-2 15:27:31 | 显示全部楼层
st788796 发表于 2014-11-1 21:01
标注是临时加入的

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

使用道具 举报

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

使用道具 举报

发表于 2014-11-5 16:16:33 | 显示全部楼层
st788796 发表于 2014-11-1 21:01
标注是临时加入的

  1. (defun c:tt (/ fl lst p c1 c2 normal cc3d l1 l2 l3 l4 l5 p nlst tf bp)
  2.   (defun _makerotate (pts /)
  3.     (mapcar '(lambda (x y / dm)
  4.                (setq dm        (xdrx_dimension_makerotate
  5.                           x
  6.                           y
  7.                           (xdrx_line_midp x y)
  8.                           (angle x y)
  9.                         ) ;_字高随当前样式
  10.                )
  11.                (xdrx_setpropertyvalue
  12.                  dm           "DIMBLK1" "_None"   "DIMBLK2" "_None"
  13.                  "DIMSAH"  T             "DIMSD1"  T         "DIMSD2"
  14.                  T           "DIMSE1"  T               "DIMSE2"         T
  15.                 )
  16.                dm
  17.              )
  18.             pts
  19.             (cdr pts)
  20.     )
  21.   )
  22.   (if (and (setq fl (getfiled "Select txt" "" "txt" 8))
  23.            (setq lst (xd::list:fromfile fl))
  24.            (setq p (getpoint "\nbase point: "))
  25.       )
  26.     (progn
  27.       (setq lst (mapcar 'distof lst))
  28.       (while lst
  29.         (mapcar 'set '(l1 l2 l3 l4 l5) lst)
  30.         (setq nlst (cons (list l1 l2 l3 l4 l5) nlst)
  31.               lst  (cdr (cddddr lst))
  32.         )
  33.       ) ;_处理边长分组
  34.       (setq c1           (xdge::constructor "kCircArc3d") ;_默认圆1
  35.             c2           (xdge::constructor "kCircArc3d") ;_默认圆2
  36.             normal '(0.0 0.0 1.0)
  37.             cc3d   (xdge::constructor "kCurveCurveInt3d") ;_建立相交体
  38.       )
  39.       (mapcar
  40.         '(lambda (x / p1 p2 p3 box l1 l2 l3 l4 l5 pl vx ln dm dm1)
  41.            (mapcar 'set '(l1 l2 l3 l4 l5) x)
  42.            (setq p3 (polar p 0. l2))
  43.            (xdge::setpropertyvalue c1 "set" p normal l1) ;_重新设置圆心半径
  44.            (xdge::setpropertyvalue c2 "set" p3 normal l5) ;_重新设置圆心半径
  45.            (xdge::setpropertyvalue cc3d "set" c1 c2 normal) ;_设置相交体为 c1 c2
  46.            (setq p1 (car (vl-remove-if-not
  47.                            '(lambda (a)
  48.                               (minusp (xdrx_point_dist2line a p p3)) ;_仅保留上部的交点
  49.                             )
  50.                            (xdge::getpropertyvalue cc3d "intPoints") ;_两圆交点
  51.                          )
  52.                     )
  53.            )
  54.            (xdge::setpropertyvalue c1 "set" p normal l4) ;_重新设置 圆1
  55.            (xdge::setpropertyvalue c2 "set" p3 normal l3) ;_重新设置 圆2
  56.            (setq p2  (car (vl-remove-if-not
  57.                             '(lambda (a)
  58.                                (minusp (xdrx_point_dist2line a p p3)) ;_仅保留斜线左侧点
  59.                              )
  60.                             (xdge::getpropertyvalue cc3d "intPoints") ;_重新取得相交体交点
  61.                           )
  62.                      )

  63.                  pl  (xdrx_polyline_make t p p1 p3 p p2 p3)
  64.                  box (xdrx_entity_box pl)
  65.                  ln  (xdrx_line_make p1 p2)
  66.                  dm  (_makerotate (list p p1 p2 p3 p p2 p3 p1 ))
  67.            )
  68.            (if bp
  69.              (progn
  70.                (xdrx_entity_move (cons pl (cons ln dm)) (car box) bp) ;_移动
  71.                (setq bp        (mapcar        '+
  72.                                 bp
  73.                                 (mapcar '- (cadr box) (car box))
  74.                                 '(300. 0. 0.)
  75.                         )
  76.                )
  77.              )
  78.              (setq bp (polar (cadr box) 0. 300))
  79.            )
  80.            (setq tf t)
  81.          )
  82.         (reverse nlst)
  83.       )
  84.       (xdge::free) ;_释放 Ge
  85.     )
  86.   )
  87.   (princ)
  88. )


通过学习,稍作修改可以得  三边+对角线绘制四边形
在此非常感谢st788796!

点评

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-5 16:39:34 | 显示全部楼层
freedake 发表于 2014-11-5 16:16
通过学习,稍作修改可以得  三边+对角线绘制四边形
在此非常感谢st788796!

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 13:44 , Processed in 0.307960 second(s), 55 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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