赞
踩
- 将图形加载显示到CAD===================
- static AcDbObjectId LoadEntity(AcDbEntity* entity){
- AcDbBlockTable* pBlockTable;
- acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead);
-
-
- AcDbBlockTableRecord* pBlockTableRecord;
- pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);
-
-
- AcDbObjectId Id;
- pBlockTableRecord->appendAcDbEntity(Id,entity);
-
-
- pBlockTable->close();
-
-
- pBlockTableRecord->close();
-
- entity->close();
- return Id;
- }
-
-
-
- 为图形添加标注
- static void AddOrdinate(AcGePoint3d ptStart,AcGePoint3d ptEnd,
- CString text){
-
-
- AcDbOrdinateDimension* pDim = new
- AcDbOrdinateDimension(true,ptStart,ptEnd,text);
-
-
- LoadEntity(pDim);
-
-
- }
-
-
-
-
- 画线====================
- static void TESTlineCmd()
- {
- //acutPrintf(_T("\nHello"));
-
- ads_point inputStart;
- ads_point inputEnd;
-
-
- AcGePoint3d ptStart;
- AcGePoint3d ptEnd;
-
-
- 用户输入要画的坐标
- if(acedGetPoint(NULL,_T("start point"),inputStart) != RTNORM){
- return;
- }
- ptStart[X] = inputStart[X];
- ptStart[Y] = inputStart[Y];
- ptStart[Z] = inputStart[Z];
-
- if(acedGetPoint(NULL,_T("end point"),inputEnd) != RTNORM){
-
- return;
- }
- ptEnd[X] = inputEnd[X];
- ptEnd[Y] = inputEnd[Y];
- ptEnd[Z] = inputEnd[Z];
-
-
- AcDbLine* pLine = new AcDbLine(ptStart,ptEnd);
- pLine->setColorIndex(2);
- LoadEntity(pLine);
-
- AddOrdinate(ptStart,ptEnd,_T("hi"));
- //AfxMessageBox(_T("命令画了一条线"));
- }
-
-
-
-
- 画圆形==========================
-
- static void TESTcirclecmd(){
- 垂直平面法向量
- AcGeVector3d vec(0,0,1);
- 圆心
- AcGePoint3d ptCenter(100,100,100);
-
-
- AcDbCircle* pCircle = new AcDbCircle(ptCenter,vec,1000);
-
- LoadEntity(pCircle);
- }
-
-
- 画圆弧================================
-
-
- static void TESTarccmd(){
- AcGeVector3d vec(0,0,1);
- AcGePoint3d ptCenter(500,500,500);
- AcDbArc* pArc = new AcDbArc(ptCenter,vec,700,0,90);
- LoadEntity(pArc);
- }
-
-
- 画多线段============================
-
-
- static void TESTpolycmd(){
-
- 构造多点数组
- AcGePoint2dArray points;
-
- AcGePoint2d pt1(1000, 1000);
- AcGePoint2d pt2(2000, 1800);
- AcGePoint2d pt3(500, 2000);
- AcGePoint2d pt4(3000, 5000);
- points.append(pt1);
- points.append(pt2);
- points.append(pt3);
- points.append(pt4);
-
-
- 绘制多点线段
- AcDbPolyline* pl = new AcDbPolyline(points.length());
- for(int i = 0;i < points.length();i ++){
-
- pl->addVertexAt(i,points.at(i),0,0.5,0.5);
- }
-
-
- LoadEntity(pl);
- }
-
- 绘制POLY3d线段====================
- static void TESTpoly3dcmd(){
-
- 构造多点数组
- AcGePoint3dArray points;
-
- AcGePoint3d pt1(10, 10,10);
- AcGePoint3d pt2(20, 10,20);
- AcGePoint3d pt3(20, 20,30);
- points.append(pt1);
- points.append(pt2);
- points.append(pt3);
-
-
- 绘制多点线段
- AcDb3dPolyline* pl = new AcDb3dPolyline(AcDb::Poly3dType::k3dSimplePoly,points);
-
-
- LoadEntity(pl);
- }
-
-
- 绘制椭圆=========================
- static void TESTellipsecmd(){
- 椭圆焦点
- /* AcGePoint2d p1(400,400);
- AcGePoint2d p2(800,400);*/
-
-
-
-
- 中心点
- AcGePoint3d ptCenter(600,400,0);
-
-
- AcGeVector3d vecNormal(0,0,1);
- 长轴
- AcGeVector3d majorAxis(1000,0,0);
-
-
- 通过曲率确定短轴长度
- double ratio = 0.6;
-
-
- AcDbEllipse* ae = new AcDbEllipse(/*AcGePoint3d::kOrigin*/ptCenter,vecNormal,majorAxis,
- ratio);
- LoadEntity(ae);
-
-
- }
-
-
-
-
- 创建样条曲线================
- static void TESTsplinecmd(){
- AcGePoint3d p1(0,0,0),p2(200,600,0),p3(1200,1600,0),
- p4(2000,2000,0);
- AcGePoint3dArray points;
- points.append(p1);
- points.append(p2);
- points.append(p3);
- points.append(p4);
-
- AcDbSpline* as = new AcDbSpline(points);
- LoadEntity(as);
-
-
- }
-
-
- 创建面域(把用直线创建的闭合图形,生成一个图形的对象)
- static void TESTregioncmd(){
-
- ads_name ss;
- 提示用户选择对象
- int rt = acedSSGet(NULL,NULL,NULL,NULL,ss);
- AcDbObjectIdArray ids;
-
-
- if(rt == RTNORM){
-
- long len;
- 获得对象个数
- acedSSLength(ss,&len);
- for(int i = 0;i < len;i ++){
-
- 先从对象中得到名字
- ads_name ent;
- acedSSName(ss,i,ent);
-
-
- 再从名字中取出ID
- AcDbObjectId objId;
- acdbGetObjectId(objId,ent);
- ids.append(objId);
- }
-
-
- }
-
-
-
- acedSSFree(ss);
-
-
- 得到objId数组之后,开始画区域
-
-
- CreateRegion(ids);
- }
-
-
- 绘制面域
- static AcDbObjectIdArray CreateRegion(AcDbObjectIdArray ids){
-
-
- AcDbObjectIdArray regionIds;
- AcDbVoidPtrArray curves;
- AcDbVoidPtrArray regions;
- AcDbEntity* pEnt;
- AcDbRegion* pRegion;
-
-
- for(int i = 0;i < ids.length();i ++){
-
- acdbOpenAcDbEntity(pEnt,ids.at(i),AcDb::kForRead);
-
- if(pEnt->isKindOf(AcDbCurve::desc())){
-
- curves.append(static_cast<void*>(pEnt));
- }
- }
-
-
- Acad::ErrorStatus es = AcDbRegion::createFromCurves(curves,regions);
- if(es == Acad::eOk){
-
- for(int i = 0;i < regions.length();i ++){
-
- pRegion = static_cast<AcDbRegion*>(regions[i]);
- pRegion->setDatabaseDefaults();
- AcDbObjectId regionId = LoadEntity(pRegion);
- regionIds.append(regionId);
- }
-
-
- CString tipStr ;
- tipStr.Format(_T("\n已成功创建面域:%d个"),regions.length());
-
- acutPrintf(tipStr);
- }
- else{
-
-
- for(int i = 0;i < regions.length();i ++){
-
- delete (AcRxObject*)regions[i];
- }
- }
-
-
- for(int i = 0;i < ids.length();i ++){
-
- pEnt = static_cast<AcDbEntity*>(curves[i]);
- pEnt->close();
- }
-
-
- return regionIds;
- }
-
-
- //绘制文字===================
- static void TESTtextcmd(){
-
- AcGePoint3d ptInsert(0,400,0);
-
- AcDbMText* pMText = new AcDbMText();
-
- 设置多行文字特性
-
-
- pMText->setContents(_T("hello!!"));
- pMText->setLocation(ptInsert);
- pMText->setTextHeight(1000);
- pMText->setWidth(1000);
- pMText->setAttachment(AcDbMText::kBottomLeft);
-
-
- LoadEntity(pMText);
-
-
- }
-
-
-
-
- 创建填充======================
- static void TESThatchcmd(){
-
- 提示用户选择填充边界
- ads_name ss;
- int rt = acedSSGet(NULL,NULL,NULL,NULL,ss);
- AcDbObjectIdArray objIds;
-
-
- if(rt == RTNORM){
-
- long len;
- acedSSLength(ss,&len);
- for(int i = 0;i < len;i ++){
-
- ads_name ent;
- acedSSName(ss,i,ent);
- AcDbObjectId objId;
- acdbGetObjectId(objId,ent);
- objIds.append(objId);
- }
- }
- acedSSFree(ss);
-
-
- 选择完毕,绘制填充
-
-
- Acad::ErrorStatus es;
- AcDbHatch* pHatch = new AcDbHatch();
-
-
- 选择填充平面
- AcGeVector3d normal(0,0,1);
- pHatch->setNormal(normal);
- pHatch->setElevation(0);
-
-
- 设置关联性
- pHatch->setAssociative(true);
-
- 设置填充图案
- pHatch->setPattern(AcDbHatch::kPreDefined,_T(/*"SOLID"*/"ANSI31"));
-
- 设置填充角度
- pHatch->setPatternAngle(45);
- 设置填充边界
-
-
- es=pHatch->appendLoop(AcDbHatch::kExternal,objIds);
-
-
- 显示填充对象
-
-
- es=pHatch->evaluateHatch();
- LoadEntity(pHatch);
- }
-
-
- 交互函数练习==================
-
-
- static void TESTinputcmd(){
- CString outStr;
- //acedGetReal
- /*ads_real realNum;
- acedGetReal(_T("输入一个实数"),&realNum);
- outStr.Format(_T("%lf"),realNum);
- acutPrintf(outStr);*/
- //acedGetInt
- /*int iNum;
- acedGetInt(_T("输入一个整数"),&iNum);
- outStr.Format(_T("%d"),iNum);
- acutPrintf(outStr);*/
- //acedGetString
- /*TCHAR str[256];
- acedGetString(0,_T("输入一个字符串"),str);
- acutPrintf(str);*/
- //acedGetKword
- /* TCHAR kw[256];
- acedGetKword(_T("输入一个关键字"),kw);
- acutPrintf(kw);*/
- //acedGetPoint
- /* ads_point pt;
- acedGetPoint(NULL,_T("输入一个点"),pt);
- outStr.Format(_T("x:%f,y:%f"),pt[X],pt[Y]);
- acutPrintf(outStr);*/
- //acedGetCorner(要与ads_point联合使用,完成画矩形)
- /*ads_point ptCorner;
- acedGetCorner(pt,_T("输入对角点"),ptCorner);
- outStr.Format(_T("x:%f,y:%f"),ptCorner[X],ptCorner[Y]);
- acutPrintf(outStr);*/
- //acedGetDist(和ads_point结合使用,实现画线)
- /*ads_real ptReal;
- acedGetDist(pt,_T("输入目标值"),&ptReal);
- outStr.Format(_T("%lf"),ptReal);
- acutPrintf(outStr);*/
- //acedGetAngle(和ads_point结合使用,实现画线)
- /* ads_real agReal;
- acedGetAngle(pt,_T("输入一个角度"),&agReal);
- outStr.Format(_T("%lf"),agReal);
- acutPrintf(outStr);*/
-
-
-
-
- }
-
-
-
-
-
-
-
- //获得一层的所有对象,变色===============
- static void TESTgetlayerobjcmd(){
-
-
-
- AcDbLayerTable *pLayerTbl;
- acdbHostApplicationServices()->workingDatabase()->getSymbolTable(
- pLayerTbl,AcDb::kForRead);
-
-
- if(!pLayerTbl->has(_T("测试"))){
-
- acutPrintf(_T("\n当前图形未包含'测试'图层"));
- pLayerTbl->close();
- return;
- }
- AcDbObjectId layerId;
- pLayerTbl->getAt(_T("测试"),layerId);
- pLayerTbl->close();
-
-
- 获得当前数据库的块表
- AcDbBlockTable* pBlkTbl;
- acdbHostApplicationServices()->workingDatabase()->getBlockTable(
- pBlkTbl,AcDb::kForRead);
- 获得模型空间的块表记录
- AcDbBlockTableRecord* pBlkTblRcd;
- pBlkTbl->getAt(ACDB_MODEL_SPACE,pBlkTblRcd,AcDb::kForRead);
- pBlkTbl->close();
-
-
- 创建块表记录遍历器
-
-
- AcDbBlockTableRecordIterator* pIter;
- pBlkTblRcd->newIterator(pIter);
- AcDbEntity* pEnt;
- for(pIter->start();!pIter->done();pIter->step()){
-
- pIter->getEntity(pEnt,AcDb::kForWrite);
- if(pEnt->layerId() == layerId){
-
-
- /*AcDbLine* pLine = AcDbLine::cast(pEnt);
- if(pLine != NULL){*/
-
- pEnt->setColorIndex(1);
- //}
- }
- pEnt->close();
- }
-
-
- delete pIter;
- pBlkTblRcd->close();
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。