00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef _hyp_fem_interfaces_h_
00032 #define _hyp_fem_interfaces_h_
00033
00034 #define hyp_NAMESPACE_BEGIN_HYPFEM hyp_NAMESPACE_BEGIN_HYP \
00035 hyp_NAMESPACE_BEGIN(hypfem)
00036 #define hyp_NAMESPACE_END_HYPFEM hyp_NAMESPACE_END_HYP \
00037 hyp_NAMESPACE_END(hypfem)
00038
00039
00040 hyp_NAMESPACE_BEGIN_HYPFEM
00041
00042
00043
00048
00066 struct IContainer :
00067 public hyp_ker::IUnknown
00068 {
00073 virtual void Add(hyp_ker::IUnknown* pObject) =0;
00077 virtual void RemoveAll() =0;
00081 virtual t_size GetSize() const =0;
00086 virtual void Remove(hyp_ker::IUnknown* pObject) =0;
00087 };
00088
00089 hyp_DEFINE_GUID(IID_hypIContainer,
00090 0xcc11c7c1, 0x9f7e, 0x11d4, 0xa0, 0x8f, 0x0, 0x80, 0xad, 0x97, 0x95, 0x1b);
00091
00093 typedef hyp_ker::IPtr<IContainer,&IID_hypIContainer> t_spContainer;
00094
00114 struct IContainerKey :
00115 public hyp_ker::IUnknown
00116 {
00122 virtual void Add(hyp_ker::IUnknown* pObject,const t_label& Label) =0;
00127 virtual void Remove(const t_label& Label) =0;
00132 virtual hyp_ker::IUnknown* GetContent(const t_label& Label) =0;
00137 virtual t_label GetKey(hyp_ker::IUnknown* pObject) =0;
00143 virtual void SetKey(hyp_ker::IUnknown* pObject,const t_label& Label) =0;
00144 };
00145
00146 hyp_DEFINE_GUID(IID_hypIContainerKey,
00147 0xcc11c7c2, 0x9f7e, 0x11d4, 0xa0, 0x8f, 0x0, 0x80, 0xad, 0x97, 0x95, 0x1b);
00148
00150 typedef hyp_ker::IPtr<IContainerKey,&IID_hypIContainerKey> t_spContainerKey;
00151
00165 struct IContainerIterator :
00166 public hyp_ker::IUnknown
00167 {
00171 virtual hyp_ker::IUnknown* SetBeginSelection() =0;
00175 virtual hyp_ker::IUnknown* GetSelection() =0;
00179 virtual hyp_ker::IUnknown* IncrSelection() =0;
00180 };
00181
00182 hyp_DEFINE_GUID(IID_hypIContainerIterator,
00183 0xcc11c7c3, 0x9f7e, 0x11d4, 0xa0, 0x8f, 0x0, 0x80, 0xad, 0x97, 0x95, 0x1b);
00184
00186 typedef hyp_ker::IPtr<IContainerIterator,&IID_hypIContainerIterator> t_spContainerIterator;
00187
00201 struct IFactoriesLibrary :
00202 public hyp_ker::IUnknown
00203 {
00208 virtual void CreateInstance(const hyp_ker::hypCLSID& CLSID,
00209 hyp_ker::IUnknown* pIUnknownOuter,
00210 t_ulong,
00211 const hyp_ker::hypIID&,
00212 void**) =0;
00213
00218 virtual void CreateInstance(const char* FriendlyName,
00219 hyp_ker::IUnknown*,
00220 t_ulong,
00221 const hyp_ker::hypIID&,
00222 void**) =0;
00223 };
00224
00225 hyp_DEFINE_GUID(IID_hypIFactoriesLibrary,
00226 0x143b7161, 0x196c, 0x11d5, 0xa0, 0x90, 0x0, 0x80, 0xad, 0x97, 0x95, 0x1b);
00227
00229 typedef hyp_ker::IPtr<IFactoriesLibrary,&IID_hypIFactoriesLibrary> t_spFactoriesLibrary;
00230
00232
00233
00234
00235
00240
00260 struct IMatrix :
00261 public hyp_ker::IUnknown
00262 {
00267 virtual void SetMatrix(IMatrix* B) =0;
00278 virtual void Extract(const t_size& MinX,const t_size& MaxX,const t_size& MinY, const t_size& MaxY, IMatrix* B) =0;
00285 virtual void IncrValue(const t_size& X, const t_size& Y, const t_real& Scalar) =0;
00292 virtual void SetDim(const t_size& Column, const t_size& Row,const t_real& Scalar=0) =0;
00299 virtual void SetValue(const t_size& X, const t_size& Y, const t_real& Scalar) =0;
00306 virtual t_real GetValue(const t_size& X, const t_size& Y)const =0;
00311 virtual void SetMatrix(const t_real& Scalar) =0;
00316 virtual t_size GetNbRow() const =0;
00321 virtual t_size GetNbColumn() const =0;
00326 virtual void Multiply(const t_real& Scalar) =0;
00332 virtual void Multiply(const IMatrix* B, IMatrix* C) =0;
00337 virtual void Substract(const IMatrix* B) =0;
00341 virtual void Invert() =0;
00346 virtual void Add(const IMatrix* B) =0;
00351 virtual void Transpose(IMatrix* B)=0;
00355 virtual bool IsSymmetrical() =0;
00360 virtual void EraseRow(const t_size& Y) =0;
00365 virtual void EraseColumn(const t_size& X) =0;
00372 virtual void EraseRowsAndColumns(const t_mask_array& RowMask ,const t_mask_array& ColumnMask) =0;
00373 };
00374
00375 hyp_DEFINE_GUID(IID_hypIMathMatrix,
00376 0xbf8b3f63, 0x1f01, 0x11d5, 0xa0, 0x95, 0x0, 0x80, 0xad, 0x97, 0x95, 0x1b);
00377
00379 typedef hyp_ker::IPtr<IMatrix,&IID_hypIMathMatrix> t_spMathMatrix;
00380
00382
00383
00384
00389
00415 struct IGeometricVertex :
00416 public hyp_ker::IUnknown
00417 {
00422 virtual t_real GetCoord(const t_size& Label) const =0;
00428 virtual void SetCoord(const t_real& Scalar,const t_size& Label) =0;
00433 virtual bool IsVisible() const =0;
00438 virtual void Visible(bool bVisible) =0;
00439 };
00440
00441 hyp_DEFINE_GUID(IID_hypIGeometricVertex,
00442 0x196913e5, 0x18bd, 0x11d5, 0xa0, 0x8f, 0x0, 0x80, 0xad, 0x97, 0x95, 0x1b);
00443
00445 typedef hyp_ker::IPtr<IGeometricVertex,&IID_hypIGeometricVertex> t_spGeometricVertex;
00446
00467 struct IGeometricBase :
00468 hyp_ker::IUnknown
00469 {
00473 virtual t_size GetNumberOfVertices() =0;
00478 virtual IGeometricVertex* GetVertex(const t_label& Label) =0;
00485 virtual IGeometricVertex* GetVertex(const t_real& X,const t_real& Y,const t_real& Z) =0;
00490 virtual t_label GetLabel(IGeometricVertex* pVertex) =0;
00496 virtual void AddVertex(IGeometricVertex* pVertex,const t_label& Label) =0;
00500 virtual void DeleteVertex(const t_label& Label) =0;
00505 virtual IContainerKey* GetContainerOfVertices() =0;
00512 virtual void SetFilter(const hyp_ker::hypIID* pIID) =0;
00516 virtual void ClearFilter() =0;
00517 };
00518
00519 hyp_DEFINE_GUID(IID_hypIGeometricBase,
00520 0x2cc70d28, 0xab21, 0x11d4, 0xa0, 0x98, 0x0, 0x80, 0xad, 0x97, 0x95, 0x1b);
00521
00523 typedef hyp_ker::IPtr<IGeometricBase,&IID_hypIGeometricBase> t_spGeometricBase;
00524
00539 struct IGeometricSide :
00540 public hyp_ker::IUnknown
00541 {
00542
00543 };
00544
00545 hyp_DEFINE_GUID(IID_hypIGeometricSide,
00546 0x196913e6, 0x18bd, 0x11d5, 0xa0, 0x8f, 0x0, 0x80, 0xad, 0x97, 0x95, 0x1b);
00547
00549 typedef hyp_ker::IPtr<IGeometricSide,&IID_hypIGeometricSide> t_spGeometricSide;
00550
00567 struct IGeometricObject :
00568 public hyp_ker::IUnknown
00569 {
00577 virtual IGeometricSide* CreateSide(const t_label& Label,const t_label_enum& LabelEnum) =0;
00582 virtual IGeometricSide* CreateSide(const t_label& Label) =0;
00590 virtual IGeometricVertex* CreateVertex(const t_label& Label,const t_real& X,const t_real& Y,const t_real& Z) =0;
00596 virtual IGeometricVertex* CreateVertex(const t_label& Label) =0;
00602 virtual void AddSide(IGeometricSide*,const t_label& Label) =0;
00607 virtual void DeleteSide(const t_label& Label) =0;
00611 virtual IContainerKey* GetContainerOfSides() =0;
00615 virtual t_size GetNumberOfSides() =0;
00620 virtual IGeometricSide* GetSide(const t_label& Side) =0;
00621 };
00622
00623 hyp_DEFINE_GUID(IID_hypIGeometricObject,
00624 0x196913e2, 0x18bd, 0x11d5, 0xa0, 0x8f, 0x0, 0x80, 0xad, 0x97, 0x95, 0x1b);
00625
00627 typedef hyp_ker::IPtr<IGeometricObject,&IID_hypIGeometricObject> t_spGeometricObject;
00629
00630
00631
00636
00654 struct IFEOBoundaryConditions :
00655 public hyp_ker::IUnknown
00656 {
00662 virtual void FixDOF(const t_size& Label) =0;
00667 virtual void UnFixDOF(const t_size& Label) =0;
00671 virtual void ClearDOF() =0;
00676 virtual bool IsFixed(const t_size& Label) const =0;
00677 };
00678
00679 hyp_DEFINE_GUID(IID_hypIFEOBoundaryConditions,
00680 0x2cc70d24, 0xab21, 0x11d4, 0xa0, 0x98, 0x0, 0x80, 0xad, 0x97, 0x95, 0x1b);
00681
00683 typedef hyp_ker::IPtr<IFEOBoundaryConditions,&IID_hypIFEOBoundaryConditions> t_spFEOBoundaryConditions;
00684
00701 struct IFEOMaterial :
00702 public hyp_ker::IUnknown
00703 {
00708 virtual void SetYoung(const t_real& Scalar) =0;
00712 virtual t_real GetYoung() const =0;
00717 virtual void SetPoisson(const t_real& Scalar) =0;
00721 virtual t_real GetPoisson() const =0;
00722 };
00723
00724 hyp_DEFINE_GUID(IID_hypIFEOMaterial,
00725 0x196913e3, 0x18bd, 0x11d5, 0xa0, 0x8f, 0x0, 0x80, 0xad, 0x97, 0x95, 0x1b);
00726
00728 typedef hyp_ker::IPtr<IFEOMaterial,&IID_hypIFEOMaterial> t_spFEOMaterial;
00729
00740 struct IFEOElement :
00741 public hyp_ker::IUnknown
00742 {
00746 virtual const IFEOMaterial* GetMaterial() const =0;
00751 virtual void SetMaterial(IFEOMaterial* pObject) =0;
00758 virtual void SetKe(IMatrix* pObject) =0;
00759 };
00760
00761 hyp_DEFINE_GUID(IID_hypIFEOElement,
00762 0x196913e1, 0x18bd, 0x11d5, 0xa0, 0x8f, 0x0, 0x80, 0xad, 0x97, 0x95, 0x1b);
00763
00765 typedef hyp_ker::IPtr<IFEOElement,&IID_hypIFEOElement> t_spFEOElement;
00766
00779 struct IFEOMesh :
00780 public hyp_ker::IUnknown
00781 {
00790 virtual IGeometricBase* CreateElement(const t_label& Label,const t_label_enum& LabelEnum) =0;
00794 virtual IContainerKey* GetContainerOfElements() =0;
00798 virtual t_size GetNumberOfElements() =0;
00803 virtual IGeometricBase* GetElement(const t_label& Label) =0;
00812 virtual void ClearAllData() =0;
00819 virtual void SetDefaultMaterial(IFEOMaterial* pObject) =0;
00823 virtual const IFEOMaterial* GetDefaultMaterial() const =0;
00827 virtual void ConstructGlobalMatrix() =0;
00831 virtual IMatrix* K() const =0;
00835 virtual void ConstructBoundaryMatrix() =0;
00839 virtual void InverseBoundaryMatrix() =0;
00843 virtual void ConstructVisibleMatrix() =0;
00847 virtual void InitMasks() =0;
00852 virtual void SetRenderMask(const t_mask_array& Mask) =0;
00856 virtual t_mask_array RenderMask() =0;
00860 virtual t_real_array Displacement() =0;
00864 virtual t_real_array GetGlobalDisplacement() =0;
00869 virtual void SetRealTimeMask(const t_mask_array& Mask) =0;
00873 virtual t_mask_array RealTimeMask() =0;
00877 virtual t_real_array RealTimeForce() =0;
00881 virtual t_real_array GetGlobalRealTimeForce() =0;
00886 virtual void SetGlobalRealTimeForce(const t_real_array& Array) =0;
00890 virtual void ClearRealTimeForce() =0;
00894 virtual void PreRender() =0;
00898 virtual void Render() =0;
00902 virtual void PostRender() =0;
00910 virtual void SetForce(const t_label& Label,const t_real& FX,const t_real& FY,const t_real& FZ) =0;
00921 virtual void SetForce(const t_real& X,const t_real& Y,const t_real& Z,bool FilterX,bool FilterY,bool FilterZ,const t_real& FX,const t_real& FY,const t_real& FZ) =0;
00929 virtual void FixDOF(const t_real& X,const t_real& Y,const t_real& Z,bool FilterX,bool FilterY,bool FilterZ,bool DOFX,bool DOFY,bool DOFZ) =0;
00935 virtual bool IsSideFixed(const t_label& SideLabel,const t_size& CoordinateLabel) =0;
00936
00937 };
00938
00939 hyp_DEFINE_GUID(IID_hypIFEOMesh,
00940 0x196913e4, 0x18bd, 0x11d5, 0xa0, 0x8f, 0x0, 0x80, 0xad, 0x97, 0x95, 0x1b);
00941
00943 typedef hyp_ker::IPtr<IFEOMesh,&IID_hypIFEOMesh> t_spFEOMesh;
00944
00946
00947
00948 hyp_NAMESPACE_END_HYPFEM
00949
00950 #endif