C++ CAD Arx二次开发用户交互

展开
一、本节课程
Arx二次开发用户交互
二、本节要讲解的知识点
1、用户交互的一些函数:acedGetXXX(acedGetString、acedGetPoint、acedGetInt acedGetKword、acedGetReal)。

2、动态创建多段线的实现。

3、acedGetPoint函数中使用关键字。

三、具体内容
1、acedGetString:获取用户输入的字符串

acedGetPoint:获取用户输入的点

acedGetInt:获取用户输入的整型

acedGetKword:获取用户输入的关键字

acedGetReal:获取用户输入的实数。

2、动态创建多段线:最基本的要求就是用户在图形窗口中按顺序拾取各个点,每次拾取一点都会将其加入到多段线的末端,最终按ENTER键或者ESC键就完成多段线的创建。

(1)拾取第一点;

(2)拾取第二点,创建多段线。

(3)如果没有按ENTER或ESC键,则拾取下一点,并将拾取的点添加到多段线的末尾。

(4)如果用户按ENTER或ESC键,退出程序的执行,多段线创建完毕,否则执行步骤3。

3、动态创建多段线(简单版、升级版)

static void YunyouMyGroupAddPolyBaic(void)

{

int index=2;

AcGePoint3d ptStart;

if (!CGetInputUtil::GetPoint(TEXT("\n please input first point:"),ptStart))

{

return;

}

AcGePoint3d ptPrevious,ptCurrent;

ptPrevious=ptStart;

AcDbObjectId polyId;

while (CGetInputUtil::GetPoint(ptPrevious,TEXT("\n please input NEXT point:"),ptCurrent))

{

if (index==2)

{

polyId=CPolylineUtil::Add(CConvertUtil::ToPoint2d(ptPrevious),CConvertUtil::ToPoint2d(ptCurrent));

}

else if(index>2)

{

AcDbPolyline *pPoly=NULL;

if (acdbOpenObject(pPoly,polyId,AcDb::kForWrite)==Acad::eOk)

{

pPoly->addVertexAt(index-1,CConvertUtil::ToPoint2d(ptCurrent));

pPoly->close();

}

}

ptPrevious=ptCurrent;

index++;

}

}

static void YunyouMyGroupAddPoly(void)

{

int colorIndex=0;

ads_real width=0;

int index=2;

AcGePoint3d ptStart;

if (!CGetInputUtil::GetPoint(TEXT("\n please input first point:"),ptStart))

{

return;

}

AcGePoint3d ptPrevious,ptCurrent;

ptPrevious=ptStart;

AcDbObjectId polyId;

acedInitGet(NULL,TEXT("W C O"));

int rc=CGetInputUtil::GetPointReturnCode(ptPrevious,

TEXT("\n输入下一点[宽度(W)/颜色(C)<完成(O)>:"),

ptCurrent);

while (rc==RTNORM || rc==RTKWORD)

{

if (rc==RTKWORD)

{

ACHAR kword[20];

if (acedGetInput(kword)!=RTNORM)

{

return;

}

if (_tcscmp(kword,TEXT("W"))==0)

{

width=GetWidth();

}

else if (_tcscmp(kword,TEXT("C"))==0)

{

colorIndex=GetColorIndex();

}

else if (_tcscmp(kword,TEXT("O"))==0)

{

return;

}

else

{

acutPrintf(TEXT("\n输入了无效的关键字"));

}

}

else if(rc==RTNORM)

{

if (index==2)

{

polyId=CPolylineUtil::Add(CConvertUtil::ToPoint2d(ptPrevious),CConvertUtil::ToPoint2d(ptCurrent));

AcDbPolyline *pPoly=NULL;

if (acdbOpenObject(pPoly,polyId,AcDb::kForWrite)==Acad::eOk)

{

pPoly->setConstantWidth(width);

pPoly->setColorIndex(colorIndex);

pPoly->close();

}

}

else if(index>2)

{

AcDbPolyline *pPoly=NULL;

if (acdbOpenObject(pPoly,polyId,AcDb::kForWrite)==Acad::eOk)

{

pPoly->addVertexAt(index-1,CConvertUtil::ToPoint2d(ptCurrent));

pPoly->setConstantWidth(width);

pPoly->setColorIndex(colorIndex);

pPoly->close();

}

}

ptPrevious=ptCurrent;

index++;

}

//

acedInitGet(NULL,TEXT("W C O"));

rc=CGetInputUtil::GetPointReturnCode(ptPrevious,TEXT("\n输入下一点[宽度(W)/颜色(C)<完成(O)>:"),ptCurrent);//

}

}

static void YunyouMyGroupGetPointKeyword(void)

{

int rc;

ACHAR kword[20];

AcGePoint3d pt;

acedInitGet(RSG_NONULL,TEXT("K W"));

rc=CGetInputUtil::GetPointReturnCode(TEXT("\n输入一个点或[Keyword1/KeyWord2]:"),pt);

switch (rc)

{

case RTKWORD:

if (acedGetInput(kword)!=RTNORM)

{

return;

}

if (_tcscmp(kword,TEXT("K"))==0)

{

acutPrintf(TEXT("\n 选择的关键字是Keyword1"));

}

else

{

acutPrintf(TEXT("\n 选择的关键字是Keyword2"));

}

break;

case RTNORM:

acutPrintf(TEXT("\n输入点的坐标是(%.2f,%.2f,%.2f)"),pt.x,pt.y,pt.z);

break;

default:

break;

}

}

