|
TNTmips

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