设为首页收藏本站

中国膜结构网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

膜结构车棚
膜结构车棚膜结构资质国产膜材 膜结构网中国膜结构协会
查看: 249|回复: 2

ObjectArx图层操作总结

[复制链接]
  • TA的每日心情
    开心
    2021-6-19 14:40
  • 签到天数: 1539 天

    [LV.Master]伴坛终老

    发表于 2020-12-29 15:52 | 显示全部楼层 |阅读模式
    1. 1. 新建一个图层
    2. CLayerOperator定义了NewLayer函数,用于完成图层的新建操作,NewLayer的完整代码如下:

    3.         // 新建一个图层
    4.         void CLayerOperator::NewLayer(ACHAR* layerName)
    5.         {
    6.             //获得当前图形的层表
    7.             AcDbLayerTable *pLayerTbl;
    8.             acdbHostApplicationServices()
    9.                 ->workingDatabase()
    10.                 ->getLayerTable(pLayerTbl,AcDb::kForWrite);

    11.     //是否已经包含指定的层表记录
    12.     if(pLayerTbl->has(layerName)){
    13.         pLayerTbl->close();
    14.         acedPrompt(_T("对应名称的图层已经存在!"));
    15.         return;
    16.     }

    17.     //创建层表记录
    18.     AcDbLayerTableRecord *pLayerTblRcd;
    19.     pLayerTblRcd=new AcDbLayerTableRecord();
    20.     pLayerTblRcd->setName(layerName);        //这里的layerName需要用(_T("?"))这种格式来命名

    21.     //将新建的层表记录添加到层表中
    22.     AcDbObjectId layerTblRcdId;
    23.     pLayerTbl->add(layerTblRcdId,pLayerTblRcd);

    24.     //设置图形的当前图层
    25.     acdbHostApplicationServices()
    26.         ->workingDatabase()
    27.         ->setClayer(layerTblRcdId);
    28.         //关闭层表
    29.     pLayerTblRcd->close();
    30.     pLayerTbl->close();
    31.         }


    32. NewLayer的具体实现注释已经非常详尽,首先获得当前图形的层表,然后判断层表中是否已经存在指定名称的图层,如果是,则直接返回,否则创建层表记录并将新建的层表记录添加到层表中,最后通过AcDbDatabase类的setClayer函数将新建的图层设置成当前图层。

    33. 2.使用图形对话框设置指定图层的颜色
    34. // 使用图形对话框设置指定图层的颜色
    35. void CLayerOperator::SetLayerColor(ACHAR* layerName)
    36. {
    37.     //获得当前图形的层表
    38.     AcDbLayerTable *pLayerTbl;
    39.     acdbHostApplicationServices()
    40.         ->workingDatabase()
    41.         ->getLayerTable(pLayerTbl,AcDb::kForRead);
    42.     //判断是否包含指定名称的层表记录
    43.     if(!pLayerTbl->has(layerName)){
    44.         pLayerTbl->close();
    45.         return;
    46.     }
    47.     //获得指定层表记录的指针
    48.     AcDbLayerTableRecord *pLayerTblRcd;
    49.     pLayerTbl->getAt(layerName,pLayerTblRcd,AcDb::kForWrite);
    50.     //弹出“颜色”对话框
    51.     AcCmColor oldColor=pLayerTblRcd->color();
    52.     //图层修改前的颜色
    53.     int nCurColor=oldColor.colorIndex();
    54.     //用户选择的颜色
    55.     int nNewColor=oldColor.colorIndex();
    56.     if(acedSetColorDialog(nNewColor,Adesk::kFalse,nCurColor)){
    57.         AcCmColor color;
    58.         color.setColorIndex(nNewColor);
    59.         pLayerTblRcd->setColor(color);
    60.     }
    61.     //关闭层表
    62.     pLayerTblRcd->close();
    63.     pLayerTbl->close();
    64. }

    65. 3.删除一个图层
    66. // 删除一个图层
    67. void CLayerOperator::DelLayer(ACHAR* layerName)
    68. {
    69.     //获得当前图形的层表
    70.     AcDbLayerTable *pLayerTbl;
    71.     acdbHostApplicationServices()
    72.         ->workingDatabase()
    73.         ->getLayerTable(pLayerTbl,AcDb::kForRead);
    74.     //判断是否包含指定名称的层表记录
    75.     if(!pLayerTbl->has(layerName)){
    76.         pLayerTbl->close();
    77.         return;
    78.     }
    79.     //获得指定层表记录的指针
    80.     AcDbLayerTableRecord *pLayerTblRcd;
    81.     pLayerTbl->getAt(layerName,pLayerTblRcd,AcDb::kForWrite);
    82.     //为其设置“删除”标记
    83.     pLayerTblRcd->erase();
    84.     pLayerTblRcd->close();                //关闭层表
    85.     pLayerTbl->close();
    86. }
    复制代码
    回复


    http://www.mjgw.org/ 专业从事膜结构设计、制作加工、施工安装的膜结构工程服务,能够为客户提供专业的膜结构整体解决方案。做中国最好的膜结构综合服务平台。欢迎大家联系电话:198-7840-1958,QQ:463017170.
    相关关键词:膜结构车棚,膜结构车棚覆盖,膜结构车棚公司,膜结构车棚多少钱,膜结构车棚厂家,膜结构车棚价格,社区膜结构车棚,膜结构车棚膜布厂家 ,膜结构车棚哪家好,膜结构车棚多少钱一米,膜结构车棚报价,膜结构车棚哪里有,膜结构车棚定制,膜结构车棚安装,膜结构车棚设计,膜结构车棚电话,膜结构车棚加工,膜结构车棚膜布价格,膜结构车棚批发,膜结构车棚制造商,膜结构车棚生产厂家,膜结构车棚设计,膜结构车棚施工,膜结构车棚多少钱一平米,膜结构车棚订制,张拉膜车棚,张拉膜车棚覆盖,张拉膜车棚公司,张拉膜车棚多少钱,张拉膜车棚厂家,张拉膜车棚价格,社区张拉膜车棚,张拉膜车棚膜布厂家 ,张拉膜车棚哪家好,张拉膜车棚多少钱一米,张拉膜车棚报价,张拉膜车棚哪里有,张拉膜车棚定制,张拉膜车棚安装,张拉膜车棚设计,张拉膜车棚电话,张拉膜车棚加工,张拉膜车棚膜布价格,张拉膜车棚批发,张拉膜车棚制造商,张拉膜车棚生产厂家,张拉膜车棚设计,张拉膜车棚施工,张拉膜车棚多少钱一平米,张拉膜车棚订制,常用膜材品牌:德国杜肯、法国法拉利、德国海德斯、德国米乐、日本平岗、韩国秀博、比利时希运、美国赫虏伯、中国科宝、上海慧遥。

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-19 14:40
  • 签到天数: 1539 天

    [LV.Master]伴坛终老

     楼主| 发表于 2020-12-29 15:53 | 显示全部楼层
    1.     AcDbEntity *pEnty = NULL;
    2. AcDbObjectId idEnty; //传如打开的实体ID,事先必须先获取到。否则会打开失败
    3. Acad::ErrorStatus es;
    4. es = acdbOpenObject(pEnty, idEnty, AcDb::kForWrite);
    5. if (es == Acad::eOk)
    6. {

    7. pEnty->setLayer(_T("0图层")); //设置实体所在的图层
    8. pEnty->close();
    9. }
    复制代码
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-19 14:40
  • 签到天数: 1539 天

    [LV.Master]伴坛终老

     楼主| 发表于 2020-12-29 15:53 | 显示全部楼层
    1. //设置所有有图层颜色为黑色 BEGIN
    2.         AcDbDatabase *  db;
    3.         //AcTransaction * tran;

    4.         db  =  acdbHostApplicationServices() -> workingDatabase();

    5.         //tran = db->transactionManager()->startTransaction();

    6.         AcDbLayerTable * pLayerTable;
    7.         AcDbLayerTableRecord *pLayerTblRcd;
    8.         AcDbLayerTableIterator *pLayerTableIterator;

    9.         db->getLayerTable(pLayerTable,AcDb::kForWrite);

    10.         pLayerTable->newIterator(pLayerTableIterator);
    11.         //char *pLayerName;
    12.         for(int i=1;!pLayerTableIterator->done();pLayerTableIterator->step(),i++){
    13.                 pLayerTableIterator->getRecord(pLayerTblRcd,AcDb::kForWrite);
    14.                 //pLayerTblRcd->getName(pLayerName);
    15.                 AcCmColor color;
    16.                 color.setRGB(0,0,0);
    17.                 pLayerTblRcd->setColor(color);
    18.                 pLayerTblRcd->close();
    19.         }

    20.         delete pLayerTableIterator;
    21.         pLayerTable->close();

    22.         //设置所有有图层颜色为黑色 END
    复制代码
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    推荐膜材品牌上一条 /6 下一条

    进口膜材 国产膜材 pvdf膜材ptfe膜材ETFE膜材
    最好的膜结构公司 一级膜结构资质 膜结构一级资质
    膜结构设计-膜结构十大品牌-etfe设计-充气膜结构
    诺科膜结构
    遨都膜结构设计
    中国膜结构网
    中国空间膜结构

    QQ|申请友链|手机版|中国膜结构论坛