|
TNTmips

|
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;
//=====================================================================================================================
©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
| |