找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1765|回复: 2

[教学] XDGE几何库应用(13)--平面 Plane 构造

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-22 17:34:17 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 st788796 于 2014-11-1 08:03 编辑

在 AutoCAD 中经常会用到 Plane 概念,先看看 ARX 中 Plane  构造方法

1 用平面方程,这个不常用,有计算功夫都构造完了
AcGePlane 建构器和析构器
AcGePlane::AcGePlane Function
AcGePlane(
double a,
double b,
double c,
double d);

a
输入坐标 a
b
输入坐标 b
c
输入坐标 c
d
输入坐标 d

建构器。建构满足以下等式的平面:
a*x + b*y + c*z + d = 0
这个平面的参数设置如下:原点是在平面上最接近点(0,0,0), uAxis= norm.perpVector()vAxis=norm.crossProduct(uAxis),其中向量normvec.normal()
注意:坐标为 (a, b, c)的向量vec是非零长度。



2 这个说明和翻译比较坑爹,你要这样用 vec 构造的就不是需要的 Plane ,应该是同一平面上的 三个点
AcGePlane(
const AcGePoint3d& or,
const AcGeVector3d& uAxis,
const AcGeVector3d& vAxis);

or

输入原点

uAxis

输入任意向量

vAxis

输入任意向量


用原点or,UuAxisVvAxis建构平面。
注意: 向量uAxis vAxis=pntV-or不在同一直线上。


3 这个是三点构造,必须在同一平面内的非共线三点

AcGePlane(
const AcGePoint3d& pntU,
const AcGePoint3d& or,
const AcGePoint3d& pntV);
pntU

输入U轴上的点U

or

输入原点

pntV

输入V轴上的点V


用原点=or, uAxis=v1vAxis=v2建构平面。
注意: 向量v1=pntU-orv2=pntV-or不在同一条直线上

4 原点 +  Normal

AcGePlane(
const AcGePoint3d& origin,
const AcGeVector3d& normal);
origin

输入平面原点

normal

输入法向量


origin=pnt, uAxis= normal.perpVector()vAxis=normal.crossProduct(uAxis)建构平面。
注意: 法向量是非零长度。


一个测试
  1. (defun c:tt (/ p1 p2 p3 ln ln3d plane pnt vx vy vz)
  2.   (if (and (setq p1 (getpoint "\nFirst Point on Plane: "))
  3.            (setq p2 (getpoint "\nSecond Point on Plane: "))
  4.            (setq p3 (getpoint "\nThird point on Plane: "))
  5.            (setq pc (mapcar '(lambda (x y z) (/ (+ x y z) 3.)) p1 p2 p3))
  6.            (setq ln (xdrx_entsel "\nPick Line: " '((0 . "line"))))
  7.            (setq vx (xdrx_vector_normalize (mapcar '- p2 p1))
  8.                  vy (xdrx_vector_perpvector vx)
  9.                  vz (xdrx_vector_crossproduct vx vy)
  10.            )
  11.            (setq line3d        (xdge::constructor
  12.                           "kLine3d"
  13.                           (xdrx_curve_getstartpoint (car ln))
  14.                           (xdrx_curve_getendpoint (car ln))
  15.                         )
  16.            )
  17.            ;;构造平面按手册说明几种方法
  18.            ;;1 方式2  (xdge::constructor "kPlane" pc vx vy) 平面不是 p1 p2 p3 平面
  19.            ;;         (xdge::constructor "kPlane" pc (mapcar '+ pc vx) (mapcar '+ pc vy)) 正确
  20.            ;;2 方式3  (xdge::constructor "kPlane" p1 p2 p3) 正确
  21.            ;;3 方式4  (xdge::constructor "kPlane" pc vz)    正确
  22.            ;;4        (xdge::constructor "kPlane" p1 vz)    任意点加Normal均可
  23.            (setq plane (xdge::constructor
  24.                          "kPlane"
  25.                          (trans pc 1 0);_ WCS 坐标
  26.                          vz
  27.                        )
  28.            )
  29.            (progn
  30.              (princ "\n")
  31.              (princ (xdge::getpropertyvalue plane "getCoordSystem"))
  32.              t
  33.            )
  34.            (setq pnt (xdge::getpropertyvalue line3d "intersectWith" plane))
  35.       )
  36.     (progn
  37.       (princ "\n")
  38.       (princ pnt)
  39.       (xdrx_point_make pnt)
  40.     )
  41.   )
  42.   (princ)
  43. )



planetest.gif

本帖被以下淘专辑推荐:

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

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-9-22 18:29:13 来自手机 | 显示全部楼层
2 3一样的,三点(非共线)确定一个平面,学过几何的都知道
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-9-22 18:45:34 | 显示全部楼层
很好的演示,3D 都离不开平面的概念。
GE库是ACAD的基础,所有关于曲线相关的LISP,ARX DB实体提供的函数,都是通过GE库实现的,所以熟练掌握了几何库的使用,会开发出效率更高,功能更强的工具来。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 02:07 , Processed in 0.245502 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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