#pragma once class Modify { public: Modify(); static AcDbObjectId CreateLine(); static ErrorStatus ChangeLayer(AcDbObjectId entId, CString strLayerName); ~Modify(); };
定義#include "Modify.h"
#include "stdafx.h" #include "Modify.h" Modify::Modify() { } Modify::~Modify() { } //創建和編輯基本圖形對象 //返回圖形數據庫,爲新添加的直線分配ID AcDbObjectId Modify::CreateLine() { AcGePoint3d ptStart(0, 0, 0); AcGePoint3d ptEnd(100, 100, 0); AcDbLine *pLine = new AcDbLine(ptStart, ptEnd); // AcDbBlockTable *pBlockTable; acdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlockTable, AcDb::kForRead); //獲得指向特定的塊表記錄(模型空間)的指針 AcDbBlockTableRecord *pBlockTableRecord; pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite); //將AcDbLine類的對象添加到塊表記錄中 //AcDbObjectId lineId; //pBlockTableRecord->appendAcDbEntity(lineId, pLine); //pLine->setColorIndex(1); AcDbObjectId lineId; pBlockTableRecord->appendAcDbEntity(lineId, pLine); //關閉圖形數據庫的各種對象 pBlockTable->close(); pBlockTableRecord->close(); pLine->close(); return lineId; } ErrorStatus Modify::ChangeColor(AcDbObjectId entId, Adesk::UInt16 colorIndex) { AcDbEntity *pEntity; //打開圖形數據庫中的對象 acdbOpenObject(pEntity, entId, AcDb::kForWrite); //修改實體顏色 pEntity->setColorIndex(colorIndex); //用完之後及時關閉 pEntity->close(); return Acad::eOk; }
實現函數
static void AAAMyGroupMyCommand () { // Put your command code here acutPrintf(_T("MyCommand () ")); //創建直線 acutPrintf(_T("創建直線")); AcDbObjectId lineId; lineId = CreateLine(); //修改直線的顏色 acutPrintf(_T("修改直線的顏色")); ChangeColor(lineId, 1); }
編譯,出現錯誤:
可是已經在acrxEntryPoint.cpp中包含了頭文件#include "Modify.h"。
解決方法:
<類名>::<靜態成員函數>
lineId = Modify::CreateLine();
Modify::ChangeColor(lineId, 1);
因爲
static AcDbObjectId CreateLine();
static ErrorStatus ChangeColor();
兩個函數爲靜態成員函數,調用是需要加 <類名>::
關於C++靜態成員函數的分析請看鏈接:點擊打開鏈接