home products news downloads documentation support gallery online maps resellers search
TNTmips

HOME

PROFESSIONAL
  TNTmips
  TNTedit
  TNTview
  TNTsdk
  Prices
  How To Order

CONTACT MI
  Resellers
  Consultants
  MicroImages
  About MI
  Visiting
  Prices
  Send Email
  Reseller Resources

SHOWROOM
  Gallery
  Technical Guides
  New Features
  Testimonials
  Reviews
  World Languages

FREE PRODUCTS
  TNTmips Free
  TNTatlas

  MI/X
  FAQ

DOCUMENTATION

SCRIPTING

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. 2013 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

25 March 2009

page update: 26 May 11