mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-04-12 14:27:28 +05:00
Import STEP: read more units (all currently supported by OCCT)
This commit is contained in:
parent
891fb0379d
commit
18906b1406
@ -66,239 +66,242 @@
|
|||||||
#include <Standard_Failure.hxx>
|
#include <Standard_Failure.hxx>
|
||||||
#include <Standard_ErrorHandler.hxx> // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC
|
#include <Standard_ErrorHandler.hxx> // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC
|
||||||
|
|
||||||
//=============================================================================
|
namespace
|
||||||
/*!
|
|
||||||
* GetShape()
|
|
||||||
*/
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
TopoDS_Shape GetShape(const Handle(Standard_Transient) &theEnti,
|
|
||||||
const Handle(Transfer_TransientProcess) &theTP)
|
|
||||||
{
|
{
|
||||||
TopoDS_Shape aResult;
|
//=============================================================================
|
||||||
Handle(Transfer_Binder) aBinder = theTP->Find(theEnti);
|
/*!
|
||||||
|
* GetShape()
|
||||||
|
*/
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
TopoDS_Shape GetShape(const Handle(Standard_Transient) &theEnti,
|
||||||
|
const Handle(Transfer_TransientProcess) &theTP)
|
||||||
|
{
|
||||||
|
TopoDS_Shape aResult;
|
||||||
|
Handle(Transfer_Binder) aBinder = theTP->Find(theEnti);
|
||||||
|
|
||||||
|
if (aBinder.IsNull()) {
|
||||||
|
return aResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
aResult = TransferBRep::ShapeResult(aBinder);
|
||||||
|
|
||||||
if (aBinder.IsNull()) {
|
|
||||||
return aResult;
|
return aResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
aResult = TransferBRep::ShapeResult(aBinder);
|
//=============================================================================
|
||||||
|
/*!
|
||||||
|
* GetLabel()
|
||||||
|
*/
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
return aResult;
|
TDF_Label GetLabel(const Handle(Standard_Transient) &theEnti,
|
||||||
}
|
const TDF_Label &theShapeLabel,
|
||||||
|
const TopoDS_Shape &aShape)
|
||||||
|
{
|
||||||
|
TDF_Label aResult;
|
||||||
|
|
||||||
//=============================================================================
|
if (theEnti->IsKind
|
||||||
/*!
|
(STANDARD_TYPE(StepGeom_GeometricRepresentationItem))) {
|
||||||
* GetLabel()
|
// check all named shapes using iterator
|
||||||
*/
|
TDF_ChildIDIterator anIt
|
||||||
//=============================================================================
|
(theShapeLabel, TDataStd_Name::GetID(), Standard_True);
|
||||||
|
|
||||||
TDF_Label GetLabel(const Handle(Standard_Transient) &theEnti,
|
for (; anIt.More(); anIt.Next()) {
|
||||||
const TDF_Label &theShapeLabel,
|
Handle(TDataStd_Name) nameAttr =
|
||||||
const TopoDS_Shape &aShape)
|
Handle(TDataStd_Name)::DownCast(anIt.Value());
|
||||||
{
|
|
||||||
TDF_Label aResult;
|
|
||||||
|
|
||||||
if (theEnti->IsKind
|
if (nameAttr.IsNull()) {
|
||||||
(STANDARD_TYPE(StepGeom_GeometricRepresentationItem))) {
|
continue;
|
||||||
// check all named shapes using iterator
|
}
|
||||||
TDF_ChildIDIterator anIt
|
|
||||||
(theShapeLabel, TDataStd_Name::GetID(), Standard_True);
|
|
||||||
|
|
||||||
for (; anIt.More(); anIt.Next()) {
|
TDF_Label aLab = nameAttr->Label();
|
||||||
Handle(TDataStd_Name) nameAttr =
|
Handle(TNaming_NamedShape) shAttr;
|
||||||
Handle(TDataStd_Name)::DownCast(anIt.Value());
|
|
||||||
|
|
||||||
if (nameAttr.IsNull()) {
|
if (aLab.FindAttribute(TNaming_NamedShape::GetID(), shAttr) &&
|
||||||
continue;
|
shAttr->Get().IsEqual(aShape)) {
|
||||||
}
|
aResult = aLab;
|
||||||
|
}
|
||||||
TDF_Label aLab = nameAttr->Label();
|
|
||||||
Handle(TNaming_NamedShape) shAttr;
|
|
||||||
|
|
||||||
if (aLab.FindAttribute(TNaming_NamedShape::GetID(), shAttr) &&
|
|
||||||
shAttr->Get().IsEqual(aShape)) {
|
|
||||||
aResult = aLab;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// create label and set shape
|
// create label and set shape
|
||||||
if (aResult.IsNull()) {
|
if (aResult.IsNull()) {
|
||||||
TDF_TagSource aTag;
|
TDF_TagSource aTag;
|
||||||
|
|
||||||
aResult = aTag.NewChild(theShapeLabel);
|
aResult = aTag.NewChild(theShapeLabel);
|
||||||
|
|
||||||
TNaming_Builder tnBuild (aResult);
|
TNaming_Builder tnBuild (aResult);
|
||||||
|
|
||||||
tnBuild.Generated(aShape);
|
tnBuild.Generated(aShape);
|
||||||
}
|
|
||||||
|
|
||||||
return aResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
/*!
|
|
||||||
* StoreName()
|
|
||||||
*/
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
void StoreName( const Handle(Standard_Transient) &theEnti,
|
|
||||||
const TopTools_IndexedMapOfShape &theIndices,
|
|
||||||
const Handle(Transfer_TransientProcess) &theTP,
|
|
||||||
const TDF_Label &theShapeLabel)
|
|
||||||
{
|
|
||||||
Handle(TCollection_HAsciiString) aName;
|
|
||||||
|
|
||||||
if (theEnti->IsKind(STANDARD_TYPE(StepShape_TopologicalRepresentationItem)) ||
|
|
||||||
theEnti->IsKind(STANDARD_TYPE(StepGeom_GeometricRepresentationItem))) {
|
|
||||||
aName = Handle(StepRepr_RepresentationItem)::DownCast(theEnti)->Name();
|
|
||||||
} else {
|
|
||||||
Handle(StepBasic_ProductDefinition) PD =
|
|
||||||
Handle(StepBasic_ProductDefinition)::DownCast(theEnti);
|
|
||||||
|
|
||||||
if (PD.IsNull() == Standard_False) {
|
|
||||||
Handle(StepBasic_Product) Prod = PD->Formation()->OfProduct();
|
|
||||||
aName = Prod->Name();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return aResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isValidName = false;
|
//=============================================================================
|
||||||
|
/*!
|
||||||
|
* StoreName()
|
||||||
|
*/
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
if (aName.IsNull() == Standard_False) {
|
void StoreName( const Handle(Standard_Transient) &theEnti,
|
||||||
isValidName = true;
|
const TopTools_IndexedMapOfShape &theIndices,
|
||||||
|
const Handle(Transfer_TransientProcess) &theTP,
|
||||||
|
const TDF_Label &theShapeLabel)
|
||||||
|
{
|
||||||
|
Handle(TCollection_HAsciiString) aName;
|
||||||
|
|
||||||
if (aName->UsefullLength() < 1) {
|
if (theEnti->IsKind(STANDARD_TYPE(StepShape_TopologicalRepresentationItem)) ||
|
||||||
isValidName = false;
|
theEnti->IsKind(STANDARD_TYPE(StepGeom_GeometricRepresentationItem))) {
|
||||||
} else if (aName->UsefullLength() == 4 &&
|
aName = Handle(StepRepr_RepresentationItem)::DownCast(theEnti)->Name();
|
||||||
toupper (aName->Value(1)) == 'N' &&
|
|
||||||
toupper (aName->Value(2)) == 'O' &&
|
|
||||||
toupper (aName->Value(3)) == 'N' &&
|
|
||||||
toupper (aName->Value(4)) == 'E') {
|
|
||||||
// skip 'N0NE' name
|
|
||||||
isValidName = false;
|
|
||||||
} else {
|
} else {
|
||||||
// special check to pass names like "Open CASCADE STEP translator 6.3 1"
|
Handle(StepBasic_ProductDefinition) PD =
|
||||||
TCollection_AsciiString aSkipName ("Open CASCADE STEP translator");
|
Handle(StepBasic_ProductDefinition)::DownCast(theEnti);
|
||||||
|
|
||||||
if (aName->Length() >= aSkipName.Length()) {
|
if (PD.IsNull() == Standard_False) {
|
||||||
if (aName->String().SubString
|
Handle(StepBasic_Product) Prod = PD->Formation()->OfProduct();
|
||||||
(1, aSkipName.Length()).IsEqual(aSkipName)) {
|
aName = Prod->Name();
|
||||||
isValidName = false;
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isValidName = false;
|
||||||
|
|
||||||
|
if (aName.IsNull() == Standard_False) {
|
||||||
|
isValidName = true;
|
||||||
|
|
||||||
|
if (aName->UsefullLength() < 1) {
|
||||||
|
isValidName = false;
|
||||||
|
} else if (aName->UsefullLength() == 4 &&
|
||||||
|
toupper (aName->Value(1)) == 'N' &&
|
||||||
|
toupper (aName->Value(2)) == 'O' &&
|
||||||
|
toupper (aName->Value(3)) == 'N' &&
|
||||||
|
toupper (aName->Value(4)) == 'E') {
|
||||||
|
// skip 'N0NE' name
|
||||||
|
isValidName = false;
|
||||||
|
} else {
|
||||||
|
// special check to pass names like "Open CASCADE STEP translator 6.3 1"
|
||||||
|
TCollection_AsciiString aSkipName ("Open CASCADE STEP translator");
|
||||||
|
|
||||||
|
if (aName->Length() >= aSkipName.Length()) {
|
||||||
|
if (aName->String().SubString
|
||||||
|
(1, aSkipName.Length()).IsEqual(aSkipName)) {
|
||||||
|
isValidName = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isValidName) {
|
||||||
|
TCollection_ExtendedString aNameExt (aName->ToCString());
|
||||||
|
|
||||||
|
// find target shape
|
||||||
|
TopoDS_Shape S = GetShape(theEnti, theTP);
|
||||||
|
|
||||||
|
if (S.IsNull()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// as PRODUCT can be included in the main shape
|
||||||
|
// several times, we look here for all iclusions.
|
||||||
|
Standard_Integer isub, nbSubs = theIndices.Extent();
|
||||||
|
|
||||||
|
for (isub = 1; isub <= nbSubs; isub++) {
|
||||||
|
TopoDS_Shape aSub = theIndices.FindKey(isub);
|
||||||
|
|
||||||
|
if (aSub.IsPartner(S)) {
|
||||||
|
TDF_Label L = GetLabel(theEnti, theShapeLabel, aSub);
|
||||||
|
|
||||||
|
// set a name
|
||||||
|
TDataStd_Name::Set(L, aNameExt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isValidName) {
|
//=============================================================================
|
||||||
TCollection_ExtendedString aNameExt (aName->ToCString());
|
/*!
|
||||||
|
* StoreMaterial()
|
||||||
|
*/
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
// find target shape
|
void StoreMaterial( const Handle(Standard_Transient) &theEnti,
|
||||||
TopoDS_Shape S = GetShape(theEnti, theTP);
|
const TopTools_IndexedMapOfShape &theIndices,
|
||||||
|
const Handle(Transfer_TransientProcess) &theTP,
|
||||||
if (S.IsNull()) {
|
const TDF_Label &theShapeLabel )
|
||||||
return;
|
{
|
||||||
}
|
// Treat Product Definition Shape only.
|
||||||
|
Handle(StepRepr_ProductDefinitionShape) aPDS =
|
||||||
// as PRODUCT can be included in the main shape
|
|
||||||
// several times, we look here for all iclusions.
|
|
||||||
Standard_Integer isub, nbSubs = theIndices.Extent();
|
|
||||||
|
|
||||||
for (isub = 1; isub <= nbSubs; isub++) {
|
|
||||||
TopoDS_Shape aSub = theIndices.FindKey(isub);
|
|
||||||
|
|
||||||
if (aSub.IsPartner(S)) {
|
|
||||||
TDF_Label L = GetLabel(theEnti, theShapeLabel, aSub);
|
|
||||||
|
|
||||||
// set a name
|
|
||||||
TDataStd_Name::Set(L, aNameExt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
/*!
|
|
||||||
* StoreMaterial()
|
|
||||||
*/
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
void StoreMaterial( const Handle(Standard_Transient) &theEnti,
|
|
||||||
const TopTools_IndexedMapOfShape &theIndices,
|
|
||||||
const Handle(Transfer_TransientProcess) &theTP,
|
|
||||||
const TDF_Label &theShapeLabel )
|
|
||||||
{
|
|
||||||
// Treat Product Definition Shape only.
|
|
||||||
Handle(StepRepr_ProductDefinitionShape) aPDS =
|
|
||||||
Handle(StepRepr_ProductDefinitionShape)::DownCast(theEnti);
|
Handle(StepRepr_ProductDefinitionShape)::DownCast(theEnti);
|
||||||
Handle(StepBasic_ProductDefinition) aProdDef;
|
Handle(StepBasic_ProductDefinition) aProdDef;
|
||||||
|
|
||||||
if(aPDS.IsNull() == Standard_False) {
|
if(aPDS.IsNull() == Standard_False) {
|
||||||
// Product Definition Shape ==> Product Definition
|
// Product Definition Shape ==> Product Definition
|
||||||
aProdDef = aPDS->Definition().ProductDefinition();
|
aProdDef = aPDS->Definition().ProductDefinition();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aProdDef.IsNull() == Standard_False) {
|
if (aProdDef.IsNull() == Standard_False) {
|
||||||
// Product Definition ==> Property Definition
|
// Product Definition ==> Property Definition
|
||||||
const Interface_Graph &aGraph = theTP->Graph();
|
const Interface_Graph &aGraph = theTP->Graph();
|
||||||
Interface_EntityIterator aSubs = aGraph.Sharings(aProdDef);
|
Interface_EntityIterator aSubs = aGraph.Sharings(aProdDef);
|
||||||
TopoDS_Shape aShape;
|
TopoDS_Shape aShape;
|
||||||
|
|
||||||
for(aSubs.Start(); aSubs.More(); aSubs.Next()) {
|
for(aSubs.Start(); aSubs.More(); aSubs.Next()) {
|
||||||
Handle(StepRepr_PropertyDefinition) aPropD =
|
Handle(StepRepr_PropertyDefinition) aPropD =
|
||||||
Handle(StepRepr_PropertyDefinition)::DownCast(aSubs.Value());
|
Handle(StepRepr_PropertyDefinition)::DownCast(aSubs.Value());
|
||||||
|
|
||||||
if(aPropD.IsNull() == Standard_False) {
|
if(aPropD.IsNull() == Standard_False) {
|
||||||
// Property Definition ==> Representation.
|
// Property Definition ==> Representation.
|
||||||
Interface_EntityIterator aSubs1 = aGraph.Sharings(aPropD);
|
Interface_EntityIterator aSubs1 = aGraph.Sharings(aPropD);
|
||||||
|
|
||||||
for(aSubs1.Start(); aSubs1.More(); aSubs1.Next()) {
|
for(aSubs1.Start(); aSubs1.More(); aSubs1.Next()) {
|
||||||
Handle(StepRepr_PropertyDefinitionRepresentation) aPDR =
|
Handle(StepRepr_PropertyDefinitionRepresentation) aPDR =
|
||||||
Handle(StepRepr_PropertyDefinitionRepresentation)::
|
Handle(StepRepr_PropertyDefinitionRepresentation)::
|
||||||
DownCast(aSubs1.Value());
|
DownCast(aSubs1.Value());
|
||||||
|
|
||||||
if(aPDR.IsNull() == Standard_False) {
|
if(aPDR.IsNull() == Standard_False) {
|
||||||
// Property Definition ==> Material Name.
|
// Property Definition ==> Material Name.
|
||||||
Handle(StepRepr_Representation) aRepr = aPDR->UsedRepresentation();
|
Handle(StepRepr_Representation) aRepr = aPDR->UsedRepresentation();
|
||||||
|
|
||||||
if(aRepr.IsNull() == Standard_False) {
|
if(aRepr.IsNull() == Standard_False) {
|
||||||
Standard_Integer ir;
|
Standard_Integer ir;
|
||||||
|
|
||||||
for(ir = 1; ir <= aRepr->NbItems(); ir++) {
|
for(ir = 1; ir <= aRepr->NbItems(); ir++) {
|
||||||
Handle(StepRepr_RepresentationItem) aRI = aRepr->ItemsValue(ir);
|
Handle(StepRepr_RepresentationItem) aRI = aRepr->ItemsValue(ir);
|
||||||
Handle(StepRepr_DescriptiveRepresentationItem) aDRI =
|
Handle(StepRepr_DescriptiveRepresentationItem) aDRI =
|
||||||
Handle(StepRepr_DescriptiveRepresentationItem)::DownCast(aRI);
|
Handle(StepRepr_DescriptiveRepresentationItem)::DownCast(aRI);
|
||||||
|
|
||||||
if(aDRI.IsNull() == Standard_False) {
|
if(aDRI.IsNull() == Standard_False) {
|
||||||
// Get shape from Product Definition
|
// Get shape from Product Definition
|
||||||
Handle(TCollection_HAsciiString) aMatName = aDRI->Name();
|
Handle(TCollection_HAsciiString) aMatName = aDRI->Name();
|
||||||
|
|
||||||
if(aMatName.IsNull() == Standard_False) {
|
if(aMatName.IsNull() == Standard_False) {
|
||||||
TCollection_ExtendedString
|
TCollection_ExtendedString
|
||||||
aMatNameExt (aMatName->ToCString());
|
aMatNameExt (aMatName->ToCString());
|
||||||
|
|
||||||
if (aShape.IsNull()) {
|
|
||||||
// Get the shape.
|
|
||||||
aShape = GetShape(aProdDef, theTP);
|
|
||||||
|
|
||||||
if (aShape.IsNull()) {
|
if (aShape.IsNull()) {
|
||||||
return;
|
// Get the shape.
|
||||||
|
aShape = GetShape(aProdDef, theTP);
|
||||||
|
|
||||||
|
if (aShape.IsNull()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// as PRODUCT can be included in the main shape
|
// as PRODUCT can be included in the main shape
|
||||||
// several times, we look here for all iclusions.
|
// several times, we look here for all iclusions.
|
||||||
Standard_Integer isub, nbSubs = theIndices.Extent();
|
Standard_Integer isub, nbSubs = theIndices.Extent();
|
||||||
|
|
||||||
for (isub = 1; isub <= nbSubs; isub++) {
|
for (isub = 1; isub <= nbSubs; isub++) {
|
||||||
TopoDS_Shape aSub = theIndices.FindKey(isub);
|
TopoDS_Shape aSub = theIndices.FindKey(isub);
|
||||||
|
|
||||||
if (aSub.IsPartner(aShape)) {
|
if (aSub.IsPartner(aShape)) {
|
||||||
TDF_Label aLabel =
|
TDF_Label aLabel =
|
||||||
GetLabel(aProdDef, theShapeLabel, aSub);
|
GetLabel(aProdDef, theShapeLabel, aSub);
|
||||||
|
|
||||||
// set a name
|
// set a name
|
||||||
TDataStd_Comment::Set(aLabel, aMatNameExt);
|
TDataStd_Comment::Set(aLabel, aMatNameExt);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -310,7 +313,53 @@ void StoreMaterial( const Handle(Standard_Transient) &theEnti,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
TCollection_AsciiString ToNamedUnit( const TCollection_AsciiString& unit )
|
||||||
|
{
|
||||||
|
TCollection_AsciiString result = unit;
|
||||||
|
result.LowerCase();
|
||||||
|
if ( result == "mil" ) result = "milliinch";
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
TCollection_AsciiString ToOcctUnit( const TCollection_AsciiString& unit, TCollection_AsciiString& error )
|
||||||
|
{
|
||||||
|
TCollection_AsciiString result = "M", u = ToNamedUnit(unit);
|
||||||
|
u.LowerCase();
|
||||||
|
|
||||||
|
if (u == "inch")
|
||||||
|
result = "INCH";
|
||||||
|
else if (u == "milliinch")
|
||||||
|
result = "MIL";
|
||||||
|
else if (u == "microinch")
|
||||||
|
result = "UIN";
|
||||||
|
else if (u == "foot")
|
||||||
|
result = "FT";
|
||||||
|
else if (u == "mile")
|
||||||
|
result = "MI";
|
||||||
|
else if (u == "metre")
|
||||||
|
result = "M";
|
||||||
|
else if (u == "kilometre")
|
||||||
|
result = "KM";
|
||||||
|
else if (u == "millimetre")
|
||||||
|
result = "MM";
|
||||||
|
else if (u == "centimetre")
|
||||||
|
result = "CM";
|
||||||
|
else if (u == "micrometre")
|
||||||
|
result = "UM";
|
||||||
|
else if (u.IsEmpty())
|
||||||
|
result = "M";
|
||||||
|
else
|
||||||
|
error = "The file contains not supported units";
|
||||||
|
|
||||||
|
// TODO (for other units)
|
||||||
|
// else
|
||||||
|
// result = "??"
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // end of namespace
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : GetID
|
//function : GetID
|
||||||
@ -377,21 +426,8 @@ Standard_Integer STEPPlugin_ImportDriver::Execute( TFunction_Logbook& log ) cons
|
|||||||
TColStd_SequenceOfAsciiString anUnitSolidAngleNames;
|
TColStd_SequenceOfAsciiString anUnitSolidAngleNames;
|
||||||
aReader.FileUnits(anUnitLengthNames, anUnitAngleNames, anUnitSolidAngleNames);
|
aReader.FileUnits(anUnitLengthNames, anUnitAngleNames, anUnitSolidAngleNames);
|
||||||
if (anUnitLengthNames.Length() > 0) {
|
if (anUnitLengthNames.Length() > 0) {
|
||||||
TCollection_AsciiString aLenUnits = anUnitLengthNames.First();
|
TCollection_AsciiString aLenUnits = ToOcctUnit(anUnitLengthNames.First(), anError);
|
||||||
if (aLenUnits == "millimetre")
|
Interface_Static::SetCVal("xstep.cascade.unit", aLenUnits.ToCString());
|
||||||
Interface_Static::SetCVal("xstep.cascade.unit", "MM");
|
|
||||||
else if (aLenUnits == "centimetre")
|
|
||||||
Interface_Static::SetCVal("xstep.cascade.unit", "CM");
|
|
||||||
else if (aLenUnits == "metre" || aLenUnits.IsEmpty())
|
|
||||||
Interface_Static::SetCVal("xstep.cascade.unit", "M");
|
|
||||||
else if (aLenUnits == "INCH")
|
|
||||||
Interface_Static::SetCVal("xstep.cascade.unit", "INCH");
|
|
||||||
else {
|
|
||||||
anError = "The file contains not supported units.";
|
|
||||||
}
|
|
||||||
// TODO (for other units than mm, cm, m or inch)
|
|
||||||
// else if (aLenUnits == "")
|
|
||||||
// Interface_Static::SetCVal("xstep.cascade.unit", "???");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -548,10 +584,10 @@ GetCreationInformation( std::string& theOperationName,
|
|||||||
|
|
||||||
TCollection_AsciiString
|
TCollection_AsciiString
|
||||||
STEPPlugin_ImportDriver::GetValue( const TCollection_AsciiString& theFileName,
|
STEPPlugin_ImportDriver::GetValue( const TCollection_AsciiString& theFileName,
|
||||||
const TCollection_AsciiString& theParameterName,
|
const TCollection_AsciiString& theParameterName,
|
||||||
TCollection_AsciiString& theError )
|
TCollection_AsciiString& theError )
|
||||||
{
|
{
|
||||||
Handle(TCollection_HAsciiString) aValue;
|
TCollection_AsciiString aValue;
|
||||||
|
|
||||||
if (theParameterName != "LEN_UNITS") {
|
if (theParameterName != "LEN_UNITS") {
|
||||||
theError = theParameterName + " parameter reading is not supported by STEP plugin";
|
theError = theParameterName + " parameter reading is not supported by STEP plugin";
|
||||||
@ -575,23 +611,8 @@ STEPPlugin_ImportDriver::GetValue( const TCollection_AsciiString& theFileName,
|
|||||||
TColStd_SequenceOfAsciiString anUnitAngleNames;
|
TColStd_SequenceOfAsciiString anUnitAngleNames;
|
||||||
TColStd_SequenceOfAsciiString anUnitSolidAngleNames;
|
TColStd_SequenceOfAsciiString anUnitSolidAngleNames;
|
||||||
aReader.FileUnits(anUnitLengthNames, anUnitAngleNames, anUnitSolidAngleNames);
|
aReader.FileUnits(anUnitLengthNames, anUnitAngleNames, anUnitSolidAngleNames);
|
||||||
if (anUnitLengthNames.Length() > 0) {
|
if (anUnitLengthNames.Length() > 0)
|
||||||
aValue = new TCollection_HAsciiString( anUnitLengthNames.First() );
|
aValue = ToNamedUnit( anUnitLengthNames.First() );
|
||||||
/*
|
|
||||||
TCollection_AsciiString aLenUnits = anUnitLengthNames.First();
|
|
||||||
if (aLenUnits == "millimetre")
|
|
||||||
aValue = new TCollection_HAsciiString ("MM");
|
|
||||||
else if (aLenUnits == "centimetre")
|
|
||||||
aValue = new TCollection_HAsciiString ("CM");
|
|
||||||
else if (aLenUnits == "metre")
|
|
||||||
aValue = new TCollection_HAsciiString ("M");
|
|
||||||
else if (aLenUnits == "INCH")
|
|
||||||
aValue = new TCollection_HAsciiString ("INCH");
|
|
||||||
// TODO (for other units than mm, cm, m or inch)
|
|
||||||
//else if (aLenUnits == "")
|
|
||||||
// aValue = new TCollection_HAsciiString ("");
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
theError = theFileName + " reading failed";
|
theError = theFileName + " reading failed";
|
||||||
@ -601,10 +622,7 @@ STEPPlugin_ImportDriver::GetValue( const TCollection_AsciiString& theFileName,
|
|||||||
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
||||||
theError = aFail->GetMessageString();
|
theError = aFail->GetMessageString();
|
||||||
}
|
}
|
||||||
if (!aValue.IsNull())
|
return aValue;
|
||||||
return aValue->String();
|
|
||||||
else
|
|
||||||
return TCollection_AsciiString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user