文档章节

ObjectARX_transformBy移动、旋转、镜像、缩放实体

一个小妞
 一个小妞
发布于 2017/08/03 17:04
字数 399
阅读 400
收藏 1

transformBy:对实体进行几何变换。

移动:用transformBy把一个实体从a点移动到b点:(CAD命令:_move)

AcGePoint3d PointA;//A点坐标
AcGePoint3d PointB;//B点坐标
AcGeVector3d vec(PointA.x - PointB.x, PointA.y - PointB.y,PointA.z - PointB.z);
AcDbObjectId id;//实体id
AcGeMatrix3d matrix;
matrix.setToTranslation(PointA - PointB);或者matrix.setToTranslation(vec);
AcDbEntity* pObj=NULL;
acdbOpenObject(pObj,id, AcDb::kForWrite);
pObj->transformBy( matrix );
pObj->close();

全局函数AcAxMove 移动实体 :需要链接 axauto15.lib 库

BOOL AcMove(AcDbObjectId entId, const AcGePoint3d &ptFrom,const AcGePoint3d &ptTo)
{
// 将AcGePoint3d类型的点坐标进行类型转换
VARIANT *pvaFrom = Point3dToVARIANT(ptFrom);
VARIANT *pvaTo = Point3dToVARIANT(ptTo);
BOOL bRet = SUCCEEDED(AcAxMove(entId, *pvaFrom, *pvaTo));
delete pvaFrom;
delete pvaTo;
return bRet;
}
static VARIANT* Point3dToVARIANT(const AcGePoint3d &point)
{
COleSafeArray *psa = new COleSafeArray();
DOUBLE dblValues[] = {point[X], point[Y], point[Z]};
psa->CreateOneDim(VT_R8, 3, dblValues);
return (LPVARIANT)(*psa);
}

AcDbObject 类成员函数clone克隆:

BOOL CTransUtil::Copy(AcDbObjectId entId, const AcGePoint3d &ptFrom,const AcGePoint3d &ptTo)
{
AcDbEntity *pEnt = NULL;
if (acdbOpenObject(pEnt, entId, AcDb::kForRead) != Acad::eOk)
return FALSE;
AcDbEntity *pCopyEnt = AcDbEntity::cast(pEnt->clone());
AcDbObjectId copyEntId;
if (pCopyEnt)
copyEntId = PostToModelSpace(pCopyEnt);
Move(copyEntId, ptFrom, ptTo);//transformBy方法
return TRUE;
}

指定角度(用弧度值表示)旋转实体

double rotation;//旋转角度
AcDbObjectId entId;
AcGeMatrix3d xform;
AcGeVector3d vec(0, 0, 1);
xform.setToRotation(rotation, vec, CCalculation::Pt2dTo3d(ptBase));
AcDbEntity *pEnt=NULL;
Acad::ErrorStatus es = acdbOpenObject(pEnt, entId, AcDb::kForWrite,false);
pEnt->transformBy(xform);
pEnt->close();

缩放

AcDbObjectId entId;//实体id
AcGePoint3d ptBase;//基点
double scaleFactor;//缩放比例
AcGeMatrix3d xform;
xform.setToScaling(scaleFactor, ptBase);
AcDbEntity *pEnt;
Acad::ErrorStatus es = acdbOpenObject(pEnt, entId, AcDb::kForWrite,
false);
pEnt->transformBy(xform);
pEnt->close();

镜像

CMdGeLine3d line(m_ptSecond, m_ptFirst);//镜像线
AcDbObjectId entId;
AcGeMatrix3d xform;
xform.setToMirroring();
AcDbEntity *pEnt=NULL;
Acad::ErrorStatus es = acdbOpenObject(pEnt, entId, AcDb::kForWrite,false);
pEnt->transformBy(xform);
pEnt->close();

 

© 著作权归作者所有

一个小妞
粉丝 69
博文 193
码字总数 136789
作品 0
海淀
程序员
私信 提问
ObjectARX常用类和函数

(1)AcAx 开头的全局函数:这些函数通过 COM 的方式来让AutoCAD 完成一些操作。 (a) acutPrintf函数:在 AutoCAD 命令行显示指定的字符串 acutPrintf函数的具体用法如例: (b) AcAxMove 函数...

一个小妞
2016/10/20
800
0
2.5d 游戏开发引擎--IndieLib

IndieLib是一个 2.5d引擎,使用它可以简化游戏开发的难度,提高游戏开发的速度。内部它使用Direct3d做硬件加速,但它并没有使用DirectDraw或者 ID3DXSprite,而是直接将材质渲染在多边形上。...

匿名
2012/03/31
5.1K
0
6- OpenCV+TensorFlow 入门人工智能图像处理-图片移位

图片移位 opencvAPI实现 算法原理 源代码实现 原始图片和移位后图片 图片位移的算法原理 分析api实现原理 分析像素移动实现原理 偏移矩阵 完成矩阵的运算 输入的xy定义为C 结果: (10,20)->(1...

天涯明月笙
2018/05/05
0
0
基于ObjectARX的DWG文件访问初探

摘 要 AutoCAD的DWG格式文件是其它图形软件的主要数据源,常常需要将其转换成其它格式。本文在讨论了DWG文件访问方法的基础上,重点介绍了基于ObjectARX的DWG文件的访问步骤与读取方法,并给...

wwl33695
2014/04/17
0
0
cocos2d-x学习笔记-CCAction(动作)

CCAction及它的子类就是起着这样的作用,它是通过改变这些实体的属性实现的,下面是它的类结构图。 从结构图可以看出,动作类的基类是CCAction,通过继承它可以实现很多种动作。CCFiniteTim...

石头哥哥
2013/08/07
136
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
15
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
16
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部