四、总结
acedGetString:获取用户输入的字符串

acedGetPoint:获取用户输入的点

acedGetInt:获取用户输入的整型

acedGetKword:获取用户输入的关键字

acedGetReal:获取用户输入的实数

acedGetDist:获取用户输入的距离值

acedGetCorner:获取用户输入的角点

acedGetAngle:获取用户输入的角度

acedGetFileD:打开文件选择对话框获取用户输入的文件名
————————————————
版权声明:本文为CSDN博主「yunyouxy」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yunyouxy/article/details/81036230

原文地址:https://www.cnblogs.com/mjgw/p/12348003.html

时间: 2024-10-11 12:02:06

C++ CAD Arx二次开发用户交互的相关文章

手机,平板当中浏览和编辑DWG的CAD控件出来啦!支持ARX二次开发

控件2014.06.30 安卓开发最新更新 发布时间:2014-06-30 22:22:42 开发包下载地址:http://www.mxdraw.com/MxDraw6.0Android(20140630)TryVersion.exe 安卓手机上的apk安装包: http://www.mxdraw.com/MxDrawApp60.apk 安卓快速入门文档: http://www.mxdraw.com/AndroidDev.doc 1. 优化dwg显示速度,现在可以极速显示dwg,比市面上的任何软

Kinect 开发 &mdash;&mdash; 用户交互设计的若干思考

Metro 风格 windows 8 Kinect Hub 手势原型设计 悬停选择     翻页控制 关节点重叠的处理方法 将箭靶设置在画面的边缘,这样玩家持弓的角度与屏幕保持一个大约45度的锐角,这样Kinect可以很精确的检测到拉弓射箭的动作 手势天生具有一定随意性,而且具有一定的文化背景差异性   手与设备的非接触性 虚拟触摸的界面 Kinect 使交互"柔软化"   确认操作保持简单一致 悬停选择 -- 将手停在想要选择的项目方块或按钮上,等待进度圆圈的填充,这个过程会在T时间

4、c++ Arx二次开发创建多段线

一.本节课程 c++ Arx二次开发创建多段线 二.本节要讲解的知识点 如何应用C++ ARX二次开发创建多段线(AcDbPolyline.AcDb2dPolyLine.AcDb3dPolyline的使用) 三.具体内容 1.ARX提供了三种多段线相关的类:AcDbPolyline.AcDb2dPolyLine.AcDb3dPolyline.PLINE 创建的是AcDbPolyline,3DPOLY创建AcDb3dPolyline.创建一般的轻量多段线只需要调用AcDbPolyline的构造函数

5.c++ Arx二次开发创建椭圆和样条曲线

一.本节课程 c++ Arx二次开发创建椭圆和样条曲线 二.本节要讲解的知识点 1.如何应用C++ ARX二次开发创建椭圆(对AcDbEllipse类的构造函数的直接封装和根据外接矩形来创建椭圆) 2.如何应用C++ ARX二次开发创建样条曲线(对AcDbSpline类的构造函数的直接封装) 三.具体内容 1.创建椭圆的思路 有参数构造函数:AcDbEllipse( const AcGePoint3d& center, const AcGeVector3d& unitNormal, con

CAD.net二次开发--找到与制定点最近的2个实体

public static class Class2 { public static ObjectId[] fun(Point3d point) { Database db = HostApplicationServices.WorkingDatabase; Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; Point3dCollection points = new Point3dCollection(); Li

CAD.net 二次开发--输出点名和点坐标,点类型

[CommandMethod("aa", CommandFlags.UsePickSet)] public void aa() { Database db = HostApplicationServices.WorkingDatabase; Document doc = Application.DocumentManager.MdiActiveDocument; Editor ed = Application.DocumentManager.MdiActiveDocument.Edit

CAD.net二次开发--自动调成图框位置

[CommandMethod("mm")] public void mm() { Database db = HostApplicationServices.WorkingDatabase; Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; TypedValue[] values = new TypedValue[] { new TypedValue((int)DxfCode.LayerName,&quo

小程序短视频项目———开发用户登录注册(二)

一.Session之有状态会话与无状态会话基本概念 其实就是没用到缓存的,直接储存在主机内存上的一种session方法. 依靠redis的一套操作 Redis-session的好处 二.开发用户Redis-session 首先在com.imooc.common中新建工具类RedisOperator类,注意要加入@Component注解,因为他要作为组件注入到spring容器中. package com.imooc.utils; import java.util.Map; import java.

CAD二次开发控件,dwg控件,网页DWG控件,手机浏览编辑DWG控件

梦想绘图插件5.2(MxDraw5.2) 是国内最强,最专业的CAD开发插件(控件),不需要AutoCAD就能独立运行. 控件使用VC 2010开发,具有30万行代码规模,最早从2007年第一个版本完成,经过多年的累积已经非常稳定可靠,功能完善.有关键的空间搜索算法,并使用汇编优化,可以处理50万级实体,图形的显示和处理效率比同类产品高出很多. 梦想绘图3d插件6.0(MxDraw6.03d),使用二维控件的显示核心,基于 OpenCASCADE 几何造型引擎, 创建锥.柱.环等基本几何体, 对