TNTmips

HOME

FREE PRODUCTS
  TNTlite
  TNTatlas
  TNTsim3D

DOWNLOADS
  Release Version
  Development Version
  FTP
  Language Kits
  Sample Geodata
  Reseller Resources
  Promotional

DOCUMENTATION
  Tutorials
  Technical Guides
  Quick Guides

SITE MAP

 

stdattr.c


/**
*	TNTsdk sample for computing "standard attributes" for CAD/TIN/Vector objects
**/
 
#define RCSID "@(#)$Id: stdattr.c_v 1.2 2004/08/10 13:53:59 scowan Exp $"

#include <mgui/appmain.h>
#include <rvc/mstdatt.h>
#include <rvc/vecttool.h>
#include <rvc/geometrc.h>
#include <mgui/dlgshell.h>
#include <mgui/formobjl.h>

namespace {

class STDATTRDATA : public MGUI::DLGSHELL {
	public:
		STDATTRDATA (
			) : DLGSHELL(TEXTID_Title_ObjectStatistics, HELPID_ObjectStatistics) {}
			
		~STDATTRDATA () {}
			
	private:
		MGUI::FORM_OBJECT_LIST_T<STDATTRDATA> m_ObjectList;
		MGUI::CTRL_TOGGLEBUTTON m_PointInPoly;
		MGUI::CTRL_TOGGLEBUTTON m_ComputeMaxDim;
		MGUI::CTRL_TOGGLEBUTTON m_GenElemIDTables;
		RVC::GEOMETRIC::GETOBJFILTER_ISNOTEMPTY m_IsEmptyFilter;
		
		virtual void v_OnApply ();
		virtual ERRVALUE v_CreateContent ();
		
		ERRVALUE ComputeStats ();
		void OnObjectSelected (const RVC::OBJITEM& ObjItem);
	};

}		// End of local namespace


ERRVALUE STDATTRDATA::v_CreateContent (
	) {
	RVC::OBJTYPESET ObjTypeSet(RVC::OBJTYPE_Vector, RVC::OBJTYPE_CAD, RVC::OBJTYPE_TIN);
	m_ObjectList.Create(GetMainPane(), this, &STDATTRDATA::OnObjectSelected, TEXTID_Prompt_Objects_ToProcess, ObjTypeSet, GETOBJFLAG_None, &m_IsEmptyFilter);
	m_PointInPoly.Create(GetMainPane(), "compute_point_in_polygon");
	m_ComputeMaxDim.Create(GetMainPane(), "compute_max_dim");
	m_GenElemIDTables.Create(GetMainPane(), "generate_element_id_tables");
	m_GenElemIDTables.SetEnabled(false);
	
	CreateButton(MGUI::DLGSHELL::BUTTON_Apply, "run");
	CreateButton(MGUI::DLGSHELL::BUTTON_Close, "exit");
	CreateButton(MGUI::DLGSHELL::BUTTON_Help);
	SetApplyEnabled(false);
	return (0);
	}


void STDATTRDATA::OnObjectSelected (
	const RVC::OBJITEM& ObjItem
	) {
	if (ObjItem.IsAssigned()) {
		SetApplyEnabled(true);
		const RVC::OBJITEMLIST& ObjItemList = m_ObjectList.GetObjectList();
		RVC::OBJITEMLIST::CONST_ITERATOR cit;
		for (cit = ObjItemList.Begin();(cit != ObjItemList.End());++cit) {
			if (cit->GetObjectType() == RVC::OBJTYPE_Vector) break;
			}
		m_GenElemIDTables.SetEnabled(cit != ObjItemList.End());
		}
	else {
		SetApplyEnabled(false);
		m_GenElemIDTables.SetEnabled(false);
		}
	return;
	}
	

