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

 
site update: 18 July 08

page update: 5 Feb 07


cadtovec.c


/**
 * CADTOVEC - Convert a CAD object into a vector object
**/

#define RCSID "$Id: cadtovec.c_v 1.5 2004/07/06 22:30:38 scowan Exp $"

#include <mgui/appmain.h>
#include <rvc/dialogs.h>			// For RVC::DlgGetObjectSet()
#include <rvc/combine.h>			// For RVC::COMBINE::ExtractToVector()
#include <mi32/mstatus.h>			// For STATUSDIALOG and STATUSCONTEXT
#include <mi32/simplear.h>			// For SIMPLE_ARRAY<>
#include <mgui/dlgshell.h>			// For MGUI::DLGSHELL
#include <mgui/ctrl.h>				// For MGUI::CTRL_TOGGLEBUTTON
#include <mgui/formobjl.h>			// For MGUI::FORM_OBJECT_LIST_T<>
#include <mgui/combobox.h>			// For MGUI::FORM_COMBOBOX

namespace {

class CADTOVECTDATA : public MGUI::DLGSHELL {
	public:

		CADTOVECTDATA (
			TEXTID Title,
			HELPID HelpID
			) : 
			DLGSHELL(Title, HelpID)
			{}
			
		~CADTOVECTDATA (
			) {}
			
	private:
		MGUI::FORM_OBJECT_LIST_T<CADTOVECTDATA> m_ObjectList;
		MGUI::CTRL_TOGGLEBUTTON m_Optimize;
		MGUI::FORM_COMBOBOX m_TopoType;
		RVC::GEOMETRIC::GETOBJFILTER_ISNOTEMPTY m_IsEmptyFilter;		// Used to avoid selecting empty CAD objects to convert to vectors
		
		virtual void v_OnApply ();
		virtual ERRVALUE v_CreateContent ();

		ERRVALUE ExecProcess ();
		void OnObjectSelected (const RVC::OBJITEM& ObjItem);
		
	};

}		// End of local namespace


// Create the MGUI FORM's and CTRL's for the dialog
ERRVALUE CADTOVECTDATA::v_CreateContent (
	) {
	m_ObjectList.Create(GetMainPane(), this, &CADTOVECTDATA::OnObjectSelected, TEXTID_Prompt_Objects_ToProcess, RVC::OBJTYPE_CAD, GETOBJFLAG_None, &m_IsEmptyFilter);
	m_TopoType.Create(GetMainPane(), "topology_level_c");
	m_TopoType.AddItem(RVC::VECTOR::TOPOLOGYTYPE_Polygonal, "polygonal");
	m_TopoType.AddItem(RVC::VECTOR::TOPOLOGYTYPE_Planar, "planar");
	m_TopoType.AddItem(RVC::VECTOR::TOPOLOGYTYPE_Network, "network");
	m_TopoType.SetSelectedItemID(RVC::VECTOR::TOPOLOGYTYPE_Polygonal);
	m_Optimize.Create(GetMainPane(), "optimize_vector_when_saving", MGUI::CTRL_TOGGLEBUTTON::STYLE_Check, true);
	
	CreateButton(MGUI::DLGSHELL::BUTTON_Apply, "run");			// Override common button names but keep the same behavior
	CreateButton(MGUI::DLGSHELL::BUTTON_Close, "exit");
	CreateButton(MGUI::DLGSHELL::BUTTON_Help);
	SetApplyEnabled(false);
	return (0);
	}


ERRVALUE CADTOVECTDATA::ExecProcess (
	) {
	const RVC::OBJITEMLIST& SrcList = m_ObjectList.GetObjectList();
	RVC::OBJITEMLIST OutList;
	RVC::OBJITEM::SetupOutputList(OutList, SrcList);

	ERRVALUE err = RVC::DlgGetObjectSet(*this, TEXTID_Prompt_Vectors_Output, RVC::OBJTYPE_Vector, OutList, GETOBJFLAG_AllowAutoName|GETOBJFLAG_NewOnly);
	if (err < 0 && err != R_NewRequest) return (SetErrPosn(err));

	STATUSDIALOG sd;
	if ((err = sd.Create(*this)) < 0) return (err);
		{
		STATUSCONTEXT sc(sd);

		RVC::COMBINE::COMBINEFLAGS CombineFlags = RVC::COMBINE::COMBINEFLAG_None;
		if (m_Optimize.GetValue()) CombineFlags |= RVC::COMBINE::COMBINEFLAG_Optimize;

		RVC::OBJITEMLIST::CONST_ITERATOR cit;
		RVC::OBJITEMLIST::ITERATOR OutIt;
		MISTRING msg;
		int objnum;
		for (cit = SrcList.Begin(), OutIt = OutList.Begin(), objnum = 0;(cit != SrcList.End());++cit, ++OutIt, ++objnum) {
			msg << STR_Clear << TEXTID_Processing_ObjectXofN << (objnum+1) << OutList.GetNumItems();
			if ((err = sc.TextUpdate(msg)) < 0) return (err);

			RVC::GEOMETRIC::ELEMSELECTPARMS SelectParms;
			SelectParms.SetSelectAll();
			TRANS2D_MAPGEN SrcToDest;
			if ((err = RVC::COMBINE::ExtractToVector(*cit, SelectParms, SrcToDest, *OutIt, CombineFlags, static_cast<RVC::VECTOR::TOPOLOGYTYPE>(m_TopoType.GetSelectedItemID()))) < 0) return (SetErrPosn(err));
			}
		}
	sd.ReportDone(TEXTID_TimeTo_ConvertToVector);
	return (0);
	}


// Called when "Run" is pressed
void CADTOVECTDATA::v_OnApply (
	) {
	ERRVALUE err;
	if ((err = ExecProcess()) < 0) {
		MdlgShowErrorCode(*this, err);
		}
	else {
		m_ObjectList.Clear();
		}
	return;
	}
	

// Called when changes to the CAD object list are made, used here to enable the "Run" button
void CADTOVECTDATA::OnObjectSelected (
	const RVC::OBJITEM& ObjItem
	) {
	SetApplyEnabled(ObjItem.IsAssigned());
	return;
	}


//=====================================================================================================================
//		APP_CADMTOVEC - Begin

class APP_CADTOVEC : public MGUI::APP_BASE {
	public:
		APP_CADTOVEC (
			) :
			pdp(TEXTID_Title_GeometricToVectorConversion, HELPID_ObjectToVectorConversion)
			{}
	private:
		CADTOVECTDATA pdp;
		// Overrides from APP_BASE.
		virtual const char* v_GetProcessName () const;
		virtual void v_ExitInstance ();
		virtual bool v_InitInstance ();
	};


const char* APP_CADTOVEC::v_GetProcessName (
	) const {
	return ("cadtovec");
	}


void APP_CADTOVEC::v_ExitInstance (
	) {
	return;
	}


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

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

class MAIN : public MGUI::APP_MAIN {
	public:
		MAIN () :m_pApp(new APP_CADTOVEC) { }
	private:
		APP_CADTOVEC *m_pApp;
	};

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