//拷贝,移动,旋转 ,镜像,缩放

选择一个对象
static BOOL SelObj(ads_point& pt,AcDbObjectId& objId){
ads_name en;
if(acedEntSel(_T("\n选择对象"),en,pt) != RTNORM){
return false;
}
Acad::ErrorStatus es = acdbGetObjectId(objId,en);
return es == Acad::ErrorStatus::eOk ? true : false;
}

//选择一个点
static BOOL SelPoint(ads_point& ptEnd){
if(acedGetPoint(NULL,_T("\n选择一个点"),ptEnd) != RTNORM){
return false;
}
return true;
}

拷贝函数测试

static void TESTcopycmd(){
AcDbObjectId objId;
ads_point ptStart;
ads_point ptEnd;

if(!SelObj(ptStart,objId)){
acutPrintf(_T("选择对象失败"));
};

if(!SelPoint(ptEnd)){
acutPrintf(_T("选择点失败"));
}

CopyTo(objId,ptStart,ptEnd);

}

拷贝函数

static BOOL CopyTo(AcDbObjectId entId,const ads_point& ptFrom,
const ads_point& 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 = LoadEntity(pCopyEnt);
}

Move(copyEntId,ptFrom,ptTo);

}

移动函数测试============
static void TESTmovecmd(){
AcDbObjectId objId;
ads_point ptStart;
ads_point ptEnd;

if(!SelObj(ptStart,objId)){
acutPrintf(_T("选择对象失败"));
};

if(!SelPoint(ptEnd)){
acutPrintf(_T("选择点失败"));
}

Move(objId,ptStart,ptEnd);

}

移动函数
static Acad::ErrorStatus Move(AcDbObjectId entId,const ads_point& ptFrom,const ads_point& ptTo){

AcGeVector3d vec(ptTo[X] - ptFrom[X],ptTo[Y] - ptFrom[Y],
ptTo[Z] - ptFrom[Z]);

AcGeMatrix3d mat;
mat.setToTranslation(vec);
AcDbEntity* pEnt = NULL;
Acad::ErrorStatus es = acdbOpenObject(pEnt,entId,AcDb::kForWrite);
if(es!=Acad::eOk){
return es;
}

es=pEnt->transformBy(mat);
pEnt->close();

}

缩放
static void TESTsccmd()
{
ads_name name;
ads_point ptEnt;
AcDbObjectId id;
if(acedEntSel(_T("选择要扩大的实体"),name,ptEnt) != RTNORM)
{
acutPrintf(_T("\nno obj select"));
return;
}
if(Acad::ErrorStatus::eOk != acdbGetObjectId(id,name))
{
return;
}
AcDbEntity* pEnt;

if(Acad::ErrorStatus::eOk != acdbOpenObject(pEnt,id,AcDb::OpenMode::kForWrite))
{
acutPrintf(_T("\n打开实体失败"));
return;
}

ads_real num;
if(acedGetReal(_T("\n输入扩展倍数"),&num) != RTNORM)
{
pEnt->close();
return;
}

ads_point pt;
if(acedGetPoint(NULL,_T("\n选择基点"),pt) != RTNORM)
{
pEnt->close();
return;
}

AcGePoint3d pt3d = asPnt3d(pt);
AcGeMatrix3d mat;
mat.setToScaling(num,pt3d);

pEnt->transformBy(mat);
pEnt->close();

}

