Skip to content

Commit

Permalink
Part: implement wrapper class around Interface_Static
Browse files Browse the repository at this point in the history
  • Loading branch information
wwmayer committed Oct 3, 2022
1 parent 3303155 commit 8db7ee1
Show file tree
Hide file tree
Showing 10 changed files with 226 additions and 41 deletions.
9 changes: 5 additions & 4 deletions src/Mod/Import/App/AppImportPy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
#include <Mod/Part/App/ProgressIndicator.h>
#include <Mod/Part/App/ImportIges.h>
#include <Mod/Part/App/ImportStep.h>
#include <Mod/Part/App/Interface.h>
#include <Mod/Part/App/encodeFilename.h>
#include <Mod/Part/App/TopoShape.h>
#include <Mod/Part/App/TopoShapePy.h>
Expand Down Expand Up @@ -355,7 +356,7 @@ class Module : public Py::ExtensionModule<Module>
if (file.hasExtension("stp") || file.hasExtension("step")) {
//Interface_Static::SetCVal("write.step.schema", "AP214IS");
STEPCAFControl_Writer writer;
Interface_Static::SetIVal("write.step.assembly",1);
Part::Interface::writeStepAssembly(Part::Interface::Assembly::On);
// writer.SetColorMode(Standard_False);
writer.Transfer(hDoc, STEPControl_AsIs);

Expand All @@ -379,9 +380,9 @@ class Module : public Py::ExtensionModule<Module>
IGESControl_Controller::Init();
IGESCAFControl_Writer writer;
IGESData_GlobalSection header = writer.Model()->GlobalSection();
header.SetAuthorName(new TCollection_HAsciiString(Interface_Static::CVal("write.iges.header.author")));
header.SetCompanyName(new TCollection_HAsciiString(Interface_Static::CVal("write.iges.header.company")));
header.SetSendName(new TCollection_HAsciiString(Interface_Static::CVal("write.iges.header.product")));
header.SetAuthorName(new TCollection_HAsciiString(Part::Interface::writeIgesHeaderAuthor()));
header.SetCompanyName(new TCollection_HAsciiString(Part::Interface::writeIgesHeaderCompany()));
header.SetSendName(new TCollection_HAsciiString(Part::Interface::writeIgesHeaderProduct()));
writer.Model()->SetGlobalSection(header);
writer.Transfer(hDoc);
Standard_Boolean ret = writer.Write(name8bit.c_str());
Expand Down
3 changes: 2 additions & 1 deletion src/Mod/Import/App/ExportOCAF.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@
#include <Mod/Part/App/ProgressIndicator.h>
#include <Mod/Part/App/ImportIges.h>
#include <Mod/Part/App/ImportStep.h>
#include <Mod/Part/App/Interface.h>

#include <App/DocumentObject.h>
#include <App/DocumentObjectGroup.h>
Expand Down Expand Up @@ -117,7 +118,7 @@ ExportOCAF::ExportOCAF(Handle(TDocStd_Document) h, bool explicitPlacement)
if (keepExplicitPlacement) {
// rootLabel = aShapeTool->NewShape();
// TDataStd_Name::Set(rootLabel, "ASSEMBLY");
Interface_Static::SetIVal("write.step.assembly",2);
Part::Interface::writeStepAssembly(Part::Interface::Assembly::Auto);
}
else {
rootLabel = TDF_TagSource::NewChild(pDoc->Main());
Expand Down
3 changes: 2 additions & 1 deletion src/Mod/Import/App/ImportOCAF2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@
#include <Mod/Part/App/ProgressIndicator.h>
#include <Mod/Part/App/ImportIges.h>
#include <Mod/Part/App/ImportStep.h>
#include <Mod/Part/App/Interface.h>

#include <App/DocumentObject.h>
#include <App/DocumentObjectGroup.h>
Expand Down Expand Up @@ -925,7 +926,7 @@ ExportOCAF2::ExportOCAF2(Handle(TDocStd_Document) h, GetShapeColorsFunc func)
aShapeTool = XCAFDoc_DocumentTool::ShapeTool(pDoc->Main());
aColorTool = XCAFDoc_DocumentTool::ColorTool(pDoc->Main());

Interface_Static::SetIVal("write.step.assembly",2);
Part::Interface::writeStepAssembly(Part::Interface::Assembly::Auto);
}

/*!
Expand Down
13 changes: 7 additions & 6 deletions src/Mod/Import/Gui/AppImportGuiPy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@
#include <Mod/Part/App/encodeFilename.h>
#include <Mod/Part/App/ImportIges.h>
#include <Mod/Part/App/ImportStep.h>
#include <Mod/Part/App/Interface.h>
#include <Mod/Part/App/PartFeature.h>
#include <Mod/Part/App/ProgressIndicator.h>

Expand Down Expand Up @@ -629,13 +630,13 @@ class Module : public Py::ExtensionModule<Module>
Base::FileInfo file(Utf8Name.c_str());
if (file.hasExtension("stp") || file.hasExtension("step")) {
ParameterGrp::handle hGrp_stp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Part/STEP");
std::string scheme = hGrp_stp->GetASCII("Scheme", Interface_Static::CVal("write.step.schema"));
std::string scheme = hGrp_stp->GetASCII("Scheme", Part::Interface::writeStepScheme());
std::list<std::string> supported = Part::supportedSTEPSchemes();
if (std::find(supported.begin(), supported.end(), scheme) != supported.end())
Interface_Static::SetCVal("write.step.schema", scheme.c_str());
Part::Interface::writeStepScheme(scheme.c_str());

STEPCAFControl_Writer writer;
Interface_Static::SetIVal("write.step.assembly",1);
Part::Interface::writeStepAssembly(Part::Interface::Assembly::On);
// writer.SetColorMode(Standard_False);
writer.Transfer(hDoc, STEPControl_AsIs);

Expand All @@ -661,9 +662,9 @@ class Module : public Py::ExtensionModule<Module>
IGESControl_Controller::Init();
IGESCAFControl_Writer writer;
IGESData_GlobalSection header = writer.Model()->GlobalSection();
header.SetAuthorName(new TCollection_HAsciiString(Interface_Static::CVal("write.iges.header.author")));
header.SetCompanyName(new TCollection_HAsciiString(Interface_Static::CVal("write.iges.header.company")));
header.SetSendName(new TCollection_HAsciiString(Interface_Static::CVal("write.iges.header.product")));
header.SetAuthorName(new TCollection_HAsciiString(Part::Interface::writeIgesHeaderAuthor()));
header.SetCompanyName(new TCollection_HAsciiString(Part::Interface::writeIgesHeaderCompany()));
header.SetSendName(new TCollection_HAsciiString(Part::Interface::writeIgesHeaderProduct()));
writer.Model()->SetGlobalSection(header);
writer.Transfer(hDoc);
Standard_Boolean ret = writer.Write((const char*)name8bit.c_str());
Expand Down
9 changes: 5 additions & 4 deletions src/Mod/Part/App/AppPartPy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@
#include "GeometryPy.h"
#include "ImportIges.h"
#include "ImportStep.h"
#include "Interface.h"
#include "modelRefine.h"
#include "OCCError.h"
#include "PartFeature.h"
Expand Down Expand Up @@ -2103,17 +2104,17 @@ class Module : public Py::ExtensionModule<Module>
throw Py::Exception();

if (unit) {
if (!Interface_Static::SetCVal("write.iges.unit",unit)) {
if (!Interface::writeIgesUnit(unit)) {
throw Py::RuntimeError("Failed to set 'write.iges.unit'");
}
if (!Interface_Static::SetCVal("write.step.unit",unit)) {
if (!Interface::writeStepUnit(unit)) {
throw Py::RuntimeError("Failed to set 'write.step.unit'");
}
}

Py::Dict dict;
dict.setItem("write.iges.unit", Py::String(Interface_Static::CVal("write.iges.unit")));
dict.setItem("write.step.unit", Py::String(Interface_Static::CVal("write.step.unit")));
dict.setItem("write.iges.unit", Py::String(Interface::writeIgesUnit()));
dict.setItem("write.step.unit", Py::String(Interface::writeStepUnit()));
return dict;
}
Py::Object setStaticValue(const Py::Tuple& args)
Expand Down
2 changes: 2 additions & 0 deletions src/Mod/Part/App/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -519,6 +519,8 @@ SET(Part_SRCS
ImportIges.h
ImportStep.cpp
ImportStep.h
Interface.cpp
Interface.h
PreCompiled.cpp
PreCompiled.h
ProgressIndicator.cpp
Expand Down
118 changes: 118 additions & 0 deletions src/Mod/Part/App/Interface.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
/***************************************************************************
* Copyright (c) 2022 Werner Mayer <wmayer[at]users.sourceforge.net> *
* *
* This file is part of the FreeCAD CAx development system. *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License as published by the Free Software Foundation; either *
* version 2 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this library; see the file COPYING.LIB. If not, *
* write to the Free Software Foundation, Inc., 59 Temple Place, *
* Suite 330, Boston, MA 02111-1307, USA *
* *
***************************************************************************/

#include "PreCompiled.h"
#ifndef _PreComp_
# include <Interface_Static.hxx>
#endif

#include "Interface.h"


using namespace Part;

void Interface::writeStepAssembly(Interface::Assembly mode)
{
Interface_Static::SetIVal("write.step.assembly", static_cast<int>(mode));
}

Standard_CString Interface::writeStepScheme()
{
return Interface_Static::CVal("write.step.schema");
}

bool Interface::writeStepScheme(Standard_CString scheme)
{
return Interface_Static::SetCVal("write.step.schema", scheme);
}

bool Interface::writeStepUnit(Standard_CString unit)
{
return Interface_Static::SetCVal("write.step.unit", unit);
}

Standard_CString Interface::writeStepUnit()
{
return Interface_Static::CVal("write.step.unit");
}

Standard_CString Interface::writeIgesHeaderAuthor()
{
return Interface_Static::CVal("write.iges.header.author");
}

bool Interface::writeIgesHeaderAuthor(Standard_CString name)
{
return Interface_Static::SetCVal("write.iges.header.author", name);
}

Standard_CString Interface::writeIgesHeaderCompany()
{
return Interface_Static::CVal("write.iges.header.company");
}

bool Interface::writeIgesHeaderCompany(Standard_CString name)
{
return Interface_Static::SetCVal("write.iges.header.company", name);
}

Standard_CString Interface::writeIgesHeaderProduct()
{
return Interface_Static::CVal("write.iges.header.product");
}

bool Interface::writeIgesHeaderProduct(Standard_CString name)
{
return Interface_Static::SetCVal("write.iges.header.product", name);
}

bool Interface::writeIgesUnit(Standard_CString unit)
{
return Interface_Static::SetCVal("write.iges.unit", unit);
}

bool Interface::writeIgesUnit(Interface::Unit unit)
{
switch (unit) {
case Unit::Meter:
return Interface_Static::SetCVal("write.iges.unit","M");
case Unit::Inch:
return Interface_Static::SetCVal("write.iges.unit","INCH");
default:
return Interface_Static::SetCVal("write.iges.unit","MM");
}
}

Standard_CString Interface::writeIgesUnit()
{
return Interface_Static::CVal("write.iges.unit");
}

int Interface::writeIgesBrepMode()
{
return Interface_Static::IVal("write.iges.brep.mode");
}

bool Interface::writeIgesBrepMode(int mode)
{
return Interface_Static::SetIVal("write.iges.brep.mode", mode);
}
71 changes: 71 additions & 0 deletions src/Mod/Part/App/Interface.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/***************************************************************************
* Copyright (c) 2022 Werner Mayer <wmayer[at]users.sourceforge.net> *
* *
* This file is part of the FreeCAD CAx development system. *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License as published by the Free Software Foundation; either *
* version 2 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this library; see the file COPYING.LIB. If not, *
* write to the Free Software Foundation, Inc., 59 Temple Place, *
* Suite 330, Boston, MA 02111-1307, USA *
* *
***************************************************************************/

#ifndef PART_INTERFACE_H
#define PART_INTERFACE_H

#include <Mod/Part/PartGlobal.h>
#include <Standard_CString.hxx>


namespace Part
{

class PartExport Interface
{
public:
// See https://dev.opencascade.org/doc/overview/html/occt_user_guides__step.html
enum class Assembly {
Off = 0, /**< (Default) writes STEP files without assemblies */
On = 1, /**< writes all shapes in the form of STEP assemblies */
Auto = 2, /**< writes shapes having a structure of (possibly nested)
TopoDS_Compounds in the form of STEP assemblies, single
shapes are written without assembly structures */
};
enum class Unit {
Millimeter = 0,
Meter = 1,
Inch = 2,
};

static void writeStepAssembly(Assembly);
static Standard_CString writeStepScheme();
static bool writeStepScheme(Standard_CString);
static Standard_CString writeStepUnit();
static bool writeStepUnit(Standard_CString);

static Standard_CString writeIgesHeaderAuthor();
static bool writeIgesHeaderAuthor(Standard_CString);
static Standard_CString writeIgesHeaderCompany();
static bool writeIgesHeaderCompany(Standard_CString);
static Standard_CString writeIgesHeaderProduct();
static bool writeIgesHeaderProduct(Standard_CString);
static Standard_CString writeIgesUnit();
static bool writeIgesUnit(Standard_CString);
static bool writeIgesUnit(Unit);
static int writeIgesBrepMode();
static bool writeIgesBrepMode(int);
};

} //namespace Part

#endif
9 changes: 5 additions & 4 deletions src/Mod/Part/App/TopoShape.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,7 @@
#include "CrossSection.h"
#include "encodeFilename.h"
#include "FaceMakerBullseye.h"
#include "Interface.h"
#include "modelRefine.h"
#include "PartPyCXX.h"
#include "ProgressIndicator.h"
Expand Down Expand Up @@ -911,9 +912,9 @@ void TopoShape::exportIges(const char *filename) const
IGESControl_Controller::Init();
IGESControl_Writer aWriter;
IGESData_GlobalSection header = aWriter.Model()->GlobalSection();
header.SetAuthorName(new TCollection_HAsciiString(Interface_Static::CVal("write.iges.header.author")));
header.SetCompanyName(new TCollection_HAsciiString(Interface_Static::CVal("write.iges.header.company")));
header.SetSendName(new TCollection_HAsciiString(Interface_Static::CVal("write.iges.header.product")));
header.SetAuthorName(new TCollection_HAsciiString(Interface::writeIgesHeaderAuthor()));
header.SetCompanyName(new TCollection_HAsciiString(Interface::writeIgesHeaderCompany()));
header.SetSendName(new TCollection_HAsciiString(Interface::writeIgesHeaderProduct()));
aWriter.Model()->SetGlobalSection(header);
aWriter.AddShape(this->_Shape);
aWriter.ComputeModel();
Expand All @@ -930,7 +931,7 @@ void TopoShape::exportStep(const char *filename) const
try {
// Fixes issue #6282
// Do not write out any assembly information when using the simplified STEP export
Interface_Static::SetIVal("write.step.assembly", 0);
Interface::writeStepAssembly(Interface::Assembly::Off);

// write step file
STEPControl_Writer aWriter;
Expand Down
Loading

0 comments on commit 8db7ee1

Please sign in to comment.