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

一个小妞

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

``````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();``````

``````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;
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();``````

### 一个小妞

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 入门人工智能图像处理-图片移位

2018/05/05
0
0

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

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

2013/08/07
136
0

java通过ServerSocket与Socket实现通信

Blueeeeeee

6
0

5
0

15
0

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

16
0
jquery--DOM操作基础

7
0