Revert "kicad2step: scale models"

This reverts commit 5064df4ba2.

There were un-addressed issues with the VRML substitution and concerns
by MCAD folks that ECAD designers should not be allowed to perform this
action.  Full addressing in v6.
This commit is contained in:
Seth Hillbrand 2019-10-20 10:06:43 -07:00
parent 5d852cf6ae
commit 6f71183d0e
3 changed files with 13 additions and 38 deletions

View File

@ -376,7 +376,7 @@ bool KICADMODULE::ComposePCB( class PCBMODEL* aPCB, S3D_RESOLVER* resolver,
wxString::FromUTF8Unchecked( i->m_modelname.c_str() ) ).ToUTF8() );
if( aPCB->AddComponent( fname, m_refdes, LAYER_BOTTOM == m_side ? true : false,
newpos, m_rotation, i->m_offset, i->m_rotation, i->m_scale ) )
newpos, m_rotation, i->m_offset, i->m_rotation ) )
hasdata = true;
}

View File

@ -57,7 +57,6 @@
#include <BRepBuilderAPI.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <BRepBuilderAPI_Transform.hxx>
#include <BRepBuilderAPI_GTransform.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
#include <BRepPrimAPI_MakePrism.hxx>
#include <BRepPrimAPI_MakeCylinder.hxx>
@ -580,7 +579,7 @@ bool PCBMODEL::AddPadHole( KICADPAD* aPad )
// add a component at the given position and orientation
bool PCBMODEL::AddComponent( const std::string& aFileName, const std::string& aRefDes,
bool aBottom, DOUBLET aPosition, double aRotation,
TRIPLET aOffset, TRIPLET aOrientation, TRIPLET aScale )
TRIPLET aOffset, TRIPLET aOrientation )
{
if( aFileName.empty() )
{
@ -596,7 +595,7 @@ bool PCBMODEL::AddComponent( const std::string& aFileName, const std::string& aR
// first retrieve a label
TDF_Label lmodel;
if( !getModelLabel( aFileName, aScale, lmodel ) )
if( !getModelLabel( aFileName, lmodel ) )
{
std::ostringstream ostr;
#ifdef __WXDEBUG__
@ -909,11 +908,9 @@ bool PCBMODEL::WriteSTEP( const std::string& aFileName )
}
bool PCBMODEL::getModelLabel( const std::string aFileName, TRIPLET aScale, TDF_Label& aLabel )
bool PCBMODEL::getModelLabel( const std::string aFileName, TDF_Label& aLabel )
{
std::string model_key = aFileName + "_" + std::to_string( aScale.x ) + "_" + std::to_string( aScale.y ) + "_" + std::to_string( aScale.z );
MODEL_MAP::const_iterator mm = m_models.find( model_key );
MODEL_MAP::const_iterator mm = m_models.find( aFileName );
if( mm != m_models.end() )
{
@ -1003,7 +1000,7 @@ bool PCBMODEL::getModelLabel( const std::string aFileName, TRIPLET aScale, TDF_L
{
std::string altFileName = altFile.GetFullPath().ToStdString();
if( getModelLabel( altFileName, aScale, aLabel ) )
if( getModelLabel( altFileName, aLabel ) )
{
return true;
}
@ -1019,7 +1016,7 @@ bool PCBMODEL::getModelLabel( const std::string aFileName, TRIPLET aScale, TDF_L
return false;
}
aLabel = transferModel( doc, m_doc, aScale );
aLabel = transferModel( doc, m_doc );
if( aLabel.IsNull() )
{
@ -1039,7 +1036,7 @@ bool PCBMODEL::getModelLabel( const std::string aFileName, TRIPLET aScale, TDF_L
TCollection_ExtendedString partname( pname.c_str() );
TDataStd_Name::Set( aLabel, partname );
m_models.insert( MODEL_DATUM( model_key, aLabel ) );
m_models.insert( MODEL_DATUM( aFileName, aLabel ) );
++m_components;
return true;
}
@ -1179,17 +1176,10 @@ bool PCBMODEL::readSTEP( Handle(TDocStd_Document)& doc, const char* fname )
TDF_Label PCBMODEL::transferModel( Handle( TDocStd_Document )& source,
Handle( TDocStd_Document )& dest, TRIPLET aScale )
Handle( TDocStd_Document )& dest )
{
// transfer data from Source into a top level component of Dest
gp_GTrsf scale_transform;
scale_transform.SetVectorialPart( gp_Mat( aScale.x, 0, 0,
0, aScale.y, 0,
0, 0, aScale.z ) );
BRepBuilderAPI_GTransform brep( scale_transform );
// s_assy = shape tool for the source
Handle(XCAFDoc_ShapeTool) s_assy = XCAFDoc_DocumentTool::ShapeTool ( source->Main() );
@ -1216,22 +1206,7 @@ TDF_Label PCBMODEL::transferModel( Handle( TDocStd_Document )& source,
if ( !shape.IsNull() )
{
brep.Perform( shape, Standard_False );
TopoDS_Shape scaled_shape;
if ( brep.IsDone() ) {
scaled_shape = brep.Shape();
} else {
std::ostringstream ostr;
#ifdef __WXDEBUG__
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
#endif /* __WXDEBUG */
ostr << " * failed to scale model\n";
wxLogMessage( "%s", ostr.str().c_str() );
scaled_shape = shape;
}
TDF_Label niulab = d_assy->AddComponent( component, scaled_shape, Standard_False );
TDF_Label niulab = d_assy->AddComponent( component, shape, Standard_False );
// check for per-surface colors
stop.Init( shape, TopAbs_FACE );

View File

@ -99,7 +99,7 @@ class PCBMODEL
std::list< KICADCURVE > m_curves;
std::vector< TopoDS_Shape > m_cutouts;
bool getModelLabel( const std::string aFileName, TRIPLET aScale, TDF_Label& aLabel );
bool getModelLabel( const std::string aFileName, TDF_Label& aLabel );
bool getModelLocation( bool aBottom, DOUBLET aPosition, double aRotation,
TRIPLET aOffset, TRIPLET aOrientation, TopLoc_Location& aLocation );
@ -108,7 +108,7 @@ class PCBMODEL
bool readSTEP( Handle( TDocStd_Document )& m_doc, const char* fname );
TDF_Label transferModel( Handle( TDocStd_Document )& source,
Handle( TDocStd_Document )& dest, TRIPLET aScale );
Handle( TDocStd_Document )& dest );
public:
PCBMODEL();
@ -123,7 +123,7 @@ public:
// add a component at the given position and orientation
bool AddComponent( const std::string& aFileName, const std::string& aRefDes,
bool aBottom, DOUBLET aPosition, double aRotation,
TRIPLET aOffset, TRIPLET aOrientation, TRIPLET aScale );
TRIPLET aOffset, TRIPLET aOrientation );
// set the thickness of the PCB (mm); the top of the PCB shall be at Z = aThickness
// aThickness < 0.0 == use default thickness