环境设置把dwg信息读到文本文件绘制简单表格的例程代码
环境设置

控件目前提供常用的ARX编程接口,下面演示一些ARX编程接口的使用。

把dwg信息读到文本文件

获得当前活动的McDbDatabase数据库的代码如下:

McDbDatabase * pDatabase = Mx::mcdbHostApplicationServices()->workingDatabase();


打开数据库中的模型空间块表记录的代码如下(使用智能指针的方式打开):


  • ter spBlockRecord(ACDB_MODEL_SPACE, pDatabase, AcDb::kForRead);                            
    if (Acad::eOk == spBlockRecord.openStatus())
        return;


创建块表记录遍历使用的迭代器的代码如下:


  • AcDbBlockTableRecordIterator * pIter = nullptr;
    spBlockRecord->newIterator(pIter);
    for (pIter->start();!pIter->done();pIter->step())
    {
    	AcDbEntity * pEnt = nullptr;
    	if (pIter->getEntity(pEnt, AcDb::kForRead) != Acad::eOk)
    		continue;
    		
    	//对实体的信息的使用...
    
    	pEnt->close();
    }


释放迭代器的内存,打开实体的代码如下:


  • McDbObjectPointer<McDbEntity> spEnt(id,McDb::kForRead);


判断实体是否是一个圆的代码如下:


  • if(McDbCircle::cast(spEnt.object()) != NULL)
    {
            //.......
    }
绘制简单表格的例程代码

绘表过程,就是往McDbDatabase数据库添加实体的过程,详细代码可参考控件\Src\MxDraw5.2\samples\Edit实例的代码,运行效果如下所示:


1.png


绘表算法这里不再赘述,若需要可参见上述的实例,这里将演示部分关于ARX的代码。 把图元对象添加到数据库的模型空间中的代码如下:


  • AcDbObjectId
    CDrawTable::AddToModelSpace(AcDbEntity* pEntity,AcDbDatabase* pDatabase)
    {
        AcDbObjectId objId;	 
    	AcDbBlockTableRecordPointer spBlkRec(ACDB_MODEL_SPACE,pDatabase,AcDb::kForWrite);
    	if(spBlkRec.openStatus() != Acad::eOk)
    		return AcDbObjectId::kNull;
    	spBlkRec->appendAcDbEntity(objId, pEntity);
        pEntity->close();
        return objId;
    }


往数据库中画一条直线的代码如下:


  • AcDbObjectId CDrawTable::DrawLine(AcGePoint3d pt1,AcGePoint3d pt2,double dLineWidth,AcDbDatabase* pDatabase)
    {
    	if(fabs(dLineWidth) <= 0.00001)
    	{
    		AcDbLine* pLine = new AcDbLine(pt1,pt2);
    
    		// test
    		//pLine->setLineWeight(McDb::kLnWt015);
    
    		return AddToModelSpace(pLine,pDatabase);
    	}
    	else
    	{
    
    		AcDbPolyline* pPL = new AcDbPolyline;
    		pPL->setConstantWidth(dLineWidth);
    		pPL->addVertexAt(0,pt1.convert2d(AcGePlane::kXYPlane));
    		pPL->addVertexAt(1,pt2.convert2d(AcGePlane::kXYPlane));
    		return AddToModelSpace(pPL,pDatabase);
    	}
    }


居中方式绘制一段文字的代码如下:


  • AcDbObjectId CDrawTable::DrawMCText(AcGePoint3d pt,const CString& sTxt,double dTextHeight,AcDbDatabase* pDatabase)
    {
    	AcDbText *pText = NULL;
    	pText = new AcDbText;
    	
    	pText->setHorizontalMode(AcDb::kTextCenter);
    	pText->setVerticalMode(AcDb::kTextVertMid);
    	//pText->setVerticalMode(AcDb::kTextBottom);
    	pText->setPosition(pt);
    	pText->setAlignmentPoint(pt);
    	pText->setTextString(sTxt);
    	pText->setHeight(dTextHeight );
    	pText->setColorIndex(MrxDbgUtils::kGreen);
    
    	// test
    	//pText->setRotation(3.14159265 / 4.0);
    
    	return AddToModelSpace(pText,pDatabase);
    }
MxDraw
MxDraw是由梦想凯德基于AutoDesk CAD平台开发的软件,拥有完全自主的核心技术和知识产权。MxDraw致力于为各企业提供最优秀的CAD平台整体解决方案。
技术服务
TEL:400-888-5703
185-8173-1060
QQ:827867134,6884123
产品购买
TEL:400-888-5703
185-8173-1060
QQ:827867134,6884123
用户交流
QQ群1:827867134
QQ群2:827867134
QQ群3:827867134