mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-07 18:30:55 +03:00
171 lines
5.6 KiB
C++
Executable File
171 lines
5.6 KiB
C++
Executable File
#include <IGESData_IGESReaderData.ixx>
|
|
#include <IGESData_IGESModel.hxx>
|
|
#include <IGESData_IGESEntity.hxx>
|
|
#include <IGESData_UndefinedEntity.hxx>
|
|
#include <Interface_FileParameter.hxx>
|
|
#include <Interface_ParamList.hxx>
|
|
#include <Interface_ParamType.hxx>
|
|
#include <TCollection_HAsciiString.hxx>
|
|
#include <Interface_Macros.hxx>
|
|
|
|
|
|
|
|
IGESData_IGESReaderData::IGESData_IGESReaderData
|
|
(const Standard_Integer nbe, const Standard_Integer nbp)
|
|
: Interface_FileReaderData (nbe,nbp) , thectyp (0,0) , thedirs(0,nbe)
|
|
{
|
|
thestep = IGESData_ReadDir; thedefw = 0.;
|
|
theparh = new Interface_ParamSet(30);
|
|
thestar = new TColStd_HSequenceOfHAsciiString();
|
|
thechk = new Interface_Check;
|
|
}
|
|
|
|
|
|
void IGESData_IGESReaderData::AddStartLine
|
|
(const Standard_CString aval)
|
|
{
|
|
thestar->Append (new TCollection_HAsciiString(aval));
|
|
}
|
|
|
|
Handle(TColStd_HSequenceOfHAsciiString) IGESData_IGESReaderData::StartSection
|
|
() const
|
|
{ return thestar; }
|
|
|
|
void IGESData_IGESReaderData::AddGlobal
|
|
(const Interface_ParamType atype, const Standard_CString aval)
|
|
{
|
|
theparh->Append(aval,strlen(aval),atype,0);
|
|
}
|
|
|
|
void IGESData_IGESReaderData::SetGlobalSection ()
|
|
{ thehead.Init(theparh,thechk); }
|
|
|
|
const IGESData_GlobalSection& IGESData_IGESReaderData::GlobalSection () const
|
|
{ return thehead; }
|
|
|
|
void IGESData_IGESReaderData::SetDirPart
|
|
(const Standard_Integer num,
|
|
const Standard_Integer i1, const Standard_Integer i2,
|
|
const Standard_Integer i3, const Standard_Integer i4,
|
|
const Standard_Integer i5, const Standard_Integer i6,
|
|
const Standard_Integer i7, const Standard_Integer i8,
|
|
const Standard_Integer i9, const Standard_Integer i10,
|
|
const Standard_Integer i11, const Standard_Integer i12,
|
|
const Standard_Integer i13, const Standard_Integer i14,
|
|
const Standard_Integer i15, const Standard_Integer i16,
|
|
const Standard_Integer i17,
|
|
const Standard_CString res1, const Standard_CString res2,
|
|
const Standard_CString label, const Standard_CString subs)
|
|
{
|
|
IGESData_DirPart& DP = thedirs(num);
|
|
DP.Init(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,
|
|
i15,i16,i17,res1,res2,label,subs);
|
|
//// thedirs(num) = DP; // verifier si utile
|
|
//InitParams(num); gka optimization memory
|
|
}
|
|
|
|
|
|
const IGESData_DirPart& IGESData_IGESReaderData::DirPart
|
|
(const Standard_Integer num) const
|
|
{ return thedirs(num); }
|
|
|
|
void IGESData_IGESReaderData::DirValues
|
|
(const Standard_Integer num,
|
|
Standard_Integer& i1, Standard_Integer& i2, Standard_Integer& i3,
|
|
Standard_Integer& i4, Standard_Integer& i5, Standard_Integer& i6,
|
|
Standard_Integer& i7, Standard_Integer& i8, Standard_Integer& i9,
|
|
Standard_Integer& i10, Standard_Integer& i11, Standard_Integer& i12,
|
|
Standard_Integer& i13, Standard_Integer& i14, Standard_Integer& i15,
|
|
Standard_Integer& i16, Standard_Integer& i17,
|
|
Standard_CString& res1, Standard_CString& res2,
|
|
Standard_CString& label, Standard_CString& subs) const
|
|
{
|
|
thedirs(num).Values(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,
|
|
i15,i16,i17,res1,res2,label,subs);
|
|
}
|
|
|
|
IGESData_IGESType IGESData_IGESReaderData::DirType
|
|
(const Standard_Integer num) const
|
|
{ return thedirs(num).Type(); }
|
|
|
|
Standard_Integer IGESData_IGESReaderData::NbEntities () const
|
|
{ return thedirs.Upper(); }
|
|
|
|
Standard_Integer IGESData_IGESReaderData::FindNextRecord
|
|
(const Standard_Integer num) const
|
|
{
|
|
if (num >= thedirs.Upper()) return 0;
|
|
else return (num + 1);
|
|
}
|
|
|
|
|
|
// Reference a d'autres entites : c'est a la fois tres simple et problematique
|
|
// Tres simple : une reference a une entite est un numero (dans directory list)
|
|
// qui vaut (2*N-1) si N est le rang vrai de l'entite
|
|
// Problematique : ce numero est un Entier ... rien ne le distingue d'un autre
|
|
// D'ou critere : tout entier impair inferieur a 2*NbRecords PEUT etre une
|
|
// reference ... C'est a chaque entite de faire ensuite son tri ...
|
|
// Attention, une reference peut etre donnee en "Pointeur Negatif"
|
|
// N.B.: DirPart non concernes (lecture specifique assuree par IGESEntity)
|
|
|
|
void IGESData_IGESReaderData::SetEntityNumbers ()
|
|
{
|
|
// On essaie de se baser uniquement sur calcul de IGESRead
|
|
/*
|
|
Standard_Integer nbd = thedirs.Upper();
|
|
for (Standard_Integer i = 1; i <= nbd; i ++) {
|
|
Standard_Integer nbp = NbParams(i);
|
|
for (Standard_Integer j = 1; j <= nbp; j ++) {
|
|
Interface_FileParameter& FP = ChangeParam(i,j);
|
|
if (FP.ParamType() == Interface_ParamInteger) {
|
|
Standard_Integer val = atoi(FP.CValue());
|
|
if (val > 0) {
|
|
if (val != ((val/2) *2) && val < 2*nbd) { // candidat possible
|
|
FP.SetEntityNumber((val+1)/2);
|
|
}
|
|
} else if (val < 0) {
|
|
Standard_Integer mval = -val;
|
|
if (mval != ((mval/2) *2) && mval < 2*nbd) { // candidat possible
|
|
FP.SetEntityNumber((mval+1)/2);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
*/
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : GlobalCheck
|
|
//purpose :
|
|
//=======================================================================
|
|
|
|
Handle(Interface_Check) IGESData_IGESReaderData::GlobalCheck () const
|
|
{
|
|
return thechk;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : SetDefaultLineWeight
|
|
//purpose :
|
|
//=======================================================================
|
|
|
|
void IGESData_IGESReaderData::SetDefaultLineWeight (const Standard_Real defw)
|
|
{
|
|
thedefw = defw;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : DefaultLineWeight
|
|
//purpose :
|
|
//=======================================================================
|
|
|
|
Standard_Real IGESData_IGESReaderData::DefaultLineWeight () const
|
|
{
|
|
return thedefw;
|
|
}
|