// Copyright (c) 1999-2014 OPEN CASCADE SAS // // This file is part of Open CASCADE Technology software library. // // This library is free software; you can redistribute it and/or modify it under // the terms of the GNU Lesser General Public License version 2.1 as published // by the Free Software Foundation, with special exception defined in the file // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT // distribution for complete text of the license and disclaimer of any warranty. // // Alternatively, this file may be used under the terms of Open CASCADE // commercial license or contractual agreement. #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include IMPLEMENT_STANDARD_RTTIEXT(StepData_StepModel,Interface_InterfaceModel) // Entete de fichier : liste d entites StepData_StepModel::StepData_StepModel () :mySourceCodePage((Resource_FormatType)Interface_Static::IVal("read.step.codepage")), myReadUnitIsInitialized(Standard_False), myWriteUnit (1.) { switch (Interface_Static::IVal("write.step.unit")) { case 1: myWriteUnit = 25.4; break; case 2: myWriteUnit = 1.; break; case 4: myWriteUnit = 304.8; break; case 5: myWriteUnit = 1609344.0; break; case 6: myWriteUnit = 1000.0; break; case 7: myWriteUnit = 1000000.0; break; case 8: myWriteUnit = 0.0254; break; case 9: myWriteUnit = 0.001; break; case 10: myWriteUnit = 10.0; break; case 11: myWriteUnit = 0.0000254; break; default: GlobalCheck()->AddWarning("Incorrect write.step.unit parameter, use default value"); } } Handle(Standard_Transient) StepData_StepModel::Entity (const Standard_Integer num) const { return Value(num); } // nom plus joli void StepData_StepModel::GetFromAnother (const Handle(Interface_InterfaceModel)& other) { theheader.Clear(); DeclareAndCast(StepData_StepModel,another,other); if (another.IsNull()) return; Interface_EntityIterator iter = another->Header(); // recopier le header. Attention, header distinct du contenu ... Interface_CopyTool TC (this,StepData::HeaderProtocol()); for (; iter.More(); iter.Next()) { Handle(Standard_Transient) newhead; if (!TC.Copy(iter.Value(),newhead,Standard_False,Standard_False)) continue; if (!newhead.IsNull()) theheader.Append(newhead); } } Handle(Interface_InterfaceModel) StepData_StepModel::NewEmptyModel () const { return new StepData_StepModel; } Interface_EntityIterator StepData_StepModel::Header () const { Interface_EntityIterator iter; theheader.FillIterator(iter); return iter; } Standard_Boolean StepData_StepModel::HasHeaderEntity (const Handle(Standard_Type)& atype) const { return (theheader.NbTypedEntities(atype) == 1); } Handle(Standard_Transient) StepData_StepModel::HeaderEntity (const Handle(Standard_Type)& atype) const { return theheader.TypedEntity(atype); } // Remplissage du Header void StepData_StepModel::ClearHeader () { theheader.Clear(); } void StepData_StepModel::AddHeaderEntity (const Handle(Standard_Transient)& ent) { theheader.Append(ent); } void StepData_StepModel::VerifyCheck(Handle(Interface_Check)& ach) const { Interface_GeneralLib lib(StepData::HeaderProtocol()); Handle(StepData_StepModel) me (this); Handle(Interface_Protocol) aHP = StepData::HeaderProtocol(); Interface_ShareTool sh(me,aHP); Handle(Interface_GeneralModule) module; Standard_Integer CN; for (Interface_EntityIterator iter = Header(); iter.More(); iter.Next()) { Handle(Standard_Transient) head = iter.Value(); if (!lib.Select(head,module,CN)) continue; module->CheckCase(CN,head,sh,ach); } } void StepData_StepModel::DumpHeader (Standard_OStream& S, const Standard_Integer /*level*/) const { // NB : level n est pas utilise Handle(StepData_Protocol) stepro = StepData::HeaderProtocol(); Standard_Boolean iapro = !stepro.IsNull(); if (!iapro) S <<" -- WARNING : StepModel DumpHeader, Protocol not defined\n"; Interface_EntityIterator iter = Header(); Standard_Integer nb = iter.NbEntities(); S << " -- Step Model Header : " <DynamicType()->Name() << "\n"; } if (!iapro || nb == 0) return; S << " -- -- STEP MODEL HEADER CONTENT -- --" << "\n"; S << " -- Dumped with Protocol : " << stepro->DynamicType()->Name() << " --\n"; Handle(StepData_StepModel) me (this); StepData_StepWriter SW(me); SW.SendModel(stepro,Standard_True); // envoi HEADER seul SW.Print(S); } void StepData_StepModel::ClearLabels () { theidnums.Nullify(); } void StepData_StepModel::SetIdentLabel (const Handle(Standard_Transient)& ent, const Standard_Integer ident) { Standard_Integer num = Number(ent); if (!num) return; Standard_Integer nbEnt = NbEntities(); if(theidnums.IsNull()) { theidnums = new TColStd_HArray1OfInteger(1,nbEnt); theidnums->Init(0); } else if(nbEnt > theidnums->Length()) { Standard_Integer prevLength = theidnums->Length(); Handle(TColStd_HArray1OfInteger) idnums1 = new TColStd_HArray1OfInteger(1,nbEnt); idnums1->Init(0); Standard_Integer k =1; for( ; k <= prevLength; k++) idnums1->SetValue(k , theidnums->Value(k)); theidnums = idnums1; } theidnums->SetValue(num,ident); } Standard_Integer StepData_StepModel::IdentLabel (const Handle(Standard_Transient)& ent) const { if(theidnums.IsNull()) return 0; Standard_Integer num = Number(ent); return (!num ? 0 : theidnums->Value(num)); } void StepData_StepModel::PrintLabel (const Handle(Standard_Transient)& ent, Standard_OStream& S) const { Standard_Integer num = (theidnums.IsNull() ? 0 : Number(ent)); Standard_Integer nid = (!num ? 0 : theidnums->Value(num)); if (nid > 0) S <<"#"< 0) S <<"(#"<Value(num)); if (nid > 0) sprintf (text, "#%d",nid); else if (num > 0) sprintf (text, "(#%d)",num); else sprintf (text, "(#0..)"); label = new TCollection_HAsciiString(text); return label; } //======================================================================= //function : SetLocalLengthUnit //purpose : //======================================================================= void StepData_StepModel::SetLocalLengthUnit(const Standard_Real theUnit) { StepData_GlobalFactors::Intance().SetCascadeUnit(theUnit); myReadUnitIsInitialized = Standard_True; } //======================================================================= //function : LocalLengthUnit //purpose : //======================================================================= Standard_Real StepData_StepModel::LocalLengthUnit() const { return StepData_GlobalFactors::Intance().CascadeUnit(); } //======================================================================= //function : SetLocalLengthUnit //purpose : //======================================================================= void StepData_StepModel::SetWriteLengthUnit(const Standard_Real theUnit) { myWriteUnit = theUnit; } //======================================================================= //function : LocalLengthUnit //purpose : //======================================================================= Standard_Real StepData_StepModel::WriteLengthUnit() const { return myWriteUnit; }