📄 inspectorbar.cpp
字号:
//-----------------------------------------------------------------------------
//----- InspectorBar.cpp : implementation file
#include "StdAfx.h"
#include "StdArx.h"
#include "resource.h"
#include "SmartPtr.h"
#include "AcDialogBar.h"
#include "InspectorBar.h"
#pragma warning (disable : 4101)
//-----------------------------------------------------------------------------
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//-----------------------------------------------------------------------------
#define MODIFIED_COLOR RGB (255, 0, 0)
extern HINSTANCE _hdllInstance ;
extern HINSTANCE hBitmapRes ;
//-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC (CInspectorBar, CAcDialogBar)
BEGIN_MESSAGE_MAP(CInspectorBar, CAcDialogBar)
//{{AFX_MSG_MAP(CInspectorBar)
ON_WM_SIZE()
ON_WM_CREATE()
ON_BN_CLICKED(IDC_MENU, OnMenu)
//}}AFX_MSG_MAP
ON_UPDATE_COMMAND_UI_RANGE (0x0000, 0xffff, OnUpdateUI) //----- See TN031
ON_COMMAND (ID_SEEICONS, OnSeeIcons)
ON_COMMAND (ID_SEEKEYS, OnSeeKeys)
ON_COMMAND (ID_SEESYMBOLNAMES, OnSeeSymbolNames)
ON_COMMAND (ID_SEEDXFNAMES, OnSeeDxfNames)
ON_COMMAND (ID_SEEOBJECTIDS, OnSeeObjectIds)
ON_COMMAND (ID_SEEERASEDOBJECTS, OnSeeErasedObjects)
ON_COMMAND (ID_AUTOSCROLL, OnAutoScroll)
ON_COMMAND (ID_ABOUT, OnAbout)
END_MESSAGE_MAP()
//-----------------------------------------------------------------------------
CInspectorBar::CInspectorBar () : CAcDialogBar () {
//{{AFX_DATA_INIT(CInspectorBar)
//}}AFX_DATA_INIT
//----- Tree control
mpTree =NULL ;
//----- Options
mbSeeIcons =TRUE ;
mbSeeKeys =TRUE ;
mbSeeSymbolNames =TRUE ;
mbSeeDxfNames =FALSE ; //----- versus AcDb names
mbSeeObjectIds =TRUE ;
mbSeePersReactors =FALSE ;
mbSeeXdatas =FALSE ;
mbSeeReactors =FALSE ;
mbSeeErasedObjects =TRUE ;
mbFlag =FALSE ;
}
CInspectorBar::~CInspectorBar () {
if ( mpTree )
delete mpTree ;
}
void CInspectorBar::DoDataExchange (CDataExchange *pDX) {
CAcDialogBar::DoDataExchange (pDX) ;
//{{AFX_DATA_MAP(CInspectorBar)
//}}AFX_DATA_MAP
}
//-----------------------------------------------------------------------------
void CInspectorBar::OnUpdateUI (CCmdUI *pCmdUI) {
}
//-----------------------------------------------------------------------------
BOOL CInspectorBar::Create (CFrameWnd *pParent, UINT nIDTemplate, UINT style, UINT nID) {
if ( !CAcDialogBar::Create (pParent, nIDTemplate, style, nID) )
return (FALSE) ;
//----- Docked-Resize feature
mSizeCurrent =m_sizeDefault ;
//----- Custom Tree control
mpTree =new TTreeCtrl ;
mpTree->mbEnableMenu =FALSE ;
mpTree->SubclassDlgItem (IDC_TREE, this) ;
//----- Set Image list
AssignImages () ;
//----- Give the focus to AutoCAD, if not doing this all
//----- keyboard inputs will be invalid inputs...
acedGetAcadDockCmdLine ()->PostMessage (WM_SETFOCUS, 0L, 0L) ;
return (TRUE) ;
}
//-----------------------------------------------------------------------------
void CInspectorBar::PasteBmpInBmp (CBitmap *org, CBitmap *dest, COLORREF corg /*=RGB (255, 0, 255)*/) {
CDC *pdc =GetDC () ;
CDC memdc1 ;
memdc1.CreateCompatibleDC (pdc) ;
CBitmap *old1 =memdc1.SelectObject (org) ;
CDC memdc2 ;
memdc2.CreateCompatibleDC (pdc) ;
CBitmap *old2 =memdc2.SelectObject (dest) ;
for ( int i =0 ; i < 16 ; i++ ) {
for ( int j =0 ; j < 16 ; j++ ) {
COLORREF cr =memdc1.GetPixel (i, j) ;
if ( cr != corg )
memdc2.SetPixel (i, j, cr) ;
}
}
memdc1.SelectObject (old1) ;
memdc2.SelectObject (old2) ;
ReleaseDC (pdc) ;
}
void CInspectorBar::CleanBmp (CBitmap *bm, COLORREF corg /*=RGB (192, 192, 192)*/, COLORREF ncr /*=RGB (255, 255, 255)*/) {
CDC *pdc =GetDC () ;
CDC memdc1 ;
memdc1.CreateCompatibleDC (pdc) ;
CBitmap *old1 =memdc1.SelectObject (bm) ;
for ( int i =0 ; i < 16 ; i++ ) {
for ( int j =0 ; j < 16 ; j++ ) {
COLORREF r =memdc1.GetPixel (i, j) ;
if ( memdc1.GetPixel (i, j) == corg )
memdc1.SetPixel (i, j, ncr) ;
}
}
memdc1.SelectObject (old1) ;
ReleaseDC (pdc) ;
}
//-----------------------------------------------------------------------------
#define NB_BMP 46
#define ERASED 1
#define MODIFIED 2
#define ER_AND_MD 3 //----- ERASED and MODIFIED
#define LOADBMINIMG(h,a,b) \
AfxSetResourceHandle (h) ;\
pBitmap->LoadBitmap (b) ;\
CleanBmp (pBitmap) ;\
mImgMap.SetAt (a, (void *)mImgIcons.Add (pBitmap, RGB (254, 255, 255))) ;\
PasteBmpInBmp (&erased, pBitmap, RGB (255, 0, 255)) ;\
mImgIcons.Add (pBitmap, RGB (254, 255, 255)) ;\
pBitmap->LoadBitmap (b) ;\
CleanBmp (pBitmap) ;\
PasteBmpInBmp (&modified, pBitmap, RGB (255, 0, 255)) ;\
mImgIcons.Add (pBitmap, RGB (254, 255, 255)) ;\
PasteBmpInBmp (&erased, pBitmap, RGB (255, 0, 255)) ;\
mImgIcons.Add (pBitmap, RGB (254, 255, 255)) ;
void CInspectorBar::AssignImages () {
//----- Temporary objects
AfxSetResourceHandle (_hdllInstance) ;
CBitmap erased, modified ;
erased.LoadBitmap (IDB_SMALL_ERASED) ;
modified.LoadBitmap (IDB_SMALL_MODIFIED) ;
//----- Image Initialization
CBitmap *pBitmap =new CBitmap ;
mImgIcons.Create (16, 16, FALSE, 4 * NB_BMP, 8) ;
//----- Load Bitmaps/Icons
//----- General
LOADBMINIMG (_hdllInstance, _T(/*NOXLATE*/"AcRxObject"), IDB_OBJECT) ;
LOADBMINIMG (_hdllInstance, _T(/*NOXLATE*/"AcDbEntity"), IDB_ENTITY) ;
LOADBMINIMG (_hdllInstance, _T(/*NOXLATE*/"AcDbProxyObject"), IDB_PROXY) ;
LOADBMINIMG (_hdllInstance, _T(/*NOXLATE*/"AcDbProxyEntity"), IDB_PROXY) ;
LOADBMINIMG (_hdllInstance, _T(/*NOXLATE*/"AcDbDatabase"), IDB_DATABASE) ;
//----- Database Resident
LOADBMINIMG (_hdllInstance, _T(/*NOXLATE*/"AcDbSymbolTable"), IDB_SYMBOLTABLE) ;
LOADBMINIMG (_hdllInstance, _T(/*NOXLATE*/"AcDbSymbolTableRecord"), IDB_SYMBOLTABLERECORD) ;
LOADBMINIMG (_hdllInstance, _T(/*NOXLATE*/"AcDbDictionary"), IDB_DICTIONARY) ;
//----- Basics
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbPoint"), _T(/*NOXLATE*/"ICON_16_POINT")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbFace"), _T(/*NOXLATE*/"ICON_16_3DFACE")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbSolid"), _T(/*NOXLATE*/"ICON_16_SOLID")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbTrace"), _T(/*NOXLATE*/"ICON_16_TRACE")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbFcf"), _T(/*NOXLATE*/"ICON_16_TOLERA")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbMline"), _T(/*NOXLATE*/"ICON_16_MLINE")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbShape"), _T(/*NOXLATE*/"ICON_16_SHAPE")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbText"), _T(/*NOXLATE*/"ICON_16_TEXT")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbAttribute"), _T(/*NOXLATE*/"ICON_16_ATTEDI")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbAttributeDefinition"), _T(/*NOXLATE*/"ICON_16_ATTDEF")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbMText"), _T(/*NOXLATE*/"ICON_16_MTEXT")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbViewport"), _T(/*NOXLATE*/"ICON_16_VPORTS")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbFrame"), _T(/*NOXLATE*/"ICON16_16_INSOLE")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbHatch"), _T(/*NOXLATE*/"ICON_16_HATCH")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbImage"), _T(/*NOXLATE*/"ICON_16_IMAGE")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbPolyFaceMesh"), _T(/*NOXLATE*/"ICON_16_3DFACE")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbPolygonMesh"), _T(/*NOXLATE*/"ICON_16_3DMESH")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbBlockReference"), _T(/*NOXLATE*/"ICON_16_BLOCK")) ;
//----- Curves
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbLine"), _T(/*NOXLATE*/"ICON_16_LINE")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbRay"), _T(/*NOXLATE*/"ICON_16_RAY")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbXline"), _T(/*NOXLATE*/"ICON_16_XLINE")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbArc"), _T(/*NOXLATE*/"ICON_16_ARC3PT")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbCircle"), _T(/*NOXLATE*/"ICON_16_CIRCLE")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbEllipse"), _T(/*NOXLATE*/"ICON_16_ELLIPS")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbSpline"), _T(/*NOXLATE*/"ICON_16_SPLINE")) ;
LOADBMINIMG (_hdllInstance, _T(/*NOXLATE*/"AcDbLeader"), IDB_LEADER) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbPolyline"), _T(/*NOXLATE*/"ICON_16_PLINE")) ;
//----- Complex
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDb2dPolyline"), _T(/*NOXLATE*/"ICON_16_PLINE")) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDb3dPolyline"), _T(/*NOXLATE*/"ICON_16_3DPOLY")) ;
//----- Dimensions
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbDimension"), _T(/*NOXLATE*/"ICON_16_DIMBAS")) ;
//----- Subentities
LOADBMINIMG (_hdllInstance, _T(/*NOXLATE*/"AcDbVertex"), IDB_SUBENTITY) ;
//----- Bracket Entities
LOADBMINIMG (_hdllInstance, _T(/*NOXLATE*/"AcDbBlockBegin"), IDB_BEGIN) ;
LOADBMINIMG (_hdllInstance, _T(/*NOXLATE*/"AcDbBlockEnd"), IDB_SEQEND) ;
LOADBMINIMG (_hdllInstance, _T(/*NOXLATE*/"AcDbSequenceEnd"), IDB_SEQEND) ;
//----- ACIS based
LOADBMINIMG (_hdllInstance, _T(/*NOXLATE*/"AcDbBody"), IDB_BODY) ;
LOADBMINIMG (_hdllInstance, _T(/*NOXLATE*/"AcDb3dSolid"), IDB_3DSOLID) ;
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbRegion"), _T(/*NOXLATE*/"ICON_16_REGION")) ;
//----- Others
LOADBMINIMG (hBitmapRes, _T(/*NOXLATE*/"AcDbGroup"), _T(/*NOXLATE*/"ICON_16_GROUP")) ;
//----- Restoring AutoCAD resource instance
AfxSetResourceHandle (acedGetAcadResourceInstance ()) ;
//----- Attach Image List to the Tree Control
if ( mbSeeIcons )
mpTree->SetImageList (&mImgIcons, TVSIL_NORMAL) ;
delete pBitmap ;
}
//-----------------------------------------------------------------------------
void CInspectorBar::OnSize(UINT nType, int cx, int cy) {
CAcDialogBar::OnSize (nType, cx, cy) ;
if ( mpTree != NULL ) {
//----- Move Tree
CRect rectTree ;
mpTree->GetWindowRect (rectTree) ;
ScreenToClient (rectTree) ;
rectTree.right =cx - rectTree.left ;
rectTree.bottom =cy - rectTree.left ;
mpTree->MoveWindow (rectTree, TRUE) ;
}
}
//-----------------------------------------------------------------------------
//----- AutoCAD Database related
HTREEITEM CInspectorBar::InsertItem (LPCTSTR lpszItem, HTREEITEM hParent, HTREEITEM hInsertAfter, AcRxObject *pObj, int image) {
TV_INSERTSTRUCT tvInsertStruct ;
tvInsertStruct.hParent =hParent ;
tvInsertStruct.hInsertAfter =hInsertAfter ;
tvInsertStruct.item.mask =TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM | TVIF_STATE ;
tvInsertStruct.item.pszText =(LPTSTR)lpszItem ;
tvInsertStruct.item.iImage =image ;
tvInsertStruct.item.iSelectedImage =image ;
tvInsertStruct.item.state =TVIS_BOLD ;
tvInsertStruct.item.stateMask =TVIS_STATEIMAGEMASK | TVIS_BOLD ;
tvInsertStruct.item.cChildren =0 ;
if ( pObj->isKindOf (AcDbObject::desc ()) ) {
tvInsertStruct.item.lParam =(LPARAM)((AcDbObject *)pObj)->objectId ().asOldId () ;
if ( ((AcDbObject *)pObj)->isErased () == Adesk::kTrue )
tvInsertStruct.item.state =0 ;
} else {
tvInsertStruct.item.lParam =(LPARAM)pObj ;
}
HTREEITEM hItem =mpTree->InsertItem (&tvInsertStruct) ;
if ( pObj->isKindOf (AcDbObject::desc ()) && ((AcDbObject *)pObj)->isModified () )
mpTree->SetItemColor (hItem, MODIFIED_COLOR) ;
mpTree->Invalidate (FALSE) ;
return (hItem) ;
}
HTREEITEM CInspectorBar::CreateItem (LPCTSTR lpszItem, HTREEITEM hParent, HTREEITEM hInsertAfter, AcRxObject *pObj) {
HTREEITEM hItem =InsertItem (lpszItem, hParent, hInsertAfter, pObj, GetImage (pObj)) ;
return (hItem) ;
}
CString CInspectorBar::GetTitle (AcRxObject *pObj) {
char *pText =NULL ;
try {
USES_OKEYS ;
CString st ;
//----- SymbolTable
if ( pObj->isKindOf (AcDbBlockTable::desc ()) )
st =GetString (IDS_BLOCKTABLE) ;
else if ( pObj->isKindOf (AcDbDimStyleTable::desc ()) )
st =GetString (IDS_DIMSTYLETABLE) ;
else if ( pObj->isKindOf (AcDbLayerTable::desc ()) )
st =GetString (IDS_LAYERTABLE) ;
else if ( pObj->isKindOf (AcDbLinetypeTable::desc ()) )
st =GetString (IDS_LINETYPETABLE) ;
else if ( pObj->isKindOf (AcDbRegAppTable::desc ()) )
st =GetString (IDS_REGAPPTABLE) ;
else if ( pObj->isKindOf (AcDbTextStyleTable::desc ()) )
st =GetString (IDS_TEXTSTYLETABLE) ;
else if ( pObj->isKindOf (AcDbUCSTable::desc ()) )
st =GetString (IDS_UCSTABLE) ;
else if ( pObj->isKindOf (AcDbViewTable::desc ()) )
st =GetString (IDS_VIEWTABLE) ;
else if ( pObj->isKindOf (AcDbViewportTable::desc ()) )
st =GetString (IDS_VIEWPORTTABLE) ;
//----- SymbolTableRecord
else if ( pObj->isKindOf (AcDbSymbolTableRecord::desc ()) ) {
ARXOK ( ((AcDbSymbolTableRecord *)pObj)->getName (pText) ) ;
st =CString (pText) ;
delete pText ;
pText =NULL ;
}
//----- SEQEND
else if ( pObj->isKindOf (AcDbSequenceEnd::desc ()) )
st =GetString (IDS_SEQEND) ;
//----- Tag of Attribute
else if ( pObj->isKindOf (AcDbAttributeDefinition::desc ()) ) {
ARXNULL ( pText =((AcDbAttributeDefinition *)pObj)->tag () ) ;
st =CString (pText) ;
delete pText ;
pText =NULL ;
} else if ( pObj->isKindOf (AcDbAttribute::desc ()) ) {
ARXNULL ( pText =((AcDbAttribute *)pObj)->tag () ) ;
st =CString (pText) ;
delete pText ;
pText =NULL ;
}
//----- Entity
else if ( pObj->isKindOf (AcDbEntity::desc ()) ) {
if ( pObj->isKindOf (AcDbBlockReference::desc ()) ) {
AcDbBlockTableRecord *pRec ;
ARXOK ( actrTransactionManager->topTransaction ()->getObject ((AcDbObject *&)pRec, ((AcDbBlockReference *)pObj)->blockTableRecord (), AcDb::kForRead, Adesk::kTrue) ) ;
ARXOK ( pRec->getName (pText) ) ;
st =CString (pText) ;
delete pText ;
pText =NULL ;
} else {
st.Empty () ;
}
}
//----- Dictionary
else if ( pObj->isKindOf (AcDbObject::desc ()) ) {
AcDbObjectId idOwner =((AcDbObject *)pObj)->ownerId () ;
if ( idOwner == AcDbObjectId::kNull ) {
st =GetString (IDS_NOD) ;
} else {
AcDbObject *pOwner ;
ARXOK ( actrTransactionManager->topTransaction ()->getObject (pOwner, idOwner, AcDb::kForRead, Adesk::kTrue) ) ;
if ( pOwner->isKindOf (AcDbDictionary::desc ()) ) {
AcDbDictionary *pDict =(AcDbDictionary *)pOwner ;
pDict->nameAt (((AcDbObject *)pObj)->objectId (), pText) ;
st =CString (pText) ;
delete pText ;
pText =NULL ;
} else if ( pObj->isKindOf (AcDbDictionary::desc ()) ) {
st =GetString (IDS_EXTDICT) ;
}
}
}
return (st) ;
} catch (const char *szMsg) {
if ( pText != NULL )
delete pText ;
return (_T("")) ;
}
}
CString CInspectorBar::GetName (AcRxObject *pObj) {
CString title, symbol, id ;
if ( mbSeeKeys )
if ( !(title =GetTitle (pObj)).IsEmpty () )
title =_T("\"") + title + _T("\"") ;
if ( mbSeeSymbolNames ) {
if ( mbSeeDxfNames )
symbol =CString (pObj->isA ()->dxfName ()) ;
else
symbol =CString (pObj->isA ()->name ()) ;
}
if ( mbSeeObjectIds && pObj->isKindOf (AcDbObject::desc ()) )
id.Format ("(%ld)", ((AcDbObject *)pObj)->objectId ().asOldId ()) ;
if ( !title.IsEmpty () && (!symbol.IsEmpty () || !id.IsEmpty ()) )
title +=_T(", ") ;
title +=symbol ;
if ( !symbol.IsEmpty () && !id.IsEmpty () )
title +=_T(", ") ;
title +=id ;
return (title) ;
}
int CInspectorBar::GetImage (AcRxObject *pObj) {
AcRxClass *pClass =pObj->isA () ;
int i ;
while ( !(i =(int)(mImgMap [pClass->name ()])) && (pClass =pClass->myParent ()) != NULL ) ;
return (i) ;
}
//-----------------------------------------------------------------------------
HTREEITEM CInspectorBar::FindItemPosition (HTREEITEM hItem, DWORD data, BOOL bRecurs /*=FALSE*/) {
HTREEITEM hChild =NULL ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -