Main Page   Modules   Class Hierarchy   Compound List   File List   Compound Members   File Members   Related Pages  

hyp.fem.interfaces.h

00001 /*
00002 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
00003  Ephydryne Components.
00004  Ephydryne is a part of the Hyperion Project.
00005 ----------------------------------------------------------
00006  Copyright (c) 2001 Pierre Rebours.
00007 
00008  This library is free software; you can redistribute it and/or
00009  modify it under the terms of the GNU Lesser General Public
00010  License as published by the Free Software Foundation; either
00011  version 2.1 of the License, or (at your option) any later version.
00012 
00013  This library is distributed in the hope that it will be useful,
00014  but WITHOUT ANY WARRANTY; without even the implied warranty of
00015  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00016  
00017  See hyp.license.txt file for more information about the license.
00018  
00019  Web: http://lagrandeporte.multimania.com/hyperion
00020  Email: pierre_rebours@yahoo.com
00021 ----------------------------------------------------------
00022  CVS
00023  $Log$
00024 
00025  Add 29/03/01 Pierre Reboours IFEOMesh Functions to localize the nodes
00026  Add 12/06/01 Pierre Rebours IFEOMesh IsSideFixed
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

Top of Page
written by Pierre Rebours © 2000-2001. Terms of Use.