找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3943|回复: 12

[每日一码] XDGELib构造函数 XdGe::Constructor 专题讨论贴

[复制链接]

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-9-22 19:48:33 | 显示全部楼层 |阅读模式

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

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

×
命令: (xdge::help)

XDGELib构造函数 XdGe::Constructor 现在支持的类如下:

   <AcGeEntity2d>
        ├───AcGeLine2d
        ├───AcGeRay2d
        ├───AcGeLineSeg2d
        ├───AcGeCompositeCurve2d
        ├───AcGeCircArc2d
        ├───AcGeEllipArc2d
        ├───AcGeNurbCurve2d
        ├───AcGePolyline2d
        ├───AcGePosition2d
        ├───AcGeBoundBlock2d
        ├───AcGeOffsetCurve2d
        ├───AcGeCurveCurveInt2d
        ├───AcGeClipBoundary2d
        ├───AcGePointOnCurve2d

   <AcGeEntity3d>
        ├───AcGeLine3d
        ├───AcGeRay3d
        ├───AcGeLineSeg3d
        ├───AcGeCompositeCurve3d
        ├───AcGeCircArc3d
        ├───AcGeEllipArc3d
        ├───AcGeNurbCurve3d
        ├───AcGePolyline3d
              ├───AcGeAugPolyline3d
        ├───AcGePlane
        ├───AcGePosition3d
        ├───AcGeBoundBlock3d
        ├───AcGeOffsetCurve3d
        ├───AcGeCurveCurveInt3d
        ├───AcGePointOnCurve3d


本帖被以下淘专辑推荐:

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

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-22 21:19:51 | 显示全部楼层
本帖最后由 st788796 于 2014-9-23 01:11 编辑

AcGeLine2d 二维直线( Line 叫线段)

1 (xdge::constructor "kLine2d")  默认构造 X 轴

_$ (setq ln (xdge::constructor "kLine2d"))
<图元名: 1e416c0>
_$ (xdge::getpropertyvalue ln "Direction")
(1.0 0.0)

2 (xdge::constructor "kLine2d" p1 p2) p1 p2 必须是 二维点(x y)

_$  (xdge::constructor "kLine2d" '(0 0) '(5. 5.))
<图元名: 1e416b0>

3 (xdge::constructor "kLine2d" p vec) p 二维点 , vec 二维非零长度向量(表示方向)

_$  (xdge::constructor "kLine2d" '(0. 0.) '(1. 0.))
<图元名: 1e41640>

4 (xdge::constructor "kLine2d" ge) ge  AcGeLine2d ,相当于复制了一个 Line2d

_$ (xdge::constructor "kLine2d" ln)
<图元名: 1e40c60>

set 方法

(setq ln2d (xdge::constructor "kLine2d")) 默认构造一个 AcGeLine2d

1 (xdge::setpropertyvalue ln2d "set" p1 p2) 将 ln2d 修改为经过 p1 p2 的AcGeLine2d,p1 p2 必须为不同点

2 (xdge::setpropertyvalue ln2d "set" p vec) 将 Ln2d 修改为以 p1 为基点,vec 为方向的 AcGeLine2d,vec 须为非零长度向量


补充说明:API 函数中的 2d 构造支持使用 3d 点,自动去除 Z 值!

(xdge::constructor "kLine2d" (getpoint) (getpoint))


另 API 函数中用到的 属性、方法 大小写是一样的,本例均采用了和 ARX 名称一致写法!

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-9-22 21:49:12 | 显示全部楼层

初用XDGE几何库关于kRay3d,kLine3d,kLineSeg3d的一点心得

看了这几天几位大师的程序,感觉到几何库太强大了,看了2天,现在说点心得。

关于构造函数 xdge::constructor 构造 kRay3d,kLine3d,kLineSeg3d 的不同。



                               
登录/注册后可看大图

                               
登录/注册后可看大图



kRay3d 构造出的是 射线实体的几何模型。

AcGeRay3d 建构器和析构器
AcGeRay3d::AcGeRay3d Function
AcGeRay3d(
const AcGePoint3d& pnt1,
const AcGePoint3d& pnt2);
pnt1
输入射线的起点

pnt2

输入任意不同于pnt13D

建构一条起点为pnt1并通过点pnt2的射线。点pnt1必须不同于点pnt2

AcGeRay3d(
const AcGePoint3d& pnt,
const AcGeVector3d& vec);
pnt

输入射线的起点

vec

输入射线的方向矢量

建构一条起点是pnt且方向是vec的射线。vec必须为非零矢量。

AcGeRay3d(
const AcGeRay3d& line);
line

输入任意的3D射线

建构一条作为输入射线拷贝的3D射线。

AcGeRay3d();
默认建构器。建构一条起点是(0,0,0)且方向是(1,0,0)的射线(即是X轴正方向)




看下面演示:

xdge_ray3d.gif

  1. (defun c:tt ()
  2.   (if (and
  3.         (setq p1 (getpoint \"\\n第一点<退出>:\"))
  4.         (setq p2 (getpoint p1 \"\\n第二点<退出>:\"))
  5.         (setq ge (xdge::constructor \"kRay3d\" p1 p2))
  6.       )
  7.     (progn
  8.       (xdge::entity:make ge)
  9.       (xdge::free)
  10.     )
  11.   )
  12.   (princ)
  13. )




                               
登录/注册后可看大图

                               
登录/注册后可看大图



kLine3d 构造出的是 XLINE 的几何模型,

AcGeLine3d 建构器和析构器
AcGeLine3d::AcGeLine3d Function
AcGeLine3d(
const AcGePoint3d& pnt1,
const AcGePoint3d& pnt2);
pnt1
输入任意的3D

Pnt2

输入不同于点pnt1任意的3D

通过点pnt1pnt2建构一条无限的直线。点pnt1pnt2必须是不同点。

AcGeLine3d(
const AcGePoint3d& pnt,
const AcGeVector3d& vec);
pnt

输入任意的3D

vec

输入任意的3D矢量

通过点pnt和方向矢量vec建构一条无限的直线。vec必须是非零长度的矢量。

AcGeLine3d(
const AcGeLine3d& line);
line

输入任意的3D直线

建构一条作为输入直线拷贝的无限3D直线。

AcGeLine3d();
默认建构器。建构一条与X轴相同无限直线。



看下面演示:

xdge_xline3d.gif


  1. (defun c:tt ()
  2.   (if (and
  3.         (setq p1 (getpoint \"\\n第一点<退出>:\"))
  4.         (setq p2 (getpoint p1 \"\\n第二点<退出>:\"))
  5.         (setq ge (xdge::constructor \"kLine3d\" p1 p2))
  6.       )
  7.     (progn
  8.       (xdge::entity:make ge)
  9.       (xdge::free)
  10.     )
  11.   )
  12.   (princ)
  13. )



                               
登录/注册后可看大图

                               
登录/注册后可看大图

kLineSeg3d 构造出的是LINE的几何模型,

AcGeLineSeg3d建构器和析构器
AcGeLineSeg3d::AcGeLineSeg3d Function
AcGeLineSeg3d(
const AcGePoint3d& pnt1,
const AcGePoint3d& pnt2);
pnt1
输入线段的起点

pnt2

输入线段的终点

建构一条从pnt1pnt2的线段. pnt1pnt2 不能重合。

AcGeLineSeg3d();
缺省建构器建构一条从(0,00) (1,0,0)的线段.

AcGeLineSeg3d(
const AcGePoint3d& pnt,
const AcGeVector3d& vec);
pnt

输入线段的起点

vec

输入一个在起点和终点之间的向量

建够一条以pnt为起点pnt+vec为终点的线段vec长度非零.

AcGeLineSeg3d(
const AcGeLineSeg3d& line);
line

输入3D线段

建构一个拷贝输入线段的3D线段



看下面演示:

xdge_lineseg3d.gif


  1. (defun c:tt ()
  2.   (if (and
  3.         (setq p1 (getpoint \"\\n第一点<退出>:\"))
  4.         (setq p2 (getpoint p1 \"\\n第二点<退出>:\"))
  5.         (setq ge (xdge::constructor \"kLineSeg3d\" p1 p2))
  6.       )
  7.     (progn
  8.       (xdge::entity:make ge)
  9.       (xdge::free)
  10.     )
  11.   )
  12.   (princ)
  13. )



构造出上述实体的几何模型后,就可以用下面丰富的函数做我们想做的事了。








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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-22 23:07:32 | 显示全部楼层
本帖最后由 st788796 于 2014-9-22 23:45 编辑

AcGeRay2d  二维射线

1 (xdge::constructor "kRay2d") 默认构造 起点 (0 0) 方向 (1 0) 射线,即 X 轴 正方向


2 (xdge::constructor "kRay2d" p vec) p 起点,vec 非零长度向量,表示方向


3 (xdge::constructor "kRay2d" p1 p2) p1 起点,p2 和 p1 不同的点


4 (xdge::constuctor "kRay2d" gray) gray AcGeRay2d 相当于复制


set 方法

(setq ray2d (xdge::constructor "kRay2d")) 默认构造 AcGeRay2d

1 (xdge::setpropertyvalue ray2d "set" p1 p2) 将 ray2d 修改为起点为 p1 且通过 p2 的 AcGeRay2d,p1 p2 须为不同点

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-23 00:51:28 | 显示全部楼层
本帖最后由 st788796 于 2014-9-23 01:09 编辑

AcGeCompositeCurve2d 二维连续线
表示首尾相接复合曲线,构造这个类必须自己检查是否首尾相接,另外其成员必须是有界曲线,包括 AcGeLineSeg2d 、AcGeCircArc2d (非圆),AcGeCompositeCurve2d 实际是存储了一组 Curve2d 的指针,但对外呈现的是一个单一曲线,对应的 Db 是 LightWeightPolyline

1 (xdge::constructor "kCompositeCrv2d") 默认构造,仅包含一段 AcGeLineSeg2d 由点 (0 0) 到 (1 0) 的复合线

此方法为 Autodesk  Bug,能构造,获取 CurveList  后的为 3d,数据错误

2 (xdge::constructor "kCompositeCrv2d" gelst) gelst -- 列表,AcGeLine2d 或 AcGeCircArc2d




set 方法

(xdge::setpropertyvalue gpl "setCurveList") gel) gel 首尾相接的 curve 列表

getCurveList 获取组成 AcGeCompositeCurve2d 的 curve 列表,( explode 分解 pline 后得到一段段线)

(xdge::getpropertyvalue gpl "getCurveList")

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-23 11:38:31 | 显示全部楼层
更正一下上面关于 Vector 构造的说明,以 Line2d 为例

在 ARX 有两种构造方式

AcGeLine2d(
    const AcGePoint2d& pnt1,
    const AcGePoint2d& pnt2
);

AcGeLine2d(
    const AcGePoint2d& pnt,
    const AcGeVector2d& vec
);

这里 pnt 和 vec 在 Lisp 均表现为表形式,在 arx 中 Point 和 Vector 是两个类,Ge 库中读入的 Lisp 数据只能取其一,否则还要加入参数,目前的 Ge 库函数只采用了点构造方式,没有 vec 方式,或许加个 参数 T 能完善这个方法
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-24 06:59:56 来自手机 | 显示全部楼层
本帖最后由 st788796 于 2014-9-24 07:31 编辑

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

使用道具 举报

已领礼包: 191个

财富等级: 日进斗金

发表于 2014-12-25 19:09:51 | 显示全部楼层
谁能给通俗的介绍下XdGe?都用在哪些场景中? 我读书少,没懂这块知识,谢谢大家了。

点评

你要是具体哪有不清楚的,可以单独拿出来发帖子,大家讨论下。  详情 回复 发表于 2014-12-25 20:58
是专供ARX使用的AUTODESK的几何实体库,现在通过API的包装,可以用到LISP下 了。所有的数据库实体基本都对应于相应的几何对象,几何对象提供了比数据库实体更多的方法,他是个内存的几何数学模型,进行几何的运算。  详情 回复 发表于 2014-12-25 20:56
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-25 20:56:55 | 显示全部楼层
口味虾 发表于 2014-12-25 19:09
谁能给通俗的介绍下XdGe?都用在哪些场景中? 我读书少,没懂这块知识,谢谢大家了。

是专供ARX使用的AUTODESK的几何实体库,现在通过API的包装,可以用到LISP下 了。所有的数据库实体基本都对应于相应的几何对象,几何对象提供了比数据库实体更多的方法,他是个内存的几何数学模型,进行几何的运算。很简单,多看看论坛提供的例子,照猫画虎就总结出经验了。对应于几何模型,多看看ARX的帮助手册中关于几何模型的部分,找到各种方法所需要的参数,API的XDGE几何库参数都是对应ARX手册的。

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-25 20:58:21 | 显示全部楼层
口味虾 发表于 2014-12-25 19:09
谁能给通俗的介绍下XdGe?都用在哪些场景中? 我读书少,没懂这块知识,谢谢大家了。

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 00:14 , Processed in 0.335012 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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