35#if !defined(VSPCUSTOMGEOM__INCLUDED_)
36#define VSPCUSTOMGEOM__INCLUDED_
43#include <unordered_map>
44using std::unordered_map;
57class CustomGeomMgrSingleton
60 static CustomGeomMgrSingleton& getInstance()
62 static CustomGeomMgrSingleton instance;
68 void InitGeom(
const string&
id,
const string& module_name,
const string& display_name );
69 void SetCurrCustomGeom(
const string&
id ) { m_CurrGeom = id; }
86 void ReadCustomScripts( Vehicle* veh );
87 vector< GeomType > GetCustomTypes() {
return m_CustomTypeVec; }
110 string AddParm(
int type,
const string & name,
const string & group );
149 int AddGui(
int type,
const string & label =
string(),
const string & parm_name =
string(),
const string & group_name =
string(),
double range = 10 );
150 vector< GuiDef > GetGuiDefVec(
const string & geom_id );
173 vector< GuiUpdate > GetGuiUpdateVec();
373 double l2 = 0,
double r2 = 0,
double u2 = 0,
double w2 = 0 );
567 vector< string > GetCustomScriptModuleNames();
570 static int SaveScriptContentToFile(
const string & module_name,
const string & file_name );
575 CustomGeomMgrSingleton();
576 CustomGeomMgrSingleton( CustomGeomMgrSingleton
const& copy ) =
delete;
577 CustomGeomMgrSingleton& operator=( CustomGeomMgrSingleton
const& copy ) =
delete;
580 vector< GeomType > m_CustomTypeVec;
581 unordered_map< string, string > m_ModuleGeomIDMap;
585#define CustomGeomMgr CustomGeomMgrSingleton::getInstance()
601class CustomXSec :
public SkinXSec
605 CustomXSec( XSecCurve *xsc );
607 virtual void Update();
608 virtual void CopyBasePos( XSec* xs );
610 virtual void SetLoc(
const vec3d & loc );
611 virtual vec3d GetLoc() {
return m_Loc; }
612 virtual void SetRot(
const vec3d & rot );
613 virtual vec3d GetRot() {
return m_Rot; }
615 virtual double GetScale();
639class CustomGeom :
public Geom
642 CustomGeom( Vehicle* vehicle_ptr );
643 virtual ~CustomGeom();
647 void SetScriptModuleName(
const string& name ) { m_ScriptModuleName = name; }
648 string GetScriptModuleName() {
return m_ScriptModuleName; }
649 void SetDisplayName(
const string& name ) { m_DisplayName = name; }
650 string GetDisplayName() {
return m_DisplayName; }
653 string AddParm(
int type,
const string & name,
const string & group );
654 string FindParmID(
int index );
657 int AddGui(
const GuiDef & gd );
658 vector< GuiDef > GetGuiDefVec() {
return m_GuiDefVec; }
659 void AddGuiTriggerEvent(
int gui_index );
660 bool CheckClearTriggerEvent(
int gui_index );
662 void AddUpdateGui(
const GuiUpdate & gu );
663 vector< GuiUpdate > GetGuiUpdateVec();
666 string AddXSecSurf();
667 void RemoveXSecSurf(
const string&
id );
668 void ClearXSecSurfs();
670 virtual int GetNumXSecSurfs()
const {
return (
int )m_XSecSurfVec.size(); }
671 virtual XSecSurf* GetXSecSurf(
int index );
674 virtual void SkinXSecSurf(
bool closed_flag );
675 virtual void CloneSurf(
int index,
Matrix4d & mat );
676 virtual void TransformSurf(
int index,
Matrix4d & mat );
679 virtual xmlNodePtr EncodeXml( xmlNodePtr & node );
680 virtual xmlNodePtr DecodeXml( xmlNodePtr & node );
683 virtual void SetVspSurfType(
int type,
int surf_id = -1 );
684 virtual void SetVspSurfCfdType(
int type,
int surf_id = -1);
687 virtual void AddDefaultSources(
double base_len = 1.0);
688 virtual void SetUpDefaultSource( SourceData & sd ) { m_DefaultSourceVec.push_back( sd ); }
689 virtual void ClearAllDefaultSources() { m_DefaultSourceVec.clear(); }
691 virtual void ComputeCenter();
692 virtual void ApplyScale(
double currentScale );
695 virtual void OffsetXSecs(
double off );
700 string m_ScriptModuleName;
701 string m_DisplayName;
703 vector< Parm* > m_CustomGeomParmVec;
704 vector< GuiDef > m_GuiDefVec;
705 vector< GuiUpdate > m_UpdateGuiVec;
706 vector< XSecSurf* > m_XSecSurfVec;
707 vector< int > m_TriggerVec;
708 vector< SourceData > m_DefaultSourceVec;
711 unordered_map< int, int > m_VspSurfTypeMap;
712 int m_VspSurfCfdType;
713 unordered_map< int, int > m_VspSurfCfdTypeMap;
716 virtual void UpdateSurf();
719 virtual void UpdateFlags();
721 bool m_ConformalFlag;
722 double m_ConformalOffset;
723 virtual void ApplyConformalOffset(
double off );
void AddUpdateGui(int gui_id, const string &parm_id)
void TransformSurf(int index, Matrix4d &mat)
void RemoveXSecSurf(const string &id)
string AppendCustomXSec(const string &xsec_surf_id, int type)
void SetupCustomDefaultSource(int type, int surf_index, double l1, double r1, double u1, double w1, double l2=0, double r2=0, double u2=0, double w2=0)
string InsertCustomXSec(const string &xsec_surf_id, int type, int index)
void SetVspSurfCfdType(int type, int surf_id=-1)
void CopyCustomXSec(const string &xsec_surf_id, int index)
void SetCustomXSecRot(const string &xsec_id, const vec3d &rot)
vec3d GetCustomXSecLoc(const string &xsec_id)
void SetVspSurfType(int type, int surf_id=-1)
void SetCustomCenter(double x, double y, double z)
vec3d GetCustomXSecRot(const string &xsec_id)
string GetCurrCustomGeom()
void CutCustomXSec(const string &xsec_surf_id, int index)
void SetCustomXSecLoc(const string &xsec_id, const vec3d &loc)
void ClearAllCustomDefaultSources()
void CloneSurf(int index, Matrix4d &mat)
void PasteCustomXSec(const string &xsec_surf_id, int index)
string AddParm(int type, const string &name, const string &group)
bool CheckClearTriggerEvent(int gui_id)
int AddGui(int type, const string &label=string(), const string &parm_name=string(), const string &group_name=string(), double range=10)
string GetCustomParm(int index)
void SkinXSecSurf(bool closed_flag)