旋转
static void TESTrtcmd()
{
ads_name name;
ads_point ptEnt;
AcDbObjectId id;
if(acedEntSel(_T("选择要旋转的实体"),name,ptEnt) != RTNORM)
{
acutPrintf(_T("\nno obj select"));
return;
}
if(Acad::ErrorStatus::eOk != acdbGetObjectId(id,name))
{
return;
}
AcDbEntity* pEnt;

if(Acad::ErrorStatus::eOk != acdbOpenObject(pEnt,id,AcDb::OpenMode::kForWrite))
{
acutPrintf(_T("\n打开实体失败"));
return;
}

ads_point ptBase;
if(acedGetPoint(NULL,_T("\n选择旋转的基点"),ptBase) != RTNORM)
{
pEnt->close();如果不及时关闭,会导致内存泄漏
return;
}

ads_real angle;
if(acedGetAngle(ptBase,_T("\n输入旋转角度"),&angle) != RTNORM)
{
pEnt->close();
return;
}
AcDbCurve* pCurve;
pCurve = (AcDbCurve*)pEnt;

AcGePoint3d ptCenter;
pCurve->getStartPoint(ptCenter);

AcGeMatrix3d mat;
acutPrintf(_T("angle is %.2f"),angle);
mat.setToRotation(angle,AcGeVector3d::kZAxis,ptCenter);
//mat.rotation(angle,AcGeVector2d::kXAxis,ptCenter);

pEnt->transformBy(mat);
pEnt->close();
}

镜像
static void TESTmrcmd()
{
ads_name name;
ads_point ptEnt;
AcDbObjectId id;
if(acedEntSel(_T("选择要镜像的实体"),name,ptEnt) != RTNORM)
{
acutPrintf(_T("\nno obj select"));
return;
}
if(Acad::ErrorStatus::eOk != acdbGetObjectId(id,name))
{
return;
}
AcDbEntity* pEnt;

if(Acad::ErrorStatus::eOk != acdbOpenObject(pEnt,id,AcDb::OpenMode::kForWrite))
{
acutPrintf(_T("\n打开实体失败"));
return;
}

ads_point ptDis1;
if(acedGetPoint(NULL,_T("\n选择镜像点1"),ptDis1) !=RTNORM)
{
acutPrintf(_T("\nno point select"));
pEnt->close();
return;
}
ads_point ptDis2;
if(acedGetPoint(NULL,_T("\n选择镜像点2"),ptDis2) !=RTNORM)
{
acutPrintf(_T("\nno point select"));
pEnt->close();
return;
}

AcGePoint3d ptDis3d1 = asPnt3d(ptDis1);
AcGePoint3d ptDis3d2 = asPnt3d(ptDis2);
AcGeLine3d line(ptDis3d1,ptDis3d2);

AcGeMatrix3d mat ;
mat.setToMirroring(line);

acedInitGet(NULL,_T("Y N"));
CString strKW;

if(acedGetKword(_T("删除原对象?Y/N"),strKW.GetBuffer(1)) != RTNORM)
{
return;
}
strKW.ReleaseBuffer();
if(strKW.CompareNoCase(_T("N")) == 0)
{
AcDbEntity* pEnt2 = AcDbEntity::cast(pEnt->clone());
LoadEntity(pEnt2);
pEnt2->close();
}

pEnt->transformBy(mat);
pEnt->close();

}

}

