mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-05-26 11:05:31 +03:00
Data Exchange, Step Export - Apply a scaling transformation (#513)
Add possibility to export scaling factor into the STEP file as a cartesian_transformation_operator_3d. Add flag for turning on/off (on by default) this behavior.
This commit is contained in:
parent
7cd39973a4
commit
18a46604fc
@ -126,4 +126,4 @@ public:
|
|||||||
// clang-format on
|
// clang-format on
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _DESTEP_Parameters_HeaderFile
|
#endif // _DEIGES_Parameters_HeaderFile
|
||||||
|
@ -200,6 +200,8 @@ bool DESTEP_ConfigurationNode::Load(const Handle(DE_ConfigurationContext)& theRe
|
|||||||
aScope);
|
aScope);
|
||||||
InternalParameters.CleanDuplicates =
|
InternalParameters.CleanDuplicates =
|
||||||
theResource->BooleanVal("write.cleanduplicates", InternalParameters.CleanDuplicates, aScope);
|
theResource->BooleanVal("write.cleanduplicates", InternalParameters.CleanDuplicates, aScope);
|
||||||
|
InternalParameters.WriteScalingTrsf =
|
||||||
|
theResource->BooleanVal("write.scaling.trsf", InternalParameters.WriteScalingTrsf, aScope);
|
||||||
|
|
||||||
return DE_ShapeFixConfigurationNode::Load(theResource);
|
return DE_ShapeFixConfigurationNode::Load(theResource);
|
||||||
}
|
}
|
||||||
@ -589,6 +591,13 @@ TCollection_AsciiString DESTEP_ConfigurationNode::Save() const
|
|||||||
aResult += aScope + "write.cleanduplicates :\t " + InternalParameters.CleanDuplicates + "\n";
|
aResult += aScope + "write.cleanduplicates :\t " + InternalParameters.CleanDuplicates + "\n";
|
||||||
aResult += "!\n";
|
aResult += "!\n";
|
||||||
|
|
||||||
|
aResult += "!\n";
|
||||||
|
aResult +=
|
||||||
|
"!Defines export scaling factor in transformation as Cartesian Operator (On) or skip(Off)";
|
||||||
|
aResult += "!Default value: 1(\"On\"). Available values: 0(\"OFF\"), 1(\"On\")\n";
|
||||||
|
aResult += aScope + "write.scaling.trsf :\t " + InternalParameters.WriteScalingTrsf + "\n";
|
||||||
|
aResult += "!\n";
|
||||||
|
|
||||||
aResult += DE_ShapeFixConfigurationNode::Save();
|
aResult += DE_ShapeFixConfigurationNode::Save();
|
||||||
|
|
||||||
aResult += "!*****************************************************************************\n";
|
aResult += "!*****************************************************************************\n";
|
||||||
|
@ -203,6 +203,7 @@ public:
|
|||||||
bool WriteVisMaterial = false; //<! VisMaterialMode is used to indicate write Visual Material or not
|
bool WriteVisMaterial = false; //<! VisMaterialMode is used to indicate write Visual Material or not
|
||||||
STEPControl_StepModelType WriteModelType = STEPControl_AsIs; //<! Gives you the choice of translation mode for an Open CASCADE shape that is being translated to STEP
|
STEPControl_StepModelType WriteModelType = STEPControl_AsIs; //<! Gives you the choice of translation mode for an Open CASCADE shape that is being translated to STEP
|
||||||
bool CleanDuplicates = false; //<! Indicates whether to remove duplicate entities from the STEP file
|
bool CleanDuplicates = false; //<! Indicates whether to remove duplicate entities from the STEP file
|
||||||
|
bool WriteScalingTrsf = true; //<! Indicates if scaling should be written as Cartesian Operator or skipped
|
||||||
// clang-format on
|
// clang-format on
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -25,6 +25,8 @@ set(OCCT_GeomToStep_FILES
|
|||||||
GeomToStep_MakeBSplineSurfaceWithKnotsAndRationalBSplineSurface.hxx
|
GeomToStep_MakeBSplineSurfaceWithKnotsAndRationalBSplineSurface.hxx
|
||||||
GeomToStep_MakeCartesianPoint.cxx
|
GeomToStep_MakeCartesianPoint.cxx
|
||||||
GeomToStep_MakeCartesianPoint.hxx
|
GeomToStep_MakeCartesianPoint.hxx
|
||||||
|
GeomToStep_MakeCartesianTransformationOperator.cxx
|
||||||
|
GeomToStep_MakeCartesianTransformationOperator.hxx
|
||||||
GeomToStep_MakeCircle.cxx
|
GeomToStep_MakeCircle.cxx
|
||||||
GeomToStep_MakeCircle.hxx
|
GeomToStep_MakeCircle.hxx
|
||||||
GeomToStep_MakeCircle_gen.pxx
|
GeomToStep_MakeCircle_gen.pxx
|
||||||
|
@ -0,0 +1,49 @@
|
|||||||
|
// Copyright (c) 2025 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 <GeomToStep_MakeCartesianTransformationOperator.hxx>
|
||||||
|
|
||||||
|
#include <GeomToStep_MakeCartesianPoint.hxx>
|
||||||
|
#include <GeomToStep_MakeDirection.hxx>
|
||||||
|
#include <StepGeom_CartesianTransformationOperator3d.hxx>
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
GeomToStep_MakeCartesianTransformationOperator::GeomToStep_MakeCartesianTransformationOperator(
|
||||||
|
const gp_Trsf& theTrsf,
|
||||||
|
const StepData_Factors& theLocalFactors)
|
||||||
|
{
|
||||||
|
gp_Trsf anInvTrsf = theTrsf;
|
||||||
|
anInvTrsf.Invert();
|
||||||
|
Standard_Real aScale = anInvTrsf.ScaleFactor();
|
||||||
|
gp_Mat anInvMat = anInvTrsf.HVectorialPart();
|
||||||
|
|
||||||
|
gp_Mat aMat = theTrsf.HVectorialPart();
|
||||||
|
gp_XYZ aTranslation = anInvTrsf.TranslationPart().Multiplied(aMat);
|
||||||
|
aTranslation.Reverse();
|
||||||
|
|
||||||
|
GeomToStep_MakeCartesianPoint aMkPoint(aTranslation, theLocalFactors.LengthFactor());
|
||||||
|
GeomToStep_MakeDirection aMkDir1(anInvMat.Row(1));
|
||||||
|
GeomToStep_MakeDirection aMkDir2(anInvMat.Row(2));
|
||||||
|
GeomToStep_MakeDirection aMkDir3(anInvMat.Row(3));
|
||||||
|
|
||||||
|
myTrsfOp = new StepGeom_CartesianTransformationOperator3d();
|
||||||
|
myTrsfOp->SetName(new TCollection_HAsciiString(""));
|
||||||
|
myTrsfOp->SetAxis1(aMkDir1.Value());
|
||||||
|
myTrsfOp->SetAxis2(aMkDir2.Value());
|
||||||
|
myTrsfOp->SetAxis3(aMkDir3.Value());
|
||||||
|
myTrsfOp->SetLocalOrigin(aMkPoint.Value());
|
||||||
|
myTrsfOp->SetScale(aScale);
|
||||||
|
|
||||||
|
done = Standard_True;
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
// Copyright (c) 2025 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.
|
||||||
|
|
||||||
|
#ifndef _GeomToStep_MakeCartesianTransformationOperator_HeaderFile
|
||||||
|
#define _GeomToStep_MakeCartesianTransformationOperator_HeaderFile
|
||||||
|
|
||||||
|
#include <Standard.hxx>
|
||||||
|
#include <Standard_DefineAlloc.hxx>
|
||||||
|
#include <Standard_Handle.hxx>
|
||||||
|
|
||||||
|
#include <GeomToStep_Root.hxx>
|
||||||
|
#include <StepData_StepModel.hxx>
|
||||||
|
#include <StepGeom_CartesianTransformationOperator3d.hxx>
|
||||||
|
|
||||||
|
class gp_Trsf;
|
||||||
|
|
||||||
|
//! This class creates a cartesian_transformation_operator from gp_Trsf.
|
||||||
|
//! This entity is used in OCCT to implement a transformation with scaling.
|
||||||
|
//! In case of other inputs without scaling use Axis2Placement3d.
|
||||||
|
class GeomToStep_MakeCartesianTransformationOperator : public GeomToStep_Root
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DEFINE_STANDARD_ALLOC
|
||||||
|
|
||||||
|
//! Main constructor.
|
||||||
|
//! @param[in] theTrsf Transformation to create the operator from it.
|
||||||
|
//! @param[in] theLocalFactors Unit scale factors
|
||||||
|
Standard_EXPORT GeomToStep_MakeCartesianTransformationOperator(
|
||||||
|
const gp_Trsf& theTrsf,
|
||||||
|
const StepData_Factors& theLocalFactors = StepData_Factors());
|
||||||
|
|
||||||
|
//! Returns the created entity.
|
||||||
|
//! @return The created value.
|
||||||
|
inline const Handle(StepGeom_CartesianTransformationOperator3d)& Value() const
|
||||||
|
{
|
||||||
|
return myTrsfOp;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
Handle(StepGeom_CartesianTransformationOperator3d) myTrsfOp;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _GeomToStep_MakeCartesianTransformationOperator_HeaderFile
|
@ -22,6 +22,7 @@
|
|||||||
#include <StepBasic_ProductDefinition.hxx>
|
#include <StepBasic_ProductDefinition.hxx>
|
||||||
#include <STEPConstruct_Assembly.hxx>
|
#include <STEPConstruct_Assembly.hxx>
|
||||||
#include <StepGeom_Axis2Placement3d.hxx>
|
#include <StepGeom_Axis2Placement3d.hxx>
|
||||||
|
#include <StepGeom_CartesianTransformationOperator3d.hxx>
|
||||||
#include <StepRepr_ItemDefinedTransformation.hxx>
|
#include <StepRepr_ItemDefinedTransformation.hxx>
|
||||||
#include <StepRepr_NextAssemblyUsageOccurrence.hxx>
|
#include <StepRepr_NextAssemblyUsageOccurrence.hxx>
|
||||||
#include <StepRepr_ProductDefinitionShape.hxx>
|
#include <StepRepr_ProductDefinitionShape.hxx>
|
||||||
@ -51,8 +52,25 @@ void STEPConstruct_Assembly::Init(const Handle(StepShape_ShapeDefinitionRepresen
|
|||||||
thesr = Handle(StepShape_ShapeRepresentation)::DownCast(aSDR->UsedRepresentation());
|
thesr = Handle(StepShape_ShapeRepresentation)::DownCast(aSDR->UsedRepresentation());
|
||||||
thesr0 = Handle(StepShape_ShapeRepresentation)::DownCast(SDR0->UsedRepresentation());
|
thesr0 = Handle(StepShape_ShapeRepresentation)::DownCast(SDR0->UsedRepresentation());
|
||||||
theval.Nullify();
|
theval.Nullify();
|
||||||
theax0 = Ax0;
|
theax0 = Ax0;
|
||||||
theloc = AxLoc;
|
theloc = AxLoc;
|
||||||
|
myIsCartesianTrsf = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================================
|
||||||
|
|
||||||
|
void STEPConstruct_Assembly::Init(
|
||||||
|
const Handle(StepShape_ShapeDefinitionRepresentation)& aSDR,
|
||||||
|
const Handle(StepShape_ShapeDefinitionRepresentation)& SDR0,
|
||||||
|
const Handle(StepGeom_CartesianTransformationOperator3d)& theTrsfOp)
|
||||||
|
{
|
||||||
|
thesdr = aSDR;
|
||||||
|
thesdr0 = SDR0;
|
||||||
|
thesr = Handle(StepShape_ShapeRepresentation)::DownCast(aSDR->UsedRepresentation());
|
||||||
|
thesr0 = Handle(StepShape_ShapeRepresentation)::DownCast(SDR0->UsedRepresentation());
|
||||||
|
theval.Nullify();
|
||||||
|
myTrsfOp = theTrsfOp;
|
||||||
|
myIsCartesianTrsf = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=================================================================================================
|
//=================================================================================================
|
||||||
@ -91,10 +109,19 @@ void STEPConstruct_Assembly::MakeRelationship()
|
|||||||
PDS->Init(pdsname, Standard_True, pdsdesc, CD);
|
PDS->Init(pdsname, Standard_True, pdsdesc, CD);
|
||||||
|
|
||||||
// create transformation
|
// create transformation
|
||||||
Handle(StepRepr_ItemDefinedTransformation) ItemDef = new StepRepr_ItemDefinedTransformation;
|
Handle(Standard_Transient) aTrsfItem;
|
||||||
Handle(TCollection_HAsciiString) idname = new TCollection_HAsciiString("");
|
if (!myIsCartesianTrsf)
|
||||||
Handle(TCollection_HAsciiString) idescr = new TCollection_HAsciiString("");
|
{
|
||||||
ItemDef->Init(idname, idescr, theax0, theloc);
|
Handle(StepRepr_ItemDefinedTransformation) ItemDef = new StepRepr_ItemDefinedTransformation;
|
||||||
|
Handle(TCollection_HAsciiString) idname = new TCollection_HAsciiString("");
|
||||||
|
Handle(TCollection_HAsciiString) idescr = new TCollection_HAsciiString("");
|
||||||
|
ItemDef->Init(idname, idescr, theax0, theloc);
|
||||||
|
aTrsfItem = ItemDef;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
aTrsfItem = myTrsfOp;
|
||||||
|
}
|
||||||
|
|
||||||
// create SRRWT
|
// create SRRWT
|
||||||
Handle(StepRepr_ShapeRepresentationRelationshipWithTransformation) SRRWT =
|
Handle(StepRepr_ShapeRepresentationRelationshipWithTransformation) SRRWT =
|
||||||
@ -102,7 +129,7 @@ void STEPConstruct_Assembly::MakeRelationship()
|
|||||||
Handle(TCollection_HAsciiString) stname = new TCollection_HAsciiString("");
|
Handle(TCollection_HAsciiString) stname = new TCollection_HAsciiString("");
|
||||||
Handle(TCollection_HAsciiString) stescr = new TCollection_HAsciiString("");
|
Handle(TCollection_HAsciiString) stescr = new TCollection_HAsciiString("");
|
||||||
StepRepr_Transformation StepTrans;
|
StepRepr_Transformation StepTrans;
|
||||||
StepTrans.SetValue(ItemDef);
|
StepTrans.SetValue(aTrsfItem);
|
||||||
SRRWT->Init(stname, stescr, thesr, thesr0, StepTrans);
|
SRRWT->Init(stname, stescr, thesr, thesr0, StepTrans);
|
||||||
|
|
||||||
// create CDSR (final result, root)
|
// create CDSR (final result, root)
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
class StepShape_ShapeDefinitionRepresentation;
|
class StepShape_ShapeDefinitionRepresentation;
|
||||||
class StepShape_ShapeRepresentation;
|
class StepShape_ShapeRepresentation;
|
||||||
class StepGeom_Axis2Placement3d;
|
class StepGeom_Axis2Placement3d;
|
||||||
|
class StepGeom_CartesianTransformationOperator3d;
|
||||||
class StepRepr_NextAssemblyUsageOccurrence;
|
class StepRepr_NextAssemblyUsageOccurrence;
|
||||||
class StepShape_ContextDependentShapeRepresentation;
|
class StepShape_ContextDependentShapeRepresentation;
|
||||||
class Interface_Graph;
|
class Interface_Graph;
|
||||||
@ -52,6 +53,14 @@ public:
|
|||||||
const Handle(StepGeom_Axis2Placement3d)& Ax0,
|
const Handle(StepGeom_Axis2Placement3d)& Ax0,
|
||||||
const Handle(StepGeom_Axis2Placement3d)& Loc);
|
const Handle(StepGeom_Axis2Placement3d)& Loc);
|
||||||
|
|
||||||
|
//! Initialises with starting values
|
||||||
|
//! theTrsfOp : local transformation to apply, may have scaling factor
|
||||||
|
//! Makes a MappedItem
|
||||||
|
//! Resulting Value is returned by ItemValue
|
||||||
|
Standard_EXPORT void Init(const Handle(StepShape_ShapeDefinitionRepresentation)& theSR,
|
||||||
|
const Handle(StepShape_ShapeDefinitionRepresentation)& theSDR0,
|
||||||
|
const Handle(StepGeom_CartesianTransformationOperator3d)& theTrsfOp);
|
||||||
|
|
||||||
//! Make a (ShapeRepresentationRelationship,...WithTransformation)
|
//! Make a (ShapeRepresentationRelationship,...WithTransformation)
|
||||||
//! Resulting Value is returned by ItemValue
|
//! Resulting Value is returned by ItemValue
|
||||||
Standard_EXPORT void MakeRelationship();
|
Standard_EXPORT void MakeRelationship();
|
||||||
@ -74,13 +83,15 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
private:
|
private:
|
||||||
Handle(StepShape_ShapeDefinitionRepresentation) thesdr;
|
Handle(StepShape_ShapeDefinitionRepresentation) thesdr;
|
||||||
Handle(StepShape_ShapeDefinitionRepresentation) thesdr0;
|
Handle(StepShape_ShapeDefinitionRepresentation) thesdr0;
|
||||||
Handle(StepShape_ShapeRepresentation) thesr;
|
Handle(StepShape_ShapeRepresentation) thesr;
|
||||||
Handle(StepShape_ShapeRepresentation) thesr0;
|
Handle(StepShape_ShapeRepresentation) thesr0;
|
||||||
Handle(Standard_Transient) theval;
|
Handle(Standard_Transient) theval;
|
||||||
Handle(StepGeom_Axis2Placement3d) theloc;
|
Handle(StepGeom_Axis2Placement3d) theloc;
|
||||||
Handle(StepGeom_Axis2Placement3d) theax0;
|
Handle(StepGeom_Axis2Placement3d) theax0;
|
||||||
|
Handle(StepGeom_CartesianTransformationOperator3d) myTrsfOp;
|
||||||
|
bool myIsCartesianTrsf;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _STEPConstruct_Assembly_HeaderFile
|
#endif // _STEPConstruct_Assembly_HeaderFile
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#include <Geom_Plane.hxx>
|
#include <Geom_Plane.hxx>
|
||||||
#include <Geom_Surface.hxx>
|
#include <Geom_Surface.hxx>
|
||||||
#include <GeomToStep_MakeAxis2Placement3d.hxx>
|
#include <GeomToStep_MakeAxis2Placement3d.hxx>
|
||||||
|
#include <GeomToStep_MakeCartesianTransformationOperator.hxx>
|
||||||
#include <Interface_Macros.hxx>
|
#include <Interface_Macros.hxx>
|
||||||
#include <Interface_MSG.hxx>
|
#include <Interface_MSG.hxx>
|
||||||
#include <Message_ProgressScope.hxx>
|
#include <Message_ProgressScope.hxx>
|
||||||
@ -41,6 +42,7 @@
|
|||||||
#include <STEPControl_StepModelType.hxx>
|
#include <STEPControl_StepModelType.hxx>
|
||||||
#include <StepData_StepModel.hxx>
|
#include <StepData_StepModel.hxx>
|
||||||
#include <StepGeom_Axis2Placement3d.hxx>
|
#include <StepGeom_Axis2Placement3d.hxx>
|
||||||
|
#include <StepGeom_CartesianTransformationOperator3d.hxx>
|
||||||
#include <StepGeom_GeomRepContextAndGlobUnitAssCtxAndGlobUncertaintyAssCtx.hxx>
|
#include <StepGeom_GeomRepContextAndGlobUnitAssCtxAndGlobUncertaintyAssCtx.hxx>
|
||||||
#include <StepGeom_Point.hxx>
|
#include <StepGeom_Point.hxx>
|
||||||
#include <StepRepr_ShapeRepresentationRelationship.hxx>
|
#include <StepRepr_ShapeRepresentationRelationship.hxx>
|
||||||
@ -1656,8 +1658,8 @@ Handle(Transfer_Binder) STEPControl_ActorWrite::TransferCompound(
|
|||||||
Message_ProgressScope aPS(theProgress, NULL, nbs);
|
Message_ProgressScope aPS(theProgress, NULL, nbs);
|
||||||
for (i = 1; i <= nbs && aPS.More(); i++)
|
for (i = 1; i <= nbs && aPS.More(); i++)
|
||||||
{
|
{
|
||||||
Handle(TransferBRep_ShapeMapper) subs = TransferBRep::ShapeMapper(FP, RepItemSeq->Value(i));
|
Handle(TransferBRep_ShapeMapper) subs = TransferBRep::ShapeMapper(FP, RepItemSeq->Value(i));
|
||||||
Handle(StepGeom_Axis2Placement3d) AX1;
|
Handle(StepGeom_GeometricRepresentationItem) AX1;
|
||||||
|
|
||||||
Handle(Transfer_Binder) bnd = TransferSubShape(subs,
|
Handle(Transfer_Binder) bnd = TransferSubShape(subs,
|
||||||
SDR0,
|
SDR0,
|
||||||
@ -1709,7 +1711,7 @@ Handle(Transfer_Binder) STEPControl_ActorWrite::TransferCompound(
|
|||||||
Handle(Transfer_Binder) STEPControl_ActorWrite::TransferSubShape(
|
Handle(Transfer_Binder) STEPControl_ActorWrite::TransferSubShape(
|
||||||
const Handle(Transfer_Finder)& start,
|
const Handle(Transfer_Finder)& start,
|
||||||
const Handle(StepShape_ShapeDefinitionRepresentation)& SDR0,
|
const Handle(StepShape_ShapeDefinitionRepresentation)& SDR0,
|
||||||
Handle(StepGeom_Axis2Placement3d)& AX1,
|
Handle(StepGeom_GeometricRepresentationItem)& AX1,
|
||||||
const Handle(Transfer_FinderProcess)& FP,
|
const Handle(Transfer_FinderProcess)& FP,
|
||||||
const StepData_Factors& theLocalFactors,
|
const StepData_Factors& theLocalFactors,
|
||||||
const Handle(TopTools_HSequenceOfShape)& shapeGroup,
|
const Handle(TopTools_HSequenceOfShape)& shapeGroup,
|
||||||
@ -1781,14 +1783,39 @@ Handle(Transfer_Binder) STEPControl_ActorWrite::TransferSubShape(
|
|||||||
// FP->GetTypedTransient (resbind,STANDARD_TYPE(StepShape_ShapeRepresentation),resultat);
|
// FP->GetTypedTransient (resbind,STANDARD_TYPE(StepShape_ShapeRepresentation),resultat);
|
||||||
// sdr->SetUsedRepresentation(resultat); // to be used by MakeItem
|
// sdr->SetUsedRepresentation(resultat); // to be used by MakeItem
|
||||||
|
|
||||||
// make location for assembly placement
|
|
||||||
GeomToStep_MakeAxis2Placement3d mkax(aLoc, theLocalFactors);
|
|
||||||
const Handle(StepGeom_Axis2Placement3d)& AxLoc = mkax.Value();
|
|
||||||
AX1 = AxLoc;
|
|
||||||
|
|
||||||
// create assembly structures (CDSR, NAUO etc.)
|
// create assembly structures (CDSR, NAUO etc.)
|
||||||
STEPConstruct_Assembly mkitem;
|
STEPConstruct_Assembly mkitem;
|
||||||
mkitem.Init(sdr, SDR0, myContext.GetDefaultAxis(), AxLoc);
|
|
||||||
|
// make location for assembly placement
|
||||||
|
if (Abs(aLoc.ScaleFactor() - 1.0) > Precision::Confusion())
|
||||||
|
{
|
||||||
|
if (aStepModel->InternalParameters.WriteScalingTrsf)
|
||||||
|
FP->AddWarning(
|
||||||
|
start,
|
||||||
|
"The shape has a scaling factor, exported as cartesian_transformation_operator");
|
||||||
|
else
|
||||||
|
FP->AddWarning(start, "The shape has a scaling factor, skipped");
|
||||||
|
}
|
||||||
|
if (Abs(aLoc.ScaleFactor() - 1.0) < Precision::Confusion()
|
||||||
|
|| !aStepModel->InternalParameters.WriteScalingTrsf)
|
||||||
|
{
|
||||||
|
// create a new axis2placement3d
|
||||||
|
GeomToStep_MakeAxis2Placement3d mkax(aLoc, theLocalFactors);
|
||||||
|
mkitem.Init(sdr, SDR0, myContext.GetDefaultAxis(), mkax.Value());
|
||||||
|
AX1 = mkax.Value();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// create a new cartesian transformation
|
||||||
|
GeomToStep_MakeCartesianTransformationOperator aMaker(aLoc, theLocalFactors);
|
||||||
|
if (!aMaker.IsDone())
|
||||||
|
{
|
||||||
|
FP->AddFail(start, "The transfomation relation creation failed");
|
||||||
|
}
|
||||||
|
mkitem.Init(sdr, SDR0, aMaker.Value());
|
||||||
|
AX1 = aMaker.Value();
|
||||||
|
}
|
||||||
|
|
||||||
mkitem.MakeRelationship();
|
mkitem.MakeRelationship();
|
||||||
Handle(TColStd_HSequenceOfTransient) roots = myContext.GetRootsForAssemblyLink(mkitem);
|
Handle(TColStd_HSequenceOfTransient) roots = myContext.GetRootsForAssemblyLink(mkitem);
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ class Transfer_Finder;
|
|||||||
class Transfer_Binder;
|
class Transfer_Binder;
|
||||||
class Transfer_FinderProcess;
|
class Transfer_FinderProcess;
|
||||||
class StepShape_ShapeDefinitionRepresentation;
|
class StepShape_ShapeDefinitionRepresentation;
|
||||||
class StepGeom_Axis2Placement3d;
|
class StepGeom_GeometricRepresentationItem;
|
||||||
class TopoDS_Shape;
|
class TopoDS_Shape;
|
||||||
class StepShape_NonManifoldSurfaceShapeRepresentation;
|
class StepShape_NonManifoldSurfaceShapeRepresentation;
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ public:
|
|||||||
Standard_EXPORT Handle(Transfer_Binder) TransferSubShape(
|
Standard_EXPORT Handle(Transfer_Binder) TransferSubShape(
|
||||||
const Handle(Transfer_Finder)& start,
|
const Handle(Transfer_Finder)& start,
|
||||||
const Handle(StepShape_ShapeDefinitionRepresentation)& SDR,
|
const Handle(StepShape_ShapeDefinitionRepresentation)& SDR,
|
||||||
Handle(StepGeom_Axis2Placement3d)& AX1,
|
Handle(StepGeom_GeometricRepresentationItem)& AX1,
|
||||||
const Handle(Transfer_FinderProcess)& FP,
|
const Handle(Transfer_FinderProcess)& FP,
|
||||||
const StepData_Factors& theLocalFactors = StepData_Factors(),
|
const StepData_Factors& theLocalFactors = StepData_Factors(),
|
||||||
const Handle(TopTools_HSequenceOfShape)& shapeGroup = NULL,
|
const Handle(TopTools_HSequenceOfShape)& shapeGroup = NULL,
|
||||||
|
@ -2131,6 +2131,10 @@ Standard_Boolean StepToGeom::MakeTransformation3d(
|
|||||||
|
|
||||||
const gp_Ax3 result(Pgp, D3, D1);
|
const gp_Ax3 result(Pgp, D3, D1);
|
||||||
CT.SetTransformation(result);
|
CT.SetTransformation(result);
|
||||||
|
if (SCTO->HasScale())
|
||||||
|
{
|
||||||
|
CT.SetScaleFactor(SCTO->Scale());
|
||||||
|
}
|
||||||
CT = CT.Inverted(); //: n8 abv 16 Feb 99: tr8_as2_db.stp: reverse for accordance with LV tool
|
CT = CT.Inverted(); //: n8 abv 16 Feb 99: tr8_as2_db.stp: reverse for accordance with LV tool
|
||||||
return Standard_True;
|
return Standard_True;
|
||||||
}
|
}
|
||||||
|
51
tests/bugs/step/bug_ocp1949
Normal file
51
tests/bugs/step/bug_ocp1949
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
puts "================================================"
|
||||||
|
puts "OCP-1949: Apply a scaling transformation to STEP"
|
||||||
|
puts "================================================"
|
||||||
|
puts ""
|
||||||
|
|
||||||
|
pload OCAF
|
||||||
|
|
||||||
|
Close D1 -silent
|
||||||
|
Close D2 -silent
|
||||||
|
|
||||||
|
ReadGltf D1 [locate_data_file bug_ocp1948_PSU_Cartoning_subunit__right-01.01.01.03-CART-03_green_bottom.glb]
|
||||||
|
|
||||||
|
# apply parameters for tessellation export
|
||||||
|
set conf "
|
||||||
|
provider.STEP.OCC.write.schema : 5
|
||||||
|
provider.STEP.OCC.write.tessellated : 1
|
||||||
|
"
|
||||||
|
LoadConfiguration ${conf} -recursive on
|
||||||
|
param write.step.schema 5
|
||||||
|
param write.step.tessellated 1
|
||||||
|
|
||||||
|
WriteStep D1 "$imagedir/${casename}.stp"
|
||||||
|
ReadStep D2 "$imagedir/${casename}.stp"
|
||||||
|
|
||||||
|
XGetOneShape a1 D1
|
||||||
|
XGetOneShape a2 D2
|
||||||
|
|
||||||
|
# check center of gravity
|
||||||
|
set pos1 [vprops a1]
|
||||||
|
set pos2 [vprops a2]
|
||||||
|
|
||||||
|
set REF_X [lindex $pos1 9]
|
||||||
|
set REF_Y [lindex $pos1 12]
|
||||||
|
set REF_Z [lindex $pos1 15]
|
||||||
|
set tol 1e-4
|
||||||
|
|
||||||
|
if {([expr abs($REF_X - [lindex $pos2 9])] > $tol) ||
|
||||||
|
([expr abs($REF_Y - [lindex $pos2 12])] > $tol) ||
|
||||||
|
([expr abs($REF_Z - [lindex $pos2 15])] > $tol)} {
|
||||||
|
puts "Error: wrong position of the imported model."
|
||||||
|
}
|
||||||
|
|
||||||
|
# cleaning
|
||||||
|
Close D1
|
||||||
|
Close D2
|
||||||
|
file delete "$imagedir/${casename}.stp"
|
||||||
|
set conf "
|
||||||
|
provider.STEP.OCC.write.schema : 4
|
||||||
|
provider.STEP.OCC.write.tessellated : 2
|
||||||
|
"
|
||||||
|
LoadConfiguration ${conf} -recursive on
|
@ -3,7 +3,6 @@ puts "0027142: Data Exchange - add possibility to set location in XCAFDoc_ShapeT
|
|||||||
puts "=========="
|
puts "=========="
|
||||||
puts ""
|
puts ""
|
||||||
|
|
||||||
puts "TODO 0027142 ALL: Error: area of d1"
|
|
||||||
puts "TODO 0027142 ALL: Error: area of d2"
|
puts "TODO 0027142 ALL: Error: area of d2"
|
||||||
puts "TODO 0027142 ALL: Error: center of gravity"
|
puts "TODO 0027142 ALL: Error: center of gravity"
|
||||||
|
|
||||||
|
@ -199,6 +199,7 @@ provider.STEP.OCC.write.vismaterial : 0
|
|||||||
provider.STEP.OCC.write.props : 1
|
provider.STEP.OCC.write.props : 1
|
||||||
provider.STEP.OCC.write.model.type : 0
|
provider.STEP.OCC.write.model.type : 0
|
||||||
provider.STEP.OCC.write.cleanduplicates : 0
|
provider.STEP.OCC.write.cleanduplicates : 0
|
||||||
|
provider.STEP.OCC.write.scaling.trsf : 1
|
||||||
provider.STEP.OCC.healing.tolerance3d : 1e-06
|
provider.STEP.OCC.healing.tolerance3d : 1e-06
|
||||||
provider.STEP.OCC.healing.max.tolerance3d : 1
|
provider.STEP.OCC.healing.max.tolerance3d : 1
|
||||||
provider.STEP.OCC.healing.min.tolerance3d : 1e-07
|
provider.STEP.OCC.healing.min.tolerance3d : 1e-07
|
||||||
|
@ -143,6 +143,7 @@ provider.STEP.OCC.write.material : 1
|
|||||||
provider.STEP.OCC.write.vismaterial : 0
|
provider.STEP.OCC.write.vismaterial : 0
|
||||||
provider.STEP.OCC.write.model.type : 0
|
provider.STEP.OCC.write.model.type : 0
|
||||||
provider.STEP.OCC.write.cleanduplicates : 0
|
provider.STEP.OCC.write.cleanduplicates : 0
|
||||||
|
provider.STEP.OCC.write.scaling.trsf : 1
|
||||||
provider.STEP.OCC.healing.tolerance3d : 1e-06
|
provider.STEP.OCC.healing.tolerance3d : 1e-06
|
||||||
provider.STEP.OCC.healing.max.tolerance3d : 1
|
provider.STEP.OCC.healing.max.tolerance3d : 1
|
||||||
provider.STEP.OCC.healing.min.tolerance3d : 1e-07
|
provider.STEP.OCC.healing.min.tolerance3d : 1e-07
|
||||||
|
Loading…
x
Reference in New Issue
Block a user