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

25 March 2009

page update: 26 May 11


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