Files
geant4/source/geometry/solids/STEP/include/STEPentity.h
T
2016-06-08 15:28:20 +02:00

166 lines
4.5 KiB
C++

//
//
// $Id: STEPentity.h,v 1.2 1999/05/21 20:20:31 japost Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
#ifndef STEPENTITY_H
#define STEPENTITY_H 1
/*
* NIST STEP Core Class Library
* clstepcore/STEPentity.h
* May 1995
* K. C. Morris
* David Sauder
* Development of this software was funded by the United States Government,
* and is not subject to copyright.
*/
/* */
#ifdef __O3DB__
#include <OpenOODB.h>
#endif
#include <stdio.h>
#include <STEPattributeList.h>
#include <EntityInst.h>
#include <sdai.h>
class STEPattributeList;
class STEPattribute;
#include <ctype.h>
#include <Str.h>
class InstMgr;
class EntityDescriptor;
///////////////////////////////////////////////////////////////////////////////
// STEPentity is like the corresponding SDAI object AppInstance.
class STEPentity : public EntityInstance {
private:
int _cur; // provides a built-in way of accessing attributes in order.
public:
STEPattributeList attributes;
int STEPfile_id;
ErrorDescriptor _error;
SCLstring *p21Comment;
// registry additions
EntityDescriptor *eDesc;
// head entity for multiple inheritance. If it is null then this
// STEPentity is not part of a multiply inherited entity. If it
// points to a STEPentity then this STEPentity is part of a mi entity
// and head points at the root STEPentity of the primary inheritance
// path (the one that is the root of the leaf entity).
STEPentity *headMiEntity;
// these form a chain of other entity parents for multiple inheritance
STEPentity *nextMiEntity;
protected:
int _complex;
public:
STEPentity ();
STEPentity (int fileid, int complex = 0);
virtual ~STEPentity();
int IsComplex() { return _complex; }
int SetFileId(int fid) { return STEPfile_id = fid; }
int GetFileId() const { return STEPfile_id; }
int FileId (int fid) { return STEPfile_id = fid; }
int FileId() const { return STEPfile_id; }
void AddP21Comment(SCLstring &s, int replace = 1);
void AddP21Comment(const char *s, int replace = 1);
void DeleteP21Comment() { delete p21Comment; p21Comment = 0; }
// guaranteed a string (may be null string)
const char *P21Comment()
{ return ( p21Comment ? p21Comment->chars() : "" ); }
// returns null if no comment exists
const char *P21CommentRep()
{ return ( p21Comment ? p21Comment->rep() : 0 ); }
const char *EntityName() const { return eDesc->Name(); }
virtual Severity ValidLevel(ErrorDescriptor *error, InstMgr *im,
int clearError = 1);
ErrorDescriptor &Error() { return _error; }
// clears entity's error and optionally all attr's errors
void ClearError(int clearAttrs = 1);
// clears all attr's errors
void ClearAttrError();
// void EnforceOptionality(int on = 1);
STEPentity *Replicate();
// ACCESS attributes in order.
int AttributeCount();
STEPattribute * NextAttribute();
void ResetAttributes() { _cur =0; }
// READ
virtual Severity STEPread(int id, int addFileId,
class InstMgr * instance_set,
istream& in =cin);
virtual void STEPread_error(char c, int index, istream& in);
// WRITE
virtual void STEPwrite(ostream& out =G4cout, int writeComment = 1);
virtual const char * STEPwrite(SCLstring &buf);
void STEPwrite_reference (ostream& out =G4cout);
const char * STEPwrite_reference (SCLstring &buf);
void beginSTEPwrite(ostream& out =G4cout); // writes out the SCOPE section
void endSTEPwrite(ostream& out =G4cout);
// MULTIPLE INHERITANCE
int MultipleInheritance() { return !(headMiEntity == 0); }
void HeadEntity(STEPentity *se) { headMiEntity = se; }
STEPentity * HeadEntity() { return headMiEntity; }
STEPentity *GetNextMiEntity() { return nextMiEntity; }
STEPentity *GetMiEntity(char *EntityName);
void AppendMultInstance(STEPentity *se);
protected:
STEPattribute * GetSTEPattribute (const char *);
STEPattribute * MakeDerived (const char *);
virtual void CopyAs (STEPentity *);
void PrependEntityErrMsg();
}
;
///////////////////////////////////////////////////////////////////////////////
extern STEPentity NilSTEPentity;
#define ENTITY_NULL &NilSTEPentity
#define NULL_ENTITY &NilSTEPentity
typedef STEPentity* STEPentityPtr;
typedef STEPentity* STEPentityH;
extern STEPentity *
ReadEntityRef(istream &in, ErrorDescriptor *err, char *tokenList,
InstMgr * instances, int addFileId);
//typedef STEPentity * (* Creator) () const;
//typedef STEPentity * (* Creator) () ;
#endif