• 2004-02-18

    [原创]用Arx在ACAD中创建一个新层 - [ObjectArx开发专辑]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://junglesong.yourblog.org/logs/106887.html

    此类用于创建一个新层,如果已经存在则提示用户. //外部调用函数 void Create_New_layer() { CCreate_New_Layer* pCreate_New_Layer=new CCreate_New_Layer(); pCreate_New_Layer->Setup_LayerTableRecord(); if(pCreate_New_Layer->GetCreateFlag()) pCreate_New_Layer->Set_LayerName(); if(pCreate_New_Layer->GetCreateFlag()) pCreate_New_Layer->Setup_LayerTable(); if(pCreate_New_Layer->GetCreateFlag()) pCreate_New_Layer->Setup_LineTypeTable(); if(pCreate_New_Layer->GetCreateFlag()) pCreate_New_Layer->Create_LineTypeObjectId(); if(pCreate_New_Layer->GetCreateFlag()) pCreate_New_Layer->add_TableRecord_To_LayerTable(); if(pCreate_New_Layer->GetCreateFlag()) { delete pCreate_New_Layer; pCreate_New_Layer=0; } } /****************************************************************** ** File name :Create_New_Layer.h ** Copyright (c) 2004-2005 ** Description :create a new layer in ACAD ** Version :1.00 ******************************************************************/ #if !defined CREATE_NEW_LAYER_H #define CREATE_NEW_LAYER_H #include "global.h" class CCreate_New_Layer { public: CCreate_New_Layer(); virtual ~CCreate_New_Layer(); BOOL GetCreateFlag() const { return m_bCreateFlag; }; Acad::ErrorStatus Setup_LayerTableRecord(); Acad::ErrorStatus Set_LayerName(CString strLayerName="MYLAYER"); Acad::ErrorStatus Setup_LayerTable(); Acad::ErrorStatus Setup_LineTypeTable(); Acad::ErrorStatus Create_LineTypeObjectId(); Acad::ErrorStatus add_TableRecord_To_LayerTable(); private://functions void Set_LayerAttibutes(); void Delete_LayerTableRecord(); private://variables BOOL m_bCreateFlag;//the flagment in the process of creating a new layer AcDbLayerTableRecord* m_pLayerTableRecord;//the pointer of new layer table record AcDbLayerTable* m_pLayerTable;//the pointer of LayerTable in ACAD workspace AcDbLinetypeTable* m_pLinetypeTbl;//the pointer of LineLayerTable in ACAD workspace AcDbObjectId m_ltypeObjId;//new layer table record ’s id }; #endif /****************************************************************** ** File name :Create_New_Layer.cpp ** Copyright (c) 2004-2005 ** Description :create a new layer in ACAD ** Version :1.00 ******************************************************************/ #include "stdafx.h" #include "resource.h" #include "Create_New_Layer.h" CCreate_New_Layer::CCreate_New_Layer() { m_pLayerTableRecord=NULL; m_bCreateFlag=TRUE; m_pLayerTable=NULL; m_pLinetypeTbl=NULL; } CCreate_New_Layer::~CCreate_New_Layer() { Acad::ErrorStatus es; es=m_pLayerTable->close(); if(es!=Acad::eOk) { ads_printf("\nApp fialed to close layer."); } es=m_pLayerTableRecord->close(); if(es!=Acad::eOk) { ads_printf("\nApp fialed to close layer record"); } } Acad::ErrorStatus CCreate_New_Layer::Setup_LayerTableRecord() { m_pLayerTableRecord=new AcDbLayerTableRecord; if(NULL==m_pLayerTableRecord) { m_bCreateFlag=FALSE; ads_printf("\nOut of memory."); return Acad::eOutOfMemory; } return Acad::eOk; } Acad::ErrorStatus CCreate_New_Layer::Set_LayerName(CString strLayerName) { Acad::ErrorStatus es=m_pLayerTableRecord->setName(strLayerName); if(es!=Acad::eOk) { Delete_LayerTableRecord(); m_bCreateFlag=FALSE; ads_printf("\nApp fialed to set LayerName."); return es; } else { Set_LayerAttibutes(); return Acad::eOk; } } void CCreate_New_Layer::Set_LayerAttibutes() { m_pLayerTableRecord->setIsFrozen(0); m_pLayerTableRecord->setIsOff(0); m_pLayerTableRecord->setVPDFLT(0); m_pLayerTableRecord->setIsLocked(0); AcCmColor color; color.setColorIndex(3); m_pLayerTableRecord->setColor(color); } Acad::ErrorStatus CCreate_New_Layer::Setup_LayerTable() { Acad::ErrorStatus es; es=acdbHostApplicationServices()->workingDatabase()->getSymbolTable(m_pLayerTable,AcDb::kForWrite); if(es!=Acad::eOk) { Delete_LayerTableRecord(); m_pLayerTable=NULL; m_bCreateFlag=FALSE;

    收藏到:Del.icio.us




发表评论

您将收到博主的回复邮件
记住我