OBJECT ARX 移动,拷贝 旋转,镜像,缩放相关推荐

  1. matlab实现彩色图像的平移、旋转、缩放、镜像(双线性插值)

    matlab双线性插值实现彩色图像的平移.旋转.缩放.镜像 原理概述 代码 平移 镜像 缩放 旋转 结果 原图 平移(向X正方向.Y正方向50个距离单位) 镜像(左右.上下) 缩放(查看分辨率可知是否 ...

  2. C#图像处理-OpenCVSharp教程(十二) OpenCVSharp图像几何变换:平移、旋转、缩放、转置和镜像等

    本文作者Color Space,文章未经作者允许禁止转载! 本文将介绍OpenCVSharp图像几何变换:平移.旋转.缩放.转置和镜像等! 一.图像缩放 // 图像缩放-- - Resize Mat ...

  3. Python 读取图,旋转,缩放(PIL, matplotlib)

    Python 读取图,旋转,缩放(PIL, matplotlib) 2017-05-03 12:54 1133人阅读 评论(0) 收藏 举报  分类: python(20)  版权声明:本文为博主原创 ...

  4. mesh threejs 属性_threeJS创建mesh,创建平面,设置mesh的平移,旋转、缩放、自传、透明度、拉伸...

    这个小案例是当初我在学习的时候,小的一个小案例,代码还需要进一步优化:还请谅解~~:主要用到了threeJS创建mesh,创建平面,设置mesh的平移,旋转.缩放.自传.透明度.拉伸等这些小功能: 采 ...

  5. 【J2me3D系列学习文章之三】(立即模式)对立方体进行变换操作-旋转、缩放、平移...

     本文源地址:http://blog.csdn.net/xiaominghimi/archive/2010/12/09/6064367.aspx  Himi  原创, 转载请注明! 谢谢. 上一篇文章 ...

  6. RuntimeTransformGizmo:位移、旋转、缩放插件

    写在前面:本文主要讲述插件的API,相关的基础操作,本站有相关的帖子,请自行搜索学习: PS:本文中的所有示例均来自插件的官方文档,如有不清楚或者不理解的地方可以去翻一下文档 插件下载地址:点此下载 ...

  7. MFC+OpenGL三维绘图(一)——简单绘图平台的搭建与实现图像的旋转、缩放

    声明:本文章为小白本人第一次创作,文章可能会有诸多不足,希望大家批评指正! VS2013下载:https://pan.baidu.com/s/1Y7TuZlLaGsbj2KCZV_uckw OpenG ...

  8. Unity3D Runtime Transform Gizmos运行时移动、旋转、缩放模型

    这款在商店上卖35美元的插件,实用性非常强. 有需要的可以直接在我的CSDN库里下载: Unity3DRuntimeTransformGizmos运行时移动.旋转.缩放模型的插件工程文件-Swift文 ...

  9. Python之OpenGL笔记(26):不动点与旋转和缩放

    一.目的 1.画一组绕不动点旋转的正方体: 二.程序运行结果 三.为什么需要模型变换   OpenGL中的坐标处理过程包括模型变换.视变换.投影变换.视口变换等内容 具体过程如下图2所示:   我们在 ...

最新文章

  1. 查看端口号被哪个程序占用
  2. windows tracert 命令 查看路由表
  3. grep,egrep及元字符和posix字符集
  4. (chap8 确认访问用户身份的认证) DIGES认证(摘要认证)
  5. 红黑树(一)之 原理和算法详细介绍
  6. java类验证和装载顺序_Java类加载机制实现流程及原理详解
  7. 设树采用孩子兄弟表示法存放.用类c语言设计算法计算树的高度.,(数据结构课程设计分类题目.doc...
  8. 【MySQL】Path does not chain with any of the trust anchors
  9. log4j + flume 1.6 集成
  10. 【2017-12-06】c#基础-分支语句and循环语句
  11. 【数据结构_浙江大学MOOC】第六七八讲 图
  12. build_doxygen_报找不到iconv.....
  13. 多点最小二乘法平面方程拟合计算与代码实现
  14. 撩课-Java面试宝典-第十六篇
  15. 在Excel中如何实现快速互换两列内容
  16. 金蝶实现EXCEL复制粘贴功能
  17. 数据库--MySQL
  18. __stack_chk_fail之栈帧溢出检测技术
  19. Sublime 如何替换换行符
  20. emlog某涛娱乐资源网源码 自带200多条数据打包

热门文章

  1. 【酷熊科技】工作积累 ----------- unity scrollview 点击后会有偏移问题(有图片)
  2. 参数估计—最大似然估计与贝叶斯估计
  3. QPushbutton之setProperty
  4. 解决端口号冲突(两种解决方案)
  5. android 游戏开发之物理小球的应用
  6. 无偏移谷歌瓦片地址_OpenLayers加载百度离线瓦片地图(完美无偏移)
  7. 趋势拟合策略量化分析
  8. html中圆的面积怎么计算,圆的面积怎么算 圆的计算公式是什么
  9. swing java_Java Swing 介绍
  10. Jupyter 介绍、安装及使用