⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inspectorbar.cpp

📁 AUTOCAD 程序员使用的
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		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 + -