找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 733|回复: 5

[求助] 再来一个问题行不行,关于面域。

[复制链接]
发表于 2017-3-2 20:03:30 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 flanker_j 于 2017-3-2 20:29 编辑

不好意思,问题实在太多了。
我发现,在画Circle的时候,可以通过构造函数里的参数”Vector3d normal“这个向量对圆进行空间的旋转,那有没有类似的方法去创建一个矩形的面,或者参照这个圆的属性对矩形面域进行旋转。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 51个

财富等级: 招财进宝

发表于 2017-3-2 20:29:34 | 显示全部楼层
矩阵变换是数学变换, 和面域有什么关系呢? 理解了,变换矩阵是很好写的,Matix3d里面都有现成的函数,你只要知道坐标系的三个轴或者平移的距离,选择的角度,缩放的比例就可以了。

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2017-3-2 20:44:24 | 显示全部楼层
本帖最后由 Lispboy 于 2017-3-2 20:50 编辑

”可以通过构造函数里的参数”Vector3d normal“这个向量对圆进行空间的旋转”

      这个这么说不严谨,虽然看起来像,构造函数加NORMAL,是确定了这个圆所在的平面。他和相对世界坐标系X,Y,Z轴旋转没关,只是看起来是。

或者参照这个圆的属性对矩形面域进行旋转,这样就不用进行矩阵转换了。

      这个,你把因果说反了,正是因为通过了矩阵变换,才达到了旋转的目的。你知道了矩阵,才出来旋转的结果。 当然,你如果用ACAD命令的话,你旋转也要计算出旋转角和旋转轴,只是CAD命令把你给的角度和轴内部替你计算出了旋转矩阵作用到要变换的实体上。

在ACAD中,所有的图形变换,旋转,镜像,移动,缩放最终都是通过实体对象自身的transForm,用变换矩阵变换出的结果。
CAD的一些命令让用户输入距离,比例,角度等等只是更直观的贴近现实而已,他要帮你计算变换矩阵。

使用变换矩阵的好处是,多个变换过程,可以计算出最终的一个变换矩阵,只一次操作就到位了。当然你也可以先移动,再旋转,再缩放分步骤做。一个变换矩阵可以同时做上面三件事。这就是为什么有的人写的程序实体变换效率低,慢,而有的人写的程序实体变换的速度非常快的原因。
建议你用 矩阵 做关键字搜索论坛,论坛以前很详细的讨论过矩阵的操作的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-2 21:56:27 来自手机 | 显示全部楼层
其实我想做的是能过两个Point3d来建一个圆柱体或立方体,圆柱体很简单,只要用两个点间的向量画一个圆Circle,然后再沿这个向量拉伸就可以了,不用做太多的计算,立方体就不能用这个方法了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-3-2 23:40:01 | 显示全部楼层

只有实体位置,大小,变化才有变换矩阵的操作, 你创建实体不涉及矩阵操作。

正方形你一样可以拉伸成立方体啊,你试试命令行用  extrude 命令,拉个矩形看看。封闭的曲线都行,下面图示拉的矩形和SPLINE

QQ截图20170302233251.png

你分两步骤:

1、曲线变REGION

AcDbRegion::createFromCurves Function
static Acad::ErrorStatus
createFromCurves(
const AcDbVoidPtrArray& curveSegments,
AcDbVoidPtrArray& regions);
curveSegmentsInput array of pointers to curve entities used to define the region's perimeter(s)
regionsReturns containing pointers to the AcDbRegion objects created
This static member function creates a set of AcDbRegion objects from the closed loops represented by the curves contained in the curveSegments array. The newly created region objects are returned in the regions array.
The curveSegments array must contain only pointers to AcDbLine, AcDbArc, AcDbEllipse, AcDbCircle, AcDbSpline, AcDb3dPolyline, or AcDbPolyline objects.

Note The objects in curveSegments must be opened for read and not for write. If the objects are opened, calling this function will crash AutoCAD.
Note It is the calling application's responsibility to either add the AcDbRegion objects returned in the regions array to an AcDbDatabase or to delete them when they are no longer needed.

Returns Acad::eOk if the function is completely successful.
If there is any problem during the creation of an AcDbRegion from any of the curves in curveSegments, then this function returns Acad::eInvalidInput and the regions array contains pointers to any AcDbRegion objects that were created before the error occurred. So, do not assume that a non-Acad::eOk return status indicates a total failure with no dynamically-allocated AcDbRegion objects returned.


2、REGION拉伸成3DSOLID

AcDb3dSolid::extrude Function
virtual Acad::ErrorStatus
extrude(
const AcDbRegion* region,
double height,
double taperAngle = 0.0);
regionInput pointer to a region object
heightInput height for extrusion
taperAngleInput taper angle in radians
Creates a solid by extruding pRegion, a distance of height with a taper angle of taper. The extrusion direction is along the normal of the region if the height is positive. taper should be between half pi and -half pi. If the absolute value of taper < 1e-6, then the taper angle is set to 0.
If taper is nonzero, the region should only have lines, circles, and circular arcs that join together smoothly (equal tangents at the points of connection).
The region should not have self-intersections. Any self-intersections caused by the sweep will not be corrected.
For more information, see the EXTRUDE command in the AutoCAD Command Reference.
Returns Acad::eOk if this method succeeds.
If height <= 1e-6 or abs(taper) >= (PI/2) - (1e-6), then Acad::eOutOfRange will be returned.
If region == NULL or the region has no ShapeManager object, then Acad::eInvalidInput is returned.
If the ShapeManager object creation fails, then Acad::eGeneralModelingFailure will be returned.

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 21:16 , Processed in 0.237704 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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