diff options
Diffstat (limited to 'CSXCAD/src/CSProperties.h')
-rw-r--r-- | CSXCAD/src/CSProperties.h | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/CSXCAD/src/CSProperties.h b/CSXCAD/src/CSProperties.h new file mode 100644 index 0000000..d8757ee --- /dev/null +++ b/CSXCAD/src/CSProperties.h @@ -0,0 +1,222 @@ +/* +* Copyright (C) 2008,2009,2010 Thorsten Liebig (Thorsten.Liebig@gmx.de) +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#pragma once +/* + * Author: Thorsten Liebig + * Date: 03-12-2008 + * Lib: CSXCAD + * Version: 0.1a + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string> +#include <vector> +#include "ParameterObjects.h" +#include "CSTransform.h" +#include "CSXCAD_Global.h" +#include "CSUseful.h" + +#include <stdio.h> +#include <stdlib.h> +#include <iostream> +#include <fstream> +#include <sstream> + +class CSPrimitives; + +class CSPropUnknown; +class CSPropMaterial; + class CSPropDispersiveMaterial; + class CSPropLorentzMaterial; + class CSPropDebyeMaterial; + class CSPropDiscMaterial; +class CSPropLumpedElement; +class CSPropMetal; + class CSPropConductingSheet; +class CSPropExcitation; +class CSPropProbeBox; + class CSPropDumpBox; +class CSPropResBox; + +class TiXmlNode; + +typedef struct +{ + unsigned char R,G,B,a; +} RGBa; + +//! Continuous Structure (CS)Properties (layer) +/*! + CSProperties is a class that contains geometrical primitive structures as boxes, spheres, cylinders etc. (CSPrimitives) + All values in this class can contain parameters and mathematical equations. + This absract base-class contains basic property methodes, e.g. set/get primitives, mesh-relations, color-information etc. +*/ +class CSXCAD_EXPORT CSProperties +{ +public: + virtual ~CSProperties(); + //! Copy constructor + CSProperties(CSProperties* prop); + //! Enumeration of all possible sub-types of this base-class + enum PropertyType + { + ANY = 0xfff, UNKNOWN = 0x001, MATERIAL = 0x002, METAL = 0x004, EXCITATION = 0x008, PROBEBOX = 0x010, RESBOX = 0x020, DUMPBOX = 0x040, /* unused = 0x080, */ + DISPERSIVEMATERIAL = 0x100, LORENTZMATERIAL = 0x200, DEBYEMATERIAL = 0x400, + DISCRETE_MATERIAL = 0x1000, LUMPED_ELEMENT = 0x2000, CONDUCTINGSHEET = 0x4000 + }; + + //! Get PropertyType \sa PropertyType + int GetType(); + //! Get PropertyType as a xml element name \sa PropertyType and GetType + virtual const std::string GetTypeXMLString() const {return std::string("Any");} + + //! Get Property Type as a string. (default is the xml element name) + virtual const std::string GetTypeString() const {return GetTypeXMLString();} + + //! Check if Property is a physical material. Current PropertyType: MATERIAL & METAL + bool GetMaterial() {return bMaterial;} + //!Get ID of this property. Used for primitive-->property mapping. \sa SetID + unsigned int GetID(); + //!Set ID to this property. USE ONLY WHEN YOU KNOW WHAT YOU ARE DOING!!!! \sa GetID + void SetID(unsigned int ID); + + //!Get unique ID of this property. Used internally. \sa SetUniqueID + unsigned int GetUniqueID(); + //!Set unique ID of this property. Used internally. USE ONLY WHEN YOU KNOW WHAT YOU ARE DOING!!!! \sa GetUniqueID + void SetUniqueID(unsigned int uID); + + //! Set Name for this Property. \sa GetName + void SetName(const std::string name); + //! Get Name for this Property. \sa SetName + const std::string GetName(); + + //! Check if given attribute exists + bool ExistAttribute(std::string name); + //! Get the value of a given attribute + std::string GetAttributeValue(std::string name); + //! Add a new attribute + void AddAttribute(std::string name, std::string value); + + //! Add a primitive to this Propertie. Takes ownership of this primitive! \sa CSPrimitives, RemovePrimitive, TakePrimitive + void AddPrimitive(CSPrimitives *prim); + //! Check if primitive is owned by this Propertie. \sa CSPrimitives, AddPrimitive, RemovePrimitive, TakePrimitive + bool HasPrimitive(CSPrimitives *prim); + //! Removes a primitive of this Property. Caller must take ownership! \sa CSPrimitives, AddPrimitive, TakePrimitive + void RemovePrimitive(CSPrimitives *prim); + //! Removes and deletes a primitive of this Property. \sa CSPrimitives, RemovePrimitive, AddPrimitive, TakePrimitive + void DeletePrimitive(CSPrimitives *prim); + //! Take a primitive of this Propertie at index. Releases ownership of this primitive to caller! \sa CSPrimitives, RemovePrimitive, AddPrimitive \return NULL if not found! + CSPrimitives* TakePrimitive(size_t index); + + //! Check whether the given coord is inside of a primitive assigned to this property and return the found primitive and \a priority. + CSPrimitives* CheckCoordInPrimitive(const double *coord, int &priority, bool markFoundAsUsed=false, double tol=0); + + //! Get the quentity of primitives assigned to this property! \return Number of primitives in this property + size_t GetQtyPrimitives(); + + //! Get the Primitive at certain index position. \sa GetQtyPrimitives + CSPrimitives* GetPrimitive(size_t index); + + //! Get all Primitives \sa GetPrimitive + std::vector<CSPrimitives*> GetAllPrimitives() {return vPrimitives;} + + //! Set a fill-color for this property. \sa GetFillColor + void SetFillColor(RGBa color); + //! Get a fill-color for this property. \sa SetFillColor \return RGBa color object. + RGBa GetFillColor(); + + //! Set a edge-color for this property. \sa SetEdgeColor + void SetEdgeColor(RGBa color); + //! Get a fill-color for this property. \sa GetEdgeColor \return RGBa color object. + RGBa GetEdgeColor(); + + //! Get visibility for this property. \sa SetVisibility + bool GetVisibility(); + //! Set visibility for this property. \sa GetVisibility + void SetVisibility(bool val); + + //! Convert to Unknown Property, returns NULL if type is different! \return Returns a CSPropUnknown* or NULL if type is different! + CSPropUnknown* ToUnknown(); + //! Convert to Material Property, returns NULL if type is different! \return Returns a CSPropMaterial* or NULL if type is different! + CSPropMaterial* ToMaterial(); + //! Convert to Lorentzs-Material Property, returns NULL if type is different! \return Returns a CSPropLorentzMaterial* or NULL if type is different! + CSPropLorentzMaterial* ToLorentzMaterial(); + //! Convert to Debye-Material Property, returns NULL if type is different! \return Returns a CSPropDebyeMaterial* or NULL if type is different! + CSPropDebyeMaterial* ToDebyeMaterial(); + //! Convert to Discrete-Material Property, returns NULL if type is different! \return Returns a CSPropDiscMaterial* or NULL if type is different! + CSPropDiscMaterial* ToDiscMaterial(); + //! Convert to Metal Property, returns NULL if type is different! \return Returns a CSPropMetal* or NULL if type is different! + CSPropMetal* ToMetal(); + //! Convert to Conducting Sheet Property, returns NULL if type is different! \return Returns a CSPropConductingSheet* or NULL if type is different! + CSPropConductingSheet* ToConductingSheet(); + //! Convert to Excitation Property, returns NULL if type is different! \return Returns a CSPropExcitation* or NULL if type is different! + CSPropExcitation* ToExcitation(); + //! Convert to ProbeBox Property, returns NULL if type is different! \return Returns a CSPropProbeBox* or NULL if type is different! + CSPropProbeBox* ToProbeBox(); + //! Convert to ResBox Property, returns NULL if type is different! \return Returns a CSPropResBox* or NULL if type is different! + CSPropResBox* ToResBox(); + //! Convert to DumpBox Property, returns NULL if type is different! \return Returns a CSPropDumpBox* or NULL if type is different! + CSPropDumpBox* ToDumpBox(); + + //! Update all parameters. Nothing to do in this base class. \param ErrStr Methode writes error messages to this string! \return Update success + virtual bool Update(std::string *ErrStr=NULL); + + //! Write this property to a xml-node. \param parameterised Use false if parameters should be written as values. Parameters are lost! + virtual bool Write2XML(TiXmlNode& root, bool parameterised=true, bool sparse=false); + //! Read property from xml-node. \return Successful read-operation. + virtual bool ReadFromXML(TiXmlNode &root); + + //! Define the input type for the weighting coordinate system 0=cartesian, 1=cylindrical, 2=spherical + void SetCoordInputType(CoordinateSystem type, bool CopyToPrimitives=true); + //! Get the input type for the weighting coordinate system 0=cartesian, 1=cylindrical, 2=spherical + int GetCoordInputType() const {return coordInputType;} + + //! Check and warn for unused primitives + void WarnUnusedPrimitves(std::ostream& stream); + + //! Show status of this property, incl. all primitives + virtual void ShowPropertyStatus(std::ostream& stream); + +protected: + CSProperties(ParameterSet* paraSet); + CSProperties(unsigned int ID, ParameterSet* paraSet); + ParameterSet* clParaSet; + ParameterSet* coordParaSet; + //! x,y,z,rho,r,a,t one for all coord-systems (rho distance to z-axis (cylinder-coords), r for distance to origin) + void InitCoordParameter(); + Parameter* coordPara[7]; + CoordinateSystem coordInputType; + PropertyType Type; + bool bMaterial; + unsigned int uiID; + unsigned int UniqueID; + std::string sName; + std::string sType; + RGBa FillColor; + RGBa EdgeColor; + + bool bVisisble; + + std::vector<CSPrimitives*> vPrimitives; + + //! List of additional attribute names + std::vector<std::string> m_Attribute_Name; + //! List of additional attribute values + std::vector<std::string> m_Attribute_Value; +}; |