ObjectArx学习笔记-创建多段线

简介: 1、创建一个工具类CTool。 Tool.h: static ads_real GetWidth();static int GetColorIndex(); Tool.cpp ads_real CTool::GetWidth(){ ads_real width = 0; if(acedGetReal(_T("\n输入线宽:"), &width)==RTNORM

1、创建一个工具类CTool。

Tool.h:

static ads_real GetWidth();
static int GetColorIndex();

Tool.cpp

ads_real CTool::GetWidth()
{
	ads_real width = 0;
	if(acedGetReal(_T("\n输入线宽:"), &width)==RTNORM)
	{
		return width;
	}
	else
	{
		return 0;
	}
}

int CTool::GetColorIndex()
{
	int colorIndex = 0;
	if(acedGetInt(_T("输入颜色索引值(0~256):"), &colorIndex) != RTNORM)
	{
		return 0;
	}

	while(colorIndex < 0 || colorIndex >256)
	{
		acedPrompt(_T("输入了错误的颜色索引值!"));
		if(acedGetInt(_T("输入颜色索引值(0~256)"), &colorIndex) != RTNORM)
		{
			return 0;
		}
	}

	return colorIndex;
}

2、添加命令AddPoly

实现代码如下:

static void qxzyAddPolyDynamicCommands_AddPoly(void)
	{
		// Add your code for command qxzyAddPolyDynamicCommands._AddPoly here
		int colorIndex = 0;
		ads_real width = 0;


		int index = 2;
		ads_point ptStart;

		if(acedGetPoint(NULL, _T("\n输入第一点:"), ptStart) != RTNORM)
			return;
		ads_point ptPrevious,ptCurrent;
		acdbPointSet(ptStart, ptPrevious);
		AcDbObjectId polyId;

		acedInitGet(NULL, _T("W C O"));
		int rc = acedGetPoint(ptPrevious,
			_T("\n输入下一点[宽度(W)/颜色(C)]<完成(O)>"), ptCurrent);
		while(rc == RTNORM || rc == RTKWORD)
		{
			if(rc == RTKWORD)
			{
				ACHAR kword[20];
				if(acedGetInput(kword)!=RTNORM)
					return;
				if(strcmp((LPSTR)(LPCTSTR)kword,"W")==0)
				{
					width = CTool::GetWidth();
				}
				else if(strcmp((LPSTR)(LPCTSTR)kword,"C")==0)
				{
					colorIndex = CTool::GetColorIndex();
				}
				else if(strcmp((LPSTR)(LPCTSTR)kword, "O")==0)
				{
					return;
				}
				else
				{
					acutPrintf(_T("\n无效的关键字"));
				}
			}
			else if(rc == RTNORM)
			{
				if(index == 2)
				{
					AcDbPolyline *pPoly= new AcDbPolyline(2);
					AcGePoint2d ptGe1,ptGe2;
					ptGe1[X]=ptPrevious[X];
					ptGe1[Y]=ptPrevious[Y];
					ptGe2[X]=ptCurrent[X];
					ptGe2[Y]=ptCurrent[Y];
					pPoly->addVertexAt(0, ptGe1);
					pPoly->addVertexAt(1, ptGe2);

					pPoly->setConstantWidth(width);
					pPoly->setColorIndex(colorIndex);

					AcDbBlockTable *pBlkTbl;
					acdbHostApplicationServices()->workingDatabase()
						->getSymbolTable(pBlkTbl, AcDb::kForRead);

					AcDbBlockTableRecord *pBlkTblRcd;
					pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd, AcDb::kForWrite);

					pBlkTblRcd->appendAcDbEntity(polyId, pPoly);

					pBlkTblRcd->close();
					pBlkTbl->close();
					pPoly->close();

				}
				else if(index>2)
				{
					AcDbPolyline *pPoly;
					acdbOpenObject(pPoly, polyId, AcDb::kForWrite);

					AcGePoint2d ptGe;
					ptGe[X]=ptCurrent[X];
					ptGe[Y]=ptCurrent[Y];

					pPoly->addVertexAt(index-1,ptGe);
					pPoly->setConstantWidth(width);
					pPoly->setColorIndex(colorIndex);

					pPoly->close();
				}
				index++;

				acdbPointSet(ptCurrent,ptPrevious);
			}

			acedInitGet(NULL, _T("W C O"));
			rc = acedGetPoint(ptPrevious,
				_T("\n输入下一点[宽度(W)/颜色(C)]<完成(O)>"), ptCurrent);
		}


	}


目录
相关文章
|
2月前
mapbox点位动态连线
【8月更文挑战第21天】
9 0
|
5月前
LabVIEW如何获取波形图上游标所在位置的数值
LabVIEW如何获取波形图上游标所在位置的数值
70 0
|
开发者 Kotlin
变“鼠”为“鸭”——为SVG Path制作FIFO路径变换动画,效果丝滑
曾撰文《使用batik在kotlin中将TTF字体转换为SVG图像》介绍了如何将汉字转为SVG Path路径进行展示和变换,以此为基础用动画将一个汉字变为另一个汉字,感官上很好玩
308 0
变“鼠”为“鸭”——为SVG Path制作FIFO路径变换动画,效果丝滑
|
BI C#
你听我说-HandyControl混搭LiveCharts图形路径偏移
你听我说-HandyControl混搭LiveCharts图形路径偏移
78 0
|
Java
CAD数据文件格式DXF部分实体(圆弧、椭圆、凸度)解析[原理讲解+公式推导+java实现]
CAD数据文件格式DXF部分实体(圆弧、椭圆、凸度)解析[原理讲解+公式推导+java实现]
336 0
|
图形学 Python
Maya实现合并点以及统一法线的python脚本代码
在3D建模软件maya中,若是有不规格模型的面法线相反,对点线面的移动会有相应的影响。以下代码可以帮助你快速实现统一法线合并点。 1.打开脚本编辑器,添加python脚本代码窗口。 2.快速实现合并点以及实现法线一致。这里会统一法线一致较多的方向,若是出现黑色,则是法线相反,点击反转法线即可。 import maya.cmds as cmds #全选合并点 cmds.selectType( v=True ) cmds.polyMergeVertex(d=0.0001) #法线一致 cmds.poly
438 0
Maya实现合并点以及统一法线的python脚本代码
探究--gazebo里 关节是如何动起来的____通过节点发布topic让关节转动
探究--gazebo里 关节是如何动起来的____通过节点发布topic让关节转动
探究--gazebo里 关节是如何动起来的____通过节点发布topic让关节转动
案例分享:Qt+OSG三维点云引擎(支持原点,缩放,单独轴或者组合多轴拽拖旋转,支持导入点云文件)
案例分享:Qt+OSG三维点云引擎(支持原点,缩放,单独轴或者组合多轴拽拖旋转,支持导入点云文件)
案例分享:Qt+OSG三维点云引擎(支持原点,缩放,单独轴或者组合多轴拽拖旋转,支持导入点云文件)
|
数据采集 缓存 异构计算
案例分享:Qt多段Y轴折线图框架(双Y轴段折线、支持拽拖、浮动游标显示X值各段Y值、支持大量实时显示下位机数据)
案例分享:Qt多段Y轴折线图框架(双Y轴段折线、支持拽拖、浮动游标显示X值各段Y值、支持大量实时显示下位机数据)
案例分享:Qt多段Y轴折线图框架(双Y轴段折线、支持拽拖、浮动游标显示X值各段Y值、支持大量实时显示下位机数据)
|
XML C++ 数据格式
【古月21讲】ROS入门系列(4)——参数使用与编程方法、坐标管理系统、tf坐标系广播与监听的编程实现、launch启动文件的使用方法
【古月21讲】ROS入门系列(4)——参数使用与编程方法、坐标管理系统、tf坐标系广播与监听的编程实现、launch启动文件的使用方法
256 0
【古月21讲】ROS入门系列(4)——参数使用与编程方法、坐标管理系统、tf坐标系广播与监听的编程实现、launch启动文件的使用方法