明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1577|回复: 0

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

[复制链接]
发表于 2003-11-3 11:30:00 | 显示全部楼层 |阅读模式
首先,我在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();
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 21:35 , Processed in 0.152740 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表