+ fixes #0000763: Bad IGS import

This commit is contained in:
wmayer 2015-01-05 16:28:40 +01:00
parent ab24e9df6a
commit ee86871bed
6 changed files with 51 additions and 4 deletions

View File

@ -116,10 +116,16 @@ static PyObject * importer(PyObject *self, PyObject *args)
} }
} }
else if (file.hasExtension("igs") || file.hasExtension("iges")) { else if (file.hasExtension("igs") || file.hasExtension("iges")) {
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter()
.GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/Part")->GetGroup("IGES");
try { try {
IGESControl_Controller::Init(); IGESControl_Controller::Init();
Interface_Static::SetIVal("read.surfacecurve.mode",3); Interface_Static::SetIVal("read.surfacecurve.mode",3);
IGESCAFControl_Reader aReader; IGESCAFControl_Reader aReader;
// http://www.opencascade.org/org/forum/thread_20603/?forum=3
aReader.SetReadVisible(hGrp->GetBool("SkipBlankEntities", true)
? Standard_True : Standard_False);
aReader.SetColorMode(true); aReader.SetColorMode(true);
aReader.SetNameMode(true); aReader.SetNameMode(true);
aReader.SetLayerMode(true); aReader.SetLayerMode(true);

View File

@ -157,10 +157,16 @@ static PyObject * importer(PyObject *self, PyObject *args)
} }
} }
else if (file.hasExtension("igs") || file.hasExtension("iges")) { else if (file.hasExtension("igs") || file.hasExtension("iges")) {
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter()
.GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/Part")->GetGroup("IGES");
try { try {
IGESControl_Controller::Init(); IGESControl_Controller::Init();
Interface_Static::SetIVal("read.surfacecurve.mode",3); Interface_Static::SetIVal("read.surfacecurve.mode",3);
IGESCAFControl_Reader aReader; IGESCAFControl_Reader aReader;
// http://www.opencascade.org/org/forum/thread_20603/?forum=3
aReader.SetReadVisible(hGrp->GetBool("SkipBlankEntities", true)
? Standard_True : Standard_False);
aReader.SetColorMode(true); aReader.SetColorMode(true);
aReader.SetNameMode(true); aReader.SetNameMode(true);
aReader.SetLayerMode(true); aReader.SetLayerMode(true);
@ -509,9 +515,14 @@ static PyObject * ocaf(PyObject *self, PyObject *args)
pi->EndScope(); pi->EndScope();
} }
else if (file.hasExtension("igs") || file.hasExtension("iges")) { else if (file.hasExtension("igs") || file.hasExtension("iges")) {
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter()
.GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/Part")->GetGroup("IGES");
IGESControl_Controller::Init(); IGESControl_Controller::Init();
Interface_Static::SetIVal("read.surfacecurve.mode",3); Interface_Static::SetIVal("read.surfacecurve.mode",3);
IGESCAFControl_Reader aReader; IGESCAFControl_Reader aReader;
// http://www.opencascade.org/org/forum/thread_20603/?forum=3
aReader.SetReadVisible(hGrp->GetBool("SkipBlankEntities", true)
? Standard_True : Standard_False);
aReader.SetColorMode(true); aReader.SetColorMode(true);
aReader.SetNameMode(true); aReader.SetNameMode(true);
aReader.SetLayerMode(true); aReader.SetLayerMode(true);

View File

@ -83,6 +83,10 @@ int Part::ImportIgesParts(App::Document *pcDoc, const char* FileName)
if (aReader.ReadFile((const Standard_CString)FileName) != IFSelect_RetDone) if (aReader.ReadFile((const Standard_CString)FileName) != IFSelect_RetDone)
throw Base::Exception("Error in reading IGES"); throw Base::Exception("Error in reading IGES");
// Ignore construction elements
// http://www.opencascade.org/org/forum/thread_20603/?forum=3
aReader.SetReadVisible(Standard_True);
// check file conformity and output stats // check file conformity and output stats
aReader.PrintCheckLoad(Standard_True,IFSelect_GeneralInfo); aReader.PrintCheckLoad(Standard_True,IFSelect_GeneralInfo);

View File

@ -573,6 +573,9 @@ void TopoShape::importIges(const char *FileName)
IGESControl_Controller::Init(); IGESControl_Controller::Init();
Interface_Static::SetIVal("read.surfacecurve.mode",3); Interface_Static::SetIVal("read.surfacecurve.mode",3);
IGESControl_Reader aReader; IGESControl_Reader aReader;
// Ignore construction elements
// http://www.opencascade.org/org/forum/thread_20603/?forum=3
aReader.SetReadVisible(Standard_True);
if (aReader.ReadFile(encodeFilename(FileName).c_str()) != IFSelect_RetDone) if (aReader.ReadFile(encodeFilename(FileName).c_str()) != IFSelect_RetDone)
throw Base::Exception("Error in reading IGES"); throw Base::Exception("Error in reading IGES");

View File

@ -6,14 +6,14 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>445</width> <width>515</width>
<height>270</height> <height>349</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>IGES</string> <string>IGES</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_3"> <layout class="QGridLayout" name="gridLayout_4">
<item row="0" column="0"> <item row="0" column="0">
<widget class="QGroupBox" name="groupBox"> <widget class="QGroupBox" name="groupBox">
<property name="title"> <property name="title">
@ -70,6 +70,22 @@
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Import</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="QCheckBox" name="checkSkipBlank">
<property name="text">
<string>Skip blank entities</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="0">
<widget class="QGroupBox" name="groupBoxHeader"> <widget class="QGroupBox" name="groupBoxHeader">
<property name="title"> <property name="title">
<string>Header</string> <string>Header</string>
@ -108,7 +124,7 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="2" column="0"> <item row="3" column="0">
<spacer name="verticalSpacer"> <spacer name="verticalSpacer">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
@ -126,6 +142,7 @@
<tabstops> <tabstops>
<tabstop>comboBoxUnits</tabstop> <tabstop>comboBoxUnits</tabstop>
<tabstop>checkBrepMode</tabstop> <tabstop>checkBrepMode</tabstop>
<tabstop>checkSkipBlank</tabstop>
<tabstop>lineEditCompany</tabstop> <tabstop>lineEditCompany</tabstop>
<tabstop>lineEditAuthor</tabstop> <tabstop>lineEditAuthor</tabstop>
<tabstop>lineEditProduct</tabstop> <tabstop>lineEditProduct</tabstop>

View File

@ -120,6 +120,9 @@ void DlgImportExportIges::saveSettings()
hGrp->SetBool("BrepMode", ui->checkBrepMode->isChecked()); hGrp->SetBool("BrepMode", ui->checkBrepMode->isChecked());
Interface_Static::SetIVal("write.iges.brep.mode",ui->checkBrepMode->isChecked() ? 1 : 0); Interface_Static::SetIVal("write.iges.brep.mode",ui->checkBrepMode->isChecked() ? 1 : 0);
// Import
hGrp->SetBool("SkipBlankEntities", ui->checkSkipBlank->isChecked());
// header info // header info
hGrp->SetASCII("Company", ui->lineEditCompany->text().toLatin1()); hGrp->SetASCII("Company", ui->lineEditCompany->text().toLatin1());
hGrp->SetASCII("Author", ui->lineEditAuthor->text().toLatin1()); hGrp->SetASCII("Author", ui->lineEditAuthor->text().toLatin1());
@ -141,6 +144,9 @@ void DlgImportExportIges::loadSettings()
bool brep = hGrp->GetBool("BrepMode", value > 0); bool brep = hGrp->GetBool("BrepMode", value > 0);
ui->checkBrepMode->setChecked(brep); ui->checkBrepMode->setChecked(brep);
// Import
ui->checkSkipBlank->setChecked(hGrp->GetBool("SkipBlankEntities", true));
// header info // header info
ui->lineEditCompany->setText(QString::fromStdString(hGrp->GetASCII("Company", ui->lineEditCompany->setText(QString::fromStdString(hGrp->GetASCII("Company",
Interface_Static::CVal("write.iges.header.company")))); Interface_Static::CVal("write.iges.header.company"))));