|
- ////将图形加载显示到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);
- }
- [it618postdisplay>0]
- ////创建填充======================
- 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);
- }
- [/it618postdisplay]
- //获得一层的所有对象,变色===============
- 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();
- }
复制代码 |
|