• http://upload.yourblog.org/20044/junglesong.20040429163431.rar

    图块管理器1.00版本
  • 此类需要”创建新层类“的配合。要实现功能,调用一下函数OuterCheck()就可以了。

    /******************************************************************
    ** File name :OuterCheck.h
    ** Copyright (c) 2004-2005 ********* DHC ltd.
    ** Description :check outer objects in ACAD
    ** Version :1.00
    ******************************************************************/
    #if !defined C_OUTER_CHECK_H
    #define C_OUTER_CHECK_H

    #include "global.h"

    void OuterCheck();

    class COuterCheck
    {
    public:
    COuterCheck();
    virtual ~COuterCheck();
    BOOL GetCreateFlag() const
    {
    return m_bCreateFlag;
    };
    Acad::ErrorStatus Setup_BlockTable();
    Acad::ErrorStatus Setup_BlockTableRecord();
    Acad::ErrorStatus Setup_BlockIterator();
    void Select_OuterObjects();

    private://Variables
    AcDbBlockTable* m_pBlockTable;
    BOOL m_bCreateFlag;
    AcDbBlockTableRecord* m_pBlockTableRecord;
    AcDbBlockTableRecordIterator* m_pBlockIterator;
    };

    #endif


    /******************************************************************
    ** File name :OuterCheck.cpp
    ** Copyright (c) 2004-2005 ********* DHC ltd.
    ** Description :check outer objects in ACAD
    ** Version :1.00
    ******************************************************************/
    #include "stdafx.h"
    #include "resource.h"
    #include "OuterCheck.h"

    COuterCheck::COuterCheck()
    {
    m_bCreateFlag=TRUE;
    m_pBlockTable=NULL;
    m_pBlockTableRecord=NULL;
    m_pBlockIterator=NULL;
    }

    COuterCheck::~COuterCheck()
    {
    m_pBlockTableRecord->close();
    delete m_pBlockIterator;
    }

    Acad::ErrorStatus COuterCheck::Setup_BlockTable()
    {
    Acad::ErrorStatus es;
    es=acdbHostApplicationServices()->workingDatabase()->getSymbolTable(m_pBlockTable,AcDb::kForWrite);

    if(es!=Acad::eOk)
    {
    ads_printf("\nApp fialed to setup BlockTable.");
    m_pBlockTable=NULL;
    m_bCreateFlag=FALSE;

    return es;
    }
    else
    {
    return Acad::eOk;
    }
    }

    Acad::ErrorStatus COuterCheck::Setup_BlockTableRecord()
    {
    Acad::ErrorStatus es;
    es=m_pBlockTable->getAt(ACDB_MODEL_SPACE,
    m_pBlockTableRecord,
    AcDb::kForRead,Adesk::kFalse);

    if(es!=Acad::eOk)
    {
    ads_printf("\nApp fialed to setup BlockTableRecord.");
    m_pBlockTable->close();
    m_pBlockTableRecord=NULL;
    m_bCreateFlag=FALSE;

    return es;
    }
    else
    {
    m_pBlockTable->close();
    return Acad::eOk;
    }
    }

    Acad::ErrorStatus COuterCheck::Setup_BlockIterator()
    {
    Acad::ErrorStatus es;
    es=m_pBlockTableRecord->newIterator(m_pBlockIterator);

    if(es!=Acad::eOk)
    {
    ads_printf("\nApp fialed to setup BlockIterator.");
    delete m_pBlockIterator;
    m_pBlockIterator=NULL;
    m_bCreateFlag=FALSE;

    return es;
    }
    else
    {
    return Acad::eOk;
    }
    }

    void COuterCheck::Select_OuterObjects()
    {
    AcDbEntity *pEntity;
    char pSzname[132];
    int nOuterObjectNumber=0;

    for (; !m_pBlockIterator->done(); m_pBlockIterator->step())
    {
    m_pBlockIterator->getEntity(pEntity, AcDb::kForWrite);

    if(strcmp(pEntity->layer(),g_strNewLayerName)!=0)
    {
    strcpy(pSzname , pEntity->isA()->name());

    if( strcmp(pSzname,"AcDbLine")!=0 &&
    strcmp(pSzname,"AcDbPolyline")!=0 &&
    strcmp(pSzname,"AcDbArc")!=0 &&
    strcmp(pSzname,"AcDbCircle")!=0 )
    {
    pEntity->setLayer(g_strNewLayerName);
    nOuterObjectNumber++;
    }
    }

    pEntity->close();
    }

    ads_printf("\nThere are %d outer objects Checked out.",nOuterObjectNumber);
    }

    void OuterCheck()
    {
    COuterCheck cOuterCheck;

    cOuterCheck.Setup_BlockTable();

    if(cOuterCheck.GetCreateFlag())
    cOuterCheck.Setup_BlockTableRecord();

    if(cOuterCheck.GetCreateFlag())
    cOuterCheck.Setup_BlockIterator();

    if(cOuterCheck.GetCreateFlag())
    cOuterCheck.Select_OuterObjects();
    }


    created by junglesong

    2004-2-29
  • 此类用于创建一个新层,如果已经存在则提示用户.

    //外部调用函数
    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;