天天看點

VC6.0中建立Workspaces和檔案過濾器

       VC6.0是1989年釋出的,而VS2002是2002年釋出的,VC6.0很經典,而VS2002則是C#的第一個IDE版本。

下面讨論VC6.0建立Workspaces和檔案過濾器

一、VC6.0建立Workspaces

      1) 打開VC6.0--》點選工具欄上的“File”---》New--》Workspaces--> 工作區間命名為:Chapter04

VC6.0中建立Workspaces和檔案過濾器

圖(1)建立工作區間Chapter04

      2)右擊“Chapter04” ---》Add New Project to Workspaces ---》 選中“ObjectARX 2000/2000I/2002 AppWizard”-->将工程命名為:CreateLine2

          ---》 OK --》勾選“ Use MFC” --》Finish

       3)打開Chapter04所在的檔案夾,在與Chapter04同級的目錄中建立一個MyCommon2檔案,在其中再建立Document、Entity兩個檔案夾,

這些檔案夾的位置關系如圖(3)所示:

VC6.0中建立Workspaces和檔案過濾器

  圖(3)MyCommon2和Chapter04的位置關系

    4)在VC6.0中添加類

         4.1)選擇【Insert/New Class】菜單項,系統彈出如圖(4.1)所示的對話框。在該對話框中輸入類的名稱CLineUtil,如果直接單擊【Ok】按鈕完成類的建立,這個類的頭檔案和源檔案就會保持在工程的目錄裡,這裡我們改一下,我們把這個檔案放置到上面建立的MyCommon2檔案夾的Entity檔案夾裡。

          單擊【Change】按鈕,系統彈出如圖(4.2)所示的對話框。

VC6.0中建立Workspaces和檔案過濾器

圖(4.1)輸入類的名稱                    

VC6.0中建立Workspaces和檔案過濾器

圖(4.2)選擇檔案保持的位置

VC6.0中建立Workspaces和檔案過濾器

圖(4.3)   選中Entity檔案夾            

VC6.0中建立Workspaces和檔案過濾器

圖(4.4)儲存在..\MyCommon2\Entity裡

        單擊【Browse】按鈕,系統彈出如圖(4.3)所示的對話框。在該對話框中修改檔案的儲存位置,儲存位置為:..\MyCommon2\Entity裡(即上一步所建立的Entity檔案夾裡),将CLineUtil類 的 .h和 .cpp檔案都儲存在Entity檔案夾裡。

        單擊【OK】按鈕後,回到FileView面闆,我們可以看到,頭檔案和源檔案被放置在預設的過濾器Headers Files和Sources Files中,如圖(4.5)所示。

VC6.0中建立Workspaces和檔案過濾器

 圖(4.5)頭檔案和源檔案的預設位置           

VC6.0中建立Workspaces和檔案過濾器

  圖(4.6)拖動檔案後,頭檔案和源檔案的最終位置 

       實際上,VC++中的檔案過濾器(或者稱為篩選器) 與.Net中有很大的差別,它不能直接與存儲的檔案夾直接對應,而是可以靈活地指定任意位置的檔案。

在這裡,我們需要手工建立出與MyCommon2、Entity和Document檔案夾對應的過濾器。

      4.2)建立各個檔案夾對應的過濾器,調整CLineUtil類的頭檔案和源檔案在FileView中的正确位置。

       在FileView面闆中,右擊“CreateLine2”--》New Folder--》命名為:MyCommon2

      同理,右擊MyCommon2 ——》New Folder ,在MyCommon2下添加名稱為Entity和Document的過濾器。

       在FileView面闆中,選中LineUtil.h和LineUtil.cpp兩個檔案,将其拖動到Entity過濾器對應的節點,就得到如圖(4.6)所示的結果。

       4.3)采用同樣的方法,在Entity檔案中添加CEntityUtil類,在Document檔案夾添加CDwgDatabaseUtil類。

       5)在CDwgDatabaseUtil類中添加一個靜态成員函數PostToModelSpace,用于将一個實體添加到目前圖形資料庫模型空間。

  這個函數在CDwgDatabaseUtil.h的聲明為:  

//将實體添加到模型空間
	static AcDbObjectId PostToModelSpace(AcDbEntity *pEnt, AcDbDatabase *pDb = acdbHostApplicationServices()->workingDatabase());
           

  在CDwgDatabaseUtil.cpp中的實作為:

AcDbObjectId CDwgDatabaseUtil::PostToModelSpace( AcDbEntity *pEnt, AcDbDatabase *pDb )
{
	// 檢查輸入參數的有效性
	assert (pEnt);		// 等效于assert (pEnt != NULL);

	// 獲得目前圖形資料庫的塊表
	AcDbBlockTable *pBlkTbl = NULL;
	pDb->getBlockTable(pBlkTbl, AcDb::kForRead);

	// 獲得模型空間對應的塊表記錄
	AcDbBlockTableRecord *pBlkTblRcd = NULL;
	pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd, AcDb::kForWrite);
	pBlkTbl->close();

	// 将實體添加到模型空間的塊表記錄
	AcDbObjectId entId;
	Acad::ErrorStatus es = pBlkTblRcd->appendAcDbEntity(entId, pEnt);
	if (es != Acad::eOk)
	{
		pBlkTblRcd->close();
		delete pEnt;	// 添加失敗時,要delete
		pEnt = NULL;

		return AcDbObjectId::kNull;
	}

	// 關閉模型空間塊表記錄和實體
	pBlkTblRcd->close();
	pEnt->close();

	return entId;
}
           

     6)在CLineUtil類中添加一個Add函數,它的實作非常簡潔:

AcDbObjectId CLineUtil::Add( const AcGePoint3d &startPoint, const AcGePoint3d &endPoint, AcDbDatabase *pDb )
{
	// 建立直線實體
	AcDbLine *pLine = new AcDbLine(startPoint, endPoint);
	
	// 将直線實體添加到模型空間
	return CDwgDatabaseUtil::PostToModelSpace(pLine, pDb);
}
           

        7)在CEntityUtil類中添加SetColor函數,修改實體的顔色,其實作代碼如下:

void CEntityUtil::SetColor( AcDbObjectId entId, int colorIndex )
{
	// 檢測參數的有效性
	assert (colorIndex >= 0 && colorIndex <= 256);

	AcDbEntity *pEnt = NULL;
	if (acdbOpenObject(pEnt, entId, AcDb::kForWrite) == Acad::eOk)
	{
		pEnt->setColorIndex(colorIndex);
		pEnt->close();
	}
}
           

         8)利用ObjectARX向導注冊一個新指令ChangColor2,實作的功能仍然是添加一條直線,修改它的顔色為“紅色”,如下:

// This is command 'CHANGCOLOR2'
void WhCHAP2CHANGCOLOR2()
{
	// TODO: Implement the command
	//建立直線
	AcGePoint3d startPoint(0,0,0);
	AcGePoint3d endPoint(100,100,0);
	AcDbObjectId lineId = CLineUtil::Add(startPoint,endPoint);

	//修改顔色
	CEntityUtil::SetColor(lineId,1);
}
           

      效果如下:

    按F7編譯該工程--》F5啟動調試和AutoCAD2002--》在Cad2002的指令行視窗輸入:applode --》加載相應的.arx檔案 ——》輸入changcolor2——》回車,結果如下:

VC6.0中建立Workspaces和檔案過濾器

                                                                                      圖(6)輸入appload加載.arx,再執行changcolor2指令

繼續閱讀