ERRVALUE STDATTRDATA::ComputeStats (
	) {
	STATUSCONTEXT sc;
	const RVC::OBJITEMLIST& ItemList = m_ObjectList.GetObjectList();
	if (ItemList.GetNumItems() > 1) {
		sc.BarInit(ItemList.GetNumItems());
		}
	RVCOBJITEMLIST::CONST_ITERATOR cit;
	ERRVALUE err;
	for (cit = ItemList.Begin();(cit != ItemList.End());++cit) {
		MISTRING string;
		string << TEXTID_ObjectStats_ComputingObjectStats << cit->GetInfo().name;
		if ((err = sc.TextUpdate(string)) < 0) return (err);
		if (ItemList.GetNumItems() > 1) sc.BarIncrement();
		
		std::auto_ptr<RVC::GEOMETRIC> GeoObj(RVC::GEOMETRIC::GetGeometric(*cit));
		if (GeoObj.get() == 0) return (SetErrPosnC(EBadFuncParm));
		if ((err = GeoObj->Open(RVC::OBJECT::OPENMODE_Write)) < 0) return (SetErrPosn(err));
		RVC::MSTDATT::ADDSTAT flags = RVC::MSTDATT::ADDSTAT_None;
		if (m_PointInPoly.GetValue()) flags += RVC::MSTDATT::ADDSTAT_PointInPoly;
		if (m_ComputeMaxDim.GetValue()) flags += RVC::MSTDATT::ADDSTAT_MaxDim;
		
		switch (GeoObj->GetObjectType()) {
			case RVC::OBJTYPE_Vector: {
				err = RVC::MSTDATT::BuildTable(*GeoObj, ELEMTYPE_Line, flags);
				if (err >= 0) {
					err = RVC::MSTDATT::BuildTable(*GeoObj, ELEMTYPE_Polygon, flags);
					}
				RVC::VECTOR VectObj;
				if ((err = VectObj.Open(*cit, RVC::OBJECT::OPENMODE_Write)) < 0) return (SetErrPosn(err));
				RVC::VECTOR::FLAGS VectFlags = VectObj.GetFlags();
				VectFlags -= RVC::VECTOR::FLAG_NoStdAttribTables;
				if (m_GenElemIDTables.GetValue()) VectFlags -= RVC::VECTOR::FLAG_NoElementIDTables;
				if ((err = VectObj.SetFlags(VectFlags)) < 0) return (SetErrPosn(err));
				if (m_GenElemIDTables.GetValue()) {
					RVC::VECTORTOOLKIT vtk;
					RVC::VECTORTOOLKIT::OPENFLAGS OpenFlags = RVC::VECTORTOOLKIT::OPENFLAGS_NoQtree | RVC::VECTORTOOLKIT::OPENFLAGS_NoCreateStyle | RVC::VECTORTOOLKIT::OPENFLAGS_NoChangeTopoType | RVC::VECTORTOOLKIT::OPENFLAGS_NoStyle | RVC::VECTORTOOLKIT::OPENFLAGS_NoHyper;
					// Opening the vector toolkit will automatically generate and / or validate the element ID tables
					if ((err = vtk.Open(VectObj, OpenFlags)) < 0) return (SetErrPosn(err));
					}
				break;
				}
			case OTYPE_CAD:
				err = RVC::MSTDATT::BuildTable(*GeoObj, ELEMTYPE_CAD, flags);
				break;
			case OTYPE_TIN:
				err = RVC::MSTDATT::BuildTable(*GeoObj, ELEMTYPE_Edge, flags);
				if (err >= 0) {
					err = RVC::MSTDATT::BuildTable(*GeoObj, ELEMTYPE_Triangle, flags);
					}
				break;
			}
		}
	return (0);
	}
	

void STDATTRDATA::v_OnApply (
	) {
	STATUSDIALOG sdh;
	sdh.Create(*this);
	
	ERRVALUE err = ComputeStats();
	if (err >= 0) {
		sdh.ReportDone(TEXTID_TimeTo_ComputeObjectStatistics);
		m_ObjectList.Clear();
		}
	else {
		sdh.Destroy();
		if (err < 0) MdlgShowErrorCode(*this, err);
		}
	return;
	}


//=====================================================================================================================
//		APP_STDATTR - Begin

class APP_STDATTR : public MGUI::APP_BASE {
	public:
		APP_STDATTR () { }
	private:
		STDATTRDATA pdp;
		// Overrides from APP_BASE.
		virtual const char* v_GetProcessName () const { return ("objstat"); }
		virtual void v_ExitInstance () { return; }
		virtual bool v_InitInstance ();
	};


bool APP_STDATTR::v_InitInstance (
	) {
	Widget toplevel = MxInitLegacy(LEGACYINIT_NoRealize);
	pdp.DoModal(toplevel);
	MGUI::APP_MAIN::Exit();
	return (true);
	}


//		APP_STDATTR - End
//=====================================================================================================================
//		MAIN application instance class

class MAIN : public MGUI::APP_MAIN {
	public:
		~MAIN () {}
	private:
		APP_STDATTR m_App;
	};

static MAIN MainApp;

//=====================================================================================================================


Back Home ©MicroImages, Inc. 2008 Published in the United States of America
11th Floor - Sharp Tower, 206 South 13th Street, Lincoln NE 68508-2010   USA
Business & Sales: (402)477-9554  Support: (402)477-9562  Fax: (402)477-9559
Business info@microimages.com  Support support@microimages.com  Web webmaster@microimages.com

29 August 2008

page update: 13 Jun 07