leeyeafu 发表于 2003-11-3 11:30:00

To easypower:10-31晚聊天室遗留问题的解答:图层设置与线型加载

首先,我在ACAD 2004和VC.NET中使用以下代码指定实体(AcDbEntity)的图层没有任何问题,因为没看到你的代码,请你自己对照一下,看看你的问题出在哪。

void setNewLayer(void)   //不能用setLayer()函数名,这个函数名有点怪,将就一下哦
{
AcDbLayerTable *pLayerTbl;
acdbHostApplicationServices()->workingDatabase()
            ->getLayerTable(pLayerTbl,AcDb::kForRead );
AcDbLayerTableRecord *pLayerTblRcd;
if(pLayerTbl->getAt("MYNewLayer",pLayerTblRcd,AcDb::kForRead )!=Acad::eOk)
//若图形中没有你要设置的图层
   {
      acutPrintf("No This LayerName In Drawing") ;
      pLayerTblRcd->close();
      pLayerTbl->close();
      return;
    }
    pLayerTbl->close();
   //以下添加一条直线,用于以后操作,以便检验程序
   AcGePoint3d startPoint(5.0,4.0,0.0);
   AcGePoint3d endPoint(2.0,10.0,0.0);
   AcDbLine *pLine=new AcDbLine(startPoint,endPoint);
//以下调用AcDbEntity::setLayer()函数,其参数可以是char *类型或CString类型,
//我没有试其它类似_bstr_t的COM类型。
//该函数的另一个重载版本使用一个图层的AcDbObjectId对象为输入参数,
//这两种方式我都试过,没有问题。
pLine->setLayer("MYNewLayer");
pLayerTblRcd->close();
//以下代码演示如何加载线型
AcDbLinetypeTable *pLtypeTbl;   //线型表指针
acdbHostApplicationServices()->workingDatabase()
      ->getSymbolTable(pLtypeTbl,AcDb::kForWrite );//获取当前图形的线型表
AcDbLinetypeTableRecord *pLtypeTblRcd;
if(pLtypeTbl->getAt("HIDDEN",pLtypeTblRcd,AcDb::kForRead )!=Acad::eOk)
//若当前图形的线型表中没有你要的HIDDEN线型
{
      //调用AcDbDatabase::loadLineTypeFile()函数加载线型。
      //若该函数调用成功,HIDDEN线型已经加入到线型表中了。
      acdbHostApplicationServices()->workingDatabase()
               ->loadLineTypeFile("HIDDEN","acadiso.lin");
        //pLtypeTbl->getAt("HIDDEN",pLtypeTblRcd,AcDb::kForRead );
}
pLine->setLinetype("HIDDEN");
pLtypeTblRcd->close();
pLtypeTbl->close();
//以下代码将修改了图层和线型的直线加入当前图形数据库,用于在ACAD界面中显示
AcDbBlockTable *pBlockTable;
acdbHostApplicationServices()->workingDatabase()
         ->getSymbolTable(pBlockTable,AcDb::kForRead);
AcDbBlockTableRecord *pBlockTableRecord;
pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);
pBlockTable->close();
AcDbObjectId lineId;
pBlockTableRecord->appendAcDbEntity(lineId,pLine);
pBlockTableRecord->close();
pLine->close();
}
页: [1]
查看完整版本: To easypower:10-31晚聊天室遗留问题的解答:图层设置与线型加载