找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1816|回复: 2

[其他]:关于实体比例变换的一次讨论

[复制链接]
发表于 2002-5-15 02:32:47 | 显示全部楼层 |阅读模式

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

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

×
dadao 说:
问个问题,如何对实体在X、Y、Z方向上分别缩放

XDSoft说:
块?

dadao 说:
单个的实体

XDSoft说:
试试建立个转换矩阵

XDSoft说:
然后pEnt->transFrom(...)

XDSoft说:
比例系数自己填

XDSoft说:
用AcGeMatrix3d: setToScaling(..)是设置的整体比例

dadao 说:
我是这样做的

dadao 说:
        AcGeMatrix3d xform;

        scale.getMatrix(xform);
        pEnt->transformBy(xform);

XDSoft说:
把矩阵对角线X,Y,Z分别手工设置

XDSoft说:
getMatrix是设置整体的比例吧?

dadao 说:
打印出来的矩阵是
3 0 0 0
0 2 0 0
0 0 1 0
0 0 0 1

XDSoft说:
没有效果?

dadao 说:
是呀,没有任何效果

XDSoft说:
那AUTOCAD不支持不同一的比例?

XDSoft说:
是什么实体?

dadao 说:
line,pline和text

XDSoft说:
AcDbLeader, AcDbMLine, AcDbMText, AcDbOle2Frame, AcDbPloyFaceMesh, AcDbPolygonMesh,
AcDbRay, AcDbXline, AcDbFcf, AcDbSolid, AcDbEllipse, AcDbSpline, AcDbImage

XDSoft说:
只有这些实体支持non-uniform scale matrix

dadao 说:
没有别的办法了么?

XDSoft说:
试试这些实体,看看是否有效果?

XDSoft说:
AcDb2dPolyine, AcDb3dPolyine, AcDbDimension and derived classes, AcDbArc, AcDbCircle,
AcDbBlockReference, AcDbMInsert, AcDbFace, AcDbLine, AcDbPloyline, AcDbPoint,
AcDbPoint, AcDbHatch, AcDbShape, AcDbText and derived classes, AcDbTrace, AcDbViewport,
AcDbRegion, AcDb3dSolid, and AcDbBody.

XDSoft说:
这些是限制的,不让的

XDSoft说:
你看看LINE返回是不是Acad::eCannotScaleNonUniformly ?

dadao 说:
对,我一直没检查返回值,不过我想应该是不行了

XDSoft说:
你要做什么?

dadao 说:
就象块一样对一些实体分别在X、Y方向上进行缩放

XDSoft说:
LINE可以变通下

dadao 说:
如何做?

XDSoft说:
先得到AcDbEntity::getGeomExtents

XDSoft说:
然后缩放这个包围盒子

XDSoft说:
然后找顶点,给连上

dadao 说:
这样也行,不过其他的实体就不能这样处理了

XDSoft说:
其他实体可以建立个临时的INSERT啊?

XDSoft说:
缩放完,再给炸开

XDSoft说:
这个要有炸开不同比例块的算法

dadao 说:
呵呵!这样就有些复杂了

XDSoft说:
是啊

dadao 说:
我再想想,不行的话我把这些实体重画一遍

XDSoft说:


XDSoft说:
用几何类

XDSoft说:
getMatrix..

XDSoft说:
得到参数后,自己重新见个实体

XDSoft说:
AcGeEntity3d::transformBy

XDSoft说:
你试试这个,能不能做

XDSoft说:
若能,最后在把GE实体转换成DB实体

dadao 说:
DB类型的pline可以转为AcGeEntity3d么

XDSoft说:
可以

XDSoft说:
根据参数构建啊

XDSoft说:
AcGeCurve3d

XDSoft说:
有了这个转换,

XDSoft说:
很多DB实体都可以用几何实体来代替运算

dadao 说:
:)

XDSoft说:
几何实体提供的图形学算法多

XDSoft说:
而且效率高

dadao 说:
我以前用得很少

XDSoft说:
因为没有AcDbEntity类的ID,层,线性等通用属性

XDSoft说:
几何库是ARX最好的地方

XDSoft说:
不用在考虑什么图形算法了,基本上都包括了

XDSoft说:
复杂的组合下就可以了

dadao 说:
好的

XDSoft说:
比如AcDbPolyline-->AcGeCompositeCurve2d后

XDSoft说:
对POLYLINE几何模型操作很方便

XDSoft说:
DB实体没有提供isOn方法

XDSoft说:
用几何AcGeEntity就有

XDSoft说:
还有求曲线间距的

XDSoft说:
DB就没有
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-5-16 21:47:12 | 显示全部楼层
也就是说AcDbPloyline没有transformBy 了?
麻烦大啦我!
意思是将AcDbPloyline的顶点transformBy一下,
再从新生成一个AcDbPloyline实体?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-5-17 00:15:12 | 显示全部楼层
最初由 bluesolar 发布
[B]也就是说AcDbPloyline没有transformBy 了?
麻烦大啦我!
意思是将AcDbPloyline的顶点transformBy一下,
再从新生成一个AcDbPloyline实体? [/B]


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 15:18 , Processed in 0.376620 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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