天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 12|回复: 0

objectArx之层表——字体样式表

[复制链接]
  • TA的每日心情
    开心
    昨天 15:23
  • 签到天数: 69 天

    [LV.6]常住居民II

    410

    主题

    167

    回帖

    2704

    积分

    管理员

    积分
    2704
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    Layer.h
    #pragma once
    class Layer
    {
    public:
            Layer();
            ~Layer();
            // 添加图层:图层名(其实是层表记录的name值)、颜色索引值
            static AcDbObjectId Add(const ACHAR *name, int colorIndex = 7);
            // 获取图层id:图层名
            static AcDbObjectId GetLayerId(const ACHAR *name);
            // 设置图层颜色:图层名、颜色索引值
            static bool  SetColor(const ACHAR *name, int colorIndex);
            // 获取 所有 层表记录id 的 列表
            static void GetLayerList(AcDbObjectIdArray &layIds);
    };



    Layer.cpp
    #include "stdafx.h"
    #include "Layer.h"


    Layer::Layer(){}
    Layer::~Layer(){}

    // 添加图层:图层名(其实是层表记录的name值)、颜色索引值
    AcDbObjectId Layer::Add(const ACHAR *name, int colorIndex)
    {        // 断言图层名不为空、颜色索引值在范围内
            assert(name != NULL);
            assert(colorIndex >= 1 && colorIndex <= 255);
            AcDbObjectId layerId;

            // 获得层表指针
            AcDbLayerTable *pLayTbl = NULL;
            acdbHostApplicationServices()->workingDatabase()->
                                    getLayerTable(pLayTbl, AcDb::kForWrite);
            // 检索层表:通过图层名判断是否有图层(has其实调用了getIdAt)
            if (!pLayTbl->has(name))
            {        // 新建块表记录:设置层名
                    AcDbLayerTableRecord *pLayTblRcd = new AcDbLayerTableRecord();
                    pLayTblRcd->setName(name);
                    // 新建颜色对象:设置颜色索引值,添加进层表记录
                    AcCmColor color;
                    color.setColorIndex(colorIndex);
                    pLayTblRcd->setColor(color);
                    // 将层表记录添加进层表中,存储层表记录id,关闭层表记录
                    pLayTbl->add(pLayTblRcd);
                    layerId = pLayTblRcd->objectId();
                    pLayTblRcd->close();
            }
            // 图层名已存在,打印
            else
            {
                    acutPrintf(_T("\n图层%s已存在"), name);
            }
            pLayTbl->close();
            return layerId;
    }

    // 获取图层id:图层名
    AcDbObjectId Layer::GetLayerId(const ACHAR *name)
    {        // 断言图层名不为空
            assert(name != NULL);
            AcDbLayerTable *pLayerTbl = NULL;
            acdbHostApplicationServices()->workingDatabase()->
                                    getLayerTable(pLayerTbl, AcDb::kForRead);
            AcDbObjectId layerId = AcDbObjectId::kNull;
            if (pLayerTbl->has(name))
            {        // getAt方法获得图层id并赋值layerId
                    pLayerTbl->getAt(name, layerId);
            }
            pLayerTbl->close();
            // 若没有则为默认值kNull
            return layerId;
    }

    // 设置图层颜色:图层名、颜色索引值
    bool Layer::SetColor(const ACHAR *name, int colorIndex)
    {        // 调用本类的方法获得图层id
            AcDbObjectId layerId = GetLayerId(name);
            bool bRet = false;
            AcDbLayerTableRecord *pLayRcd = NULL;
            // 获得层表记录指针
            if (acdbOpenObject(pLayRcd, layerId, AcDb::kForWrite) == Acad::eOk)
            {        // 设置颜色
                    AcCmColor color;
                    color.setColorIndex(colorIndex);
                    // 层表记录修改颜色
                    pLayRcd->setColor(color);
                    bRet = true;
                    pLayRcd->close();
            }
            return bRet;
    }

    // 获取 所有 层表记录id 的 列表
    void Layer::GetLayerList(AcDbObjectIdArray &layIds)
    {        // 获得层表对象指针、获得层表遍历器指针
            AcDbLayerTable *pLayTbl = NULL;
            acdbHostApplicationServices()->workingDatabase()->
                                                    getLayerTable(pLayTbl, AcDb::kForRead);
            AcDbLayerTableIterator *pItr = NULL;
            pLayTbl->newIterator(pItr);
            AcDbLayerTableRecord *pLayerTblRcd = NULL;
            // 层表遍历器遍历获取每个层表记录对象指针
            for (pItr->start();!pItr->done();pItr->step())
            {
                    if (pItr->getRecord(pLayerTblRcd, AcDb::kForRead) == Acad::eOk)
                    {        // 将每个层表记录id累加到层表记录id列表中
                            layIds.append(pLayerTblRcd->objectId());
                            pLayerTblRcd->close();
                    }
            }
            delete pItr;
            pLayTbl->close();
    }

     

     

     

     

    objectArx之层表——字体样式表
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|

    GMT+8, 2024-7-1 05:59 , Processed in 0.064189 second(s), 23 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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