📄 inspectorbar.cpp
字号:
throw "" ;
}
}
HTREEITEM CInspectorBar::Scan (HTREEITEM hParent, AcDbSymbolTableRecord *p) {
HTREEITEM hItem =NULL ;
AcDbBlockTableRecordIterator *pi =NULL ;
try {
USES_OKEYS ;
hItem =CreateItem (GetName (p), hParent, TVI_LAST, p) ;
ScanSubObjects (hItem, p) ;
if ( p->isKindOf (AcDbBlockTableRecord::desc ()) ) {
AcDbBlockTableRecord *pr =(AcDbBlockTableRecord *)p ;
SmartPtr<AcDbBlockBegin> pBBegin ;
ARXOK ( pr->openBlockBegin (*pBBegin, AcDb::kForRead) ) ;
Scan (hItem, pBBegin) ;
ARXOK ( pr->newIterator (pi, Adesk::kTrue, Adesk::kTrue) ) ;
while ( !pi->done () ) {
AcDbObjectId id ;
ARXOK ( pi->getEntityId (id) ) ;
AcDbEntity *pe ;
ARXOK ( actrTransactionManager->topTransaction ()->getObject ((AcDbObject *&)pe, id, AcDb::kForRead, Adesk::kTrue) ) ;
Scan (hItem, pe) ;
pi->step (Adesk::kTrue, Adesk::kTrue) ;
}
delete pi ;
SmartPtr<AcDbBlockEnd> pBEnd ;
ARXOK ( pr->openBlockEnd (*pBEnd, AcDb::kForRead) ) ;
Scan (hItem, pBEnd) ;
}
return (hItem) ;
} catch (const char *szMsg) {
delete pi ;
throw "" ;
}
}
HTREEITEM CInspectorBar::Scan (HTREEITEM hParent, AcDbDictionary *p) {
HTREEITEM hItem =NULL ;
AcDbDictionaryIterator *pi =NULL ;
try {
USES_OKEYS ;
hItem =CreateItem (GetName (p), hParent, TVI_LAST, p) ;
ScanSubObjects (hItem, p) ;
ARXNULL (pi =p->newIterator (AcRx::kDictSorted)) ;
while ( !pi->done () ) {
AcDbObjectId id =pi->objectId () ;
if ( id == AcDbObjectId::kNull )
throw "" ;
AcDbObject *po ;
ARXOK ( actrTransactionManager->topTransaction ()->getObject (po, id, AcDb::kForRead, Adesk::kTrue) ) ;
if ( po->isKindOf (AcDbDictionary::desc ()) )
Scan (hItem, (AcDbDictionary *)po) ;
else
Scan (hItem, po) ;
pi->next () ;
}
delete pi ;
return (hItem) ;
} catch (const char *szMsg) {
delete pi ;
throw "" ;
}
}
HTREEITEM CInspectorBar::Scan (HTREEITEM hParent, AcDbEntity *p) {
HTREEITEM hItem =NULL ;
AcDbObjectIterator *pi =NULL ;
try {
USES_OKEYS ;
AcDbObjectId id ;
hItem =CreateItem (GetName (p), hParent, TVI_LAST, p) ;
ScanSubObjects (hItem, p) ;
if ( p->isKindOf (AcDb2dPolyline::desc ()) ) {
ARXNULL (pi =((AcDb2dPolyline *)p)->vertexIterator ()) ;
while ( !pi->done () ) {
id =pi->objectId () ;
AcDb2dVertex *pv ;
ARXOK ( actrTransactionManager->topTransaction ()->getObject ((AcDbObject *&)pv, id, AcDb::kForRead, Adesk::kTrue) ) ;
Scan (hItem, pv) ;
pi->step (Adesk::kFalse, Adesk::kTrue) ;
}
delete pi ;
SmartPtr<AcDbSequenceEnd> pSeqend ;
ARXOK ( ((AcDb2dPolyline *)p)->openSequenceEnd (*pSeqend, AcDb::kForRead) ) ;
Scan (hItem, pSeqend) ;
} else if ( p->isKindOf (AcDb3dPolyline::desc ()) ) {
ARXNULL (pi =((AcDb3dPolyline *)p)->vertexIterator ()) ;
while ( !pi->done () ) {
id =pi->objectId () ;
AcDb3dPolylineVertex *pv ;
ARXOK ( actrTransactionManager->topTransaction ()->getObject ((AcDbObject *&)pv, id, AcDb::kForRead, Adesk::kTrue) ) ;
Scan (hItem, pv) ;
pi->step (Adesk::kFalse, Adesk::kTrue) ;
}
delete pi ;
SmartPtr<AcDbSequenceEnd> pSeqend ;
ARXOK ( ((AcDb3dPolyline *)p)->openSequenceEnd (*pSeqend, AcDb::kForRead) ) ;
Scan (hItem, pSeqend) ;
} else if ( p->isKindOf (AcDbBlockReference::desc ()) ) {
BOOL bHasAttribute =FALSE ;
ARXNULL (pi =((AcDbBlockReference *)p)->attributeIterator ()) ;
while ( !pi->done () ) {
bHasAttribute =TRUE ;
id =pi->objectId () ;
AcDbAttribute *pa ;
ARXOK ( actrTransactionManager->topTransaction ()->getObject ((AcDbObject *&)pa, id, AcDb::kForRead, Adesk::kTrue) ) ;
Scan (hItem, pa) ;
pi->step (Adesk::kFalse, Adesk::kTrue) ;
}
delete pi ;
if ( bHasAttribute ) {
SmartPtr<AcDbSequenceEnd> pSeqend ;
ARXOK ( ((AcDb3dPolyline *)p)->openSequenceEnd (*pSeqend, AcDb::kForRead) ) ;
Scan (hItem, pSeqend) ;
}
}// else if ( p->isKindOf (AcDbFace::desc ()) ) {
//}
//else if ( p->isKindOf (AcDbPolyFaceMesh::desc ()) ) {
//}
//else if ( p->isKindOf (AcDbPolygonMesh::desc ()) ) {
//}
return (hItem) ;
} catch (const char *szMsg) {
delete pi ;
return (NULL) ;
}
}
HTREEITEM CInspectorBar::Scan (HTREEITEM hParent, AcDbObject *p) {
try {
HTREEITEM hItem =CreateItem (GetName (p), hParent, TVI_LAST, p) ;
ScanSubObjects (hItem, p) ;
return (hItem) ;
} catch (const char *szMsg) {
return (NULL) ;
}
}
void CInspectorBar::ScanSubObjects (HTREEITEM hParent, AcDbObject *p) {
try {
USES_OKEYS ;
//----- Extension dictionary
if ( p->extensionDictionary () != AcDbObjectId::kNull ) {
AcDbDictionary *pDict ;
ARXOK ( actrTransactionManager->topTransaction ()->getObject ((AcDbObject *&)pDict, p->extensionDictionary (), AcDb::kForRead, Adesk::kTrue) ) ;
Scan (hParent, pDict) ;
}
//----- ? Xdata/Reactors
} catch (const char *szMsg) {
}
}
//-----------------------------------------------------------------------------
//----- Create Menu
void CreateMenuFromRes (CMenu &menu, UINT ID) {
TCHAR st [256] ;
HMENU hMenu =::LoadMenu (_hdllInstance, MAKEINTRESOURCE (ID)) ;
menu.CreatePopupMenu () ;
for ( int i =0 ; i < ::GetMenuItemCount (hMenu) ; i++ ) {
if ( ::GetMenuState (hMenu, i, MF_BYPOSITION) & MF_SEPARATOR ) {
menu.AppendMenu (MF_SEPARATOR) ;
} else {
UINT id =::GetMenuItemID (hMenu, i) ;
::GetMenuString (hMenu, i, st, 256, MF_BYPOSITION) ;
menu.AppendMenu (MF_STRING, id, st) ;
}
}
::DestroyMenu (hMenu) ;
}
void CInspectorBar::OnMenu () {
CMenu menu ;
CreateMenuFromRes (menu, IDR_INSPECTOR_MENU) ;
menu.CheckMenuItem (ID_SEEICONS, mbSeeIcons ? MF_CHECKED : MF_UNCHECKED) ;
menu.CheckMenuItem (ID_SEEKEYS, mbSeeKeys ? MF_CHECKED : MF_UNCHECKED) ;
menu.CheckMenuItem (ID_SEESYMBOLNAMES, mbSeeSymbolNames ? MF_CHECKED : MF_UNCHECKED) ;
menu.CheckMenuItem (ID_SEEDXFNAMES, mbSeeDxfNames ? MF_CHECKED : MF_UNCHECKED) ;
menu.CheckMenuItem (ID_SEEOBJECTIDS, mbSeeObjectIds ? MF_CHECKED : MF_UNCHECKED) ;
menu.CheckMenuItem (ID_SEEPERSREACTORS, mbSeePersReactors ? MF_CHECKED : MF_UNCHECKED) ;
menu.CheckMenuItem (ID_SEEXDATAS, mbSeeXdatas ? MF_CHECKED : MF_UNCHECKED) ;
menu.CheckMenuItem (ID_SEEREACTORS, mbSeeReactors ? MF_CHECKED : MF_UNCHECKED) ;
menu.CheckMenuItem (ID_SEEERASEDOBJECTS, mbSeeErasedObjects ? MF_CHECKED : MF_UNCHECKED) ;
menu.CheckMenuItem (ID_AUTOSCROLL, mpTree->mbAutoScroll ? MF_CHECKED : MF_UNCHECKED) ;
CRect rect ;
GetDlgItem (IDC_MENU)->GetWindowRect (rect) ;
menu.TrackPopupMenu (TPM_LEFTALIGN, rect.TopLeft ().x, rect.TopLeft ().y, this, NULL) ;
menu.DestroyMenu () ;
}
//-----------------------------------------------------------------------------
void CInspectorBar::OnSeeIcons () {
if ( (mbSeeIcons =!mbSeeIcons) )
mpTree->SetImageList (&mImgIcons, TVSIL_NORMAL) ;
else
mpTree->SetImageList (NULL, TVSIL_NORMAL) ;
}
void CInspectorBar::OnSeeKeys () {
try {
if ( acedSetOLELock (13, 0) == Adesk::kFalse )
return ;
actrTransactionManager->startTransaction () ;
mbSeeKeys =!mbSeeKeys ;
HTREEITEM hItem =mpTree->GetRootItem () ;
while ( hItem ) {
if ( mpTree->ItemHasChildren (hItem) )
ChangeLabels (hItem) ;
hItem =mpTree->GetNextItem (hItem, TVGN_NEXT) ;
}
actrTransactionManager->endTransaction () ;
acedClearOLELock (13) ;
} catch (const char *szMsg) {
actrTransactionManager->abortTransaction () ;
acedClearOLELock (13) ;
}
}
void CInspectorBar::OnSeeSymbolNames () {
try {
if ( acedSetOLELock (13, 0) == Adesk::kFalse )
return ;
actrTransactionManager->startTransaction () ;
mbSeeSymbolNames =!mbSeeSymbolNames ;
HTREEITEM hItem =mpTree->GetRootItem () ;
while ( hItem ) {
if ( mpTree->ItemHasChildren (hItem) )
ChangeLabels (hItem) ;
hItem =mpTree->GetNextItem (hItem, TVGN_NEXT) ;
}
actrTransactionManager->endTransaction () ;
acedClearOLELock (13) ;
} catch (const char *szMsg) {
actrTransactionManager->abortTransaction () ;
acedClearOLELock (13) ;
}
}
void CInspectorBar::OnSeeDxfNames () {
try {
if ( acedSetOLELock (13, 0) == Adesk::kFalse )
return ;
actrTransactionManager->startTransaction () ;
mbSeeDxfNames =!mbSeeDxfNames ;
HTREEITEM hItem =mpTree->GetRootItem () ;
while ( hItem ) {
if ( mpTree->ItemHasChildren (hItem) )
ChangeLabels (hItem) ;
hItem =mpTree->GetNextItem (hItem, TVGN_NEXT) ;
}
actrTransactionManager->endTransaction () ;
acedClearOLELock (13) ;
} catch (const char *szMsg) {
actrTransactionManager->abortTransaction () ;
acedClearOLELock (13) ;
}
}
void CInspectorBar::ChangeLabels (HTREEITEM hParent) {
USES_OKEYS ;
HTREEITEM hItem =mpTree->GetNextItem (hParent, TVGN_CHILD) ;
while ( hItem ) {
AcDbObjectId id ;
id.setFromOldId (mpTree->GetItemData (hItem)) ;
SmartPtr<AcDbObject> p ;
ARXOK ( acdbOpenAcDbObject (*p, id, AcDb::kForRead, Adesk::kTrue) ) ;
mpTree->SetItemText (hItem, GetName (*p)) ;
if ( mpTree->ItemHasChildren (hItem) )
ChangeLabels (hItem) ;
hItem =mpTree->GetNextItem (hItem, TVGN_NEXT) ;
}
}
void CInspectorBar::OnSeeObjectIds () {
try {
if ( acedSetOLELock (13, 0) == Adesk::kFalse )
return ;
actrTransactionManager->startTransaction () ;
mbSeeObjectIds =!mbSeeObjectIds ;
HTREEITEM hItem =mpTree->GetRootItem () ;
while ( hItem ) {
if ( mpTree->ItemHasChildren (hItem) )
ChangeLabels (hItem) ;
hItem =mpTree->GetNextItem (hItem, TVGN_NEXT) ;
}
actrTransactionManager->endTransaction () ;
acedClearOLELock (13) ;
} catch (const char *szMsg) {
actrTransactionManager->abortTransaction () ;
acedClearOLELock (13) ;
}
}
void CInspectorBar::OnSeeErasedObjects () {
try {
USES_OKEYS ;
if ( acedSetOLELock (12, 0) == Adesk::kFalse )
return ;
mbSeeErasedObjects =!mbSeeErasedObjects ;
actrTransactionManager->startTransaction () ;
AcApDocumentIterator *pIter =acDocManager->newAcApDocumentIterator () ;
for ( ; !pIter->done () ; ) {
AcApDocument *pDoc =pIter->document () ;
int length =DocVars.docData (pDoc).mErasedList.logicalLength () ;
BOOL bPlaced =TRUE, bMissing =TRUE ;
while ( bPlaced && bMissing ) {
bPlaced =FALSE ;
bMissing =FALSE ;
for ( int i =0 ; i < length ; i++ ) {
AcDbObject *p ;
ARXOK ( actrTransactionManager->topTransaction ()->getObject ((AcDbObject *&)p, DocVars.docData (pDoc).mErasedList.at (i), AcDb::kForRead, Adesk::kTrue) ) ;
HTREEITEM hItem =FindItemPosition (p) ;
if ( hItem != NULL && !mbSeeErasedObjects ) {
mpTree->DeleteItem (hItem) ;
} else if ( hItem == NULL && mbSeeErasedObjects ) {
HTREEITEM hParent =FindParentPosition (p) ;
if ( hParent ) {
//----- State
int index =0 ;
if ( p->isErased () )
index++ ;
//if ( p->isModified () ) //----- Always modified when here, so do not test!
index +=2 ;
index +=GetImage (p) ;
//---- Determines position in the list
HTREEITEM hPrevChild =TVI_LAST ;
if ( p->isKindOf (AcDbVertex::desc ()) || p->isKindOf (AcDbAttribute::desc ()) )
hPrevChild =FindPreviousSubEntity ((AcDbEntity *)p) ;
else if ( p->isKindOf (AcDbEntity::desc ()) )
hPrevChild =FindPreviousEntity ((AcDbEntity *)p) ;
//----- Create the item
hItem =CreateItem (GetName (p), hParent, hPrevChild, p) ;
ScanSubObjects (hItem, p) ;
//----- Update
mpTree->SetItemImage (hItem, index, index) ;
mpTree->SetItemColor (hItem, MODIFIED_COLOR) ;
bPlaced =TRUE ;
} else {
bMissing =TRUE ;
}
}
}
}
pIter->step () ;
}
delete pIter ;
actrTransactionManager->endTransaction () ;
acedClearOLELock (12) ;
} catch (const char *szMsg) {
actrTransactionManager->abortTransaction () ;
acedClearOLELock (12) ;
}
}
void CInspectorBar::OnAutoScroll () {
mpTree->mbAutoScroll =!mpTree->mbAutoScroll ;
}
//-----------------------------------------------------------------------------
void CInspectorBar::OnAbout () {
AfxSetResourceHandle (_hdllInstance) ;
CDialog dlg (IDD_ABOUT) ;
dlg.DoModal () ;
AfxSetResourceHandle (acedGetAcadResourceInstance ()) ;
}
//-----------------------------------------------------------------------------
#pragma warning (default : 4101)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -