mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-07-30 13:05:50 +03:00
421 lines
14 KiB
C++
Executable File
421 lines
14 KiB
C++
Executable File
// Created on: 1999-12-23
|
|
// Created by: Vladislav ROMASHKO
|
|
// Copyright (c) 1999-1999 Matra Datavision
|
|
// Copyright (c) 1999-2012 OPEN CASCADE SAS
|
|
//
|
|
// The content of this file is subject to the Open CASCADE Technology Public
|
|
// License Version 6.5 (the "License"). You may not use the content of this file
|
|
// except in compliance with the License. Please obtain a copy of the License
|
|
// at http://www.opencascade.org and read it completely before using this file.
|
|
//
|
|
// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
|
|
// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
|
|
//
|
|
// The Original Code and all software distributed under the License is
|
|
// distributed on an "AS IS" basis, without warranty of any kind, and the
|
|
// Initial Developer hereby disclaims all such warranties, including without
|
|
// limitation, any warranties of merchantability, fitness for a particular
|
|
// purpose or non-infringement. Please see the License for the specific terms
|
|
// and conditions governing the rights and limitations under the License.
|
|
|
|
|
|
|
|
#include <QANewDBRepNaming.ixx>
|
|
|
|
#include <Draw.hxx>
|
|
#include <Draw_Interpretor.hxx>
|
|
#include <QANewDBRepNaming.hxx>
|
|
#include <DBRep.hxx>
|
|
|
|
#include <DDocStd.hxx>
|
|
|
|
#include <DDF.hxx>
|
|
|
|
#include <TDocStd_Document.hxx>
|
|
#include <TDataXtd_Geometry.hxx>
|
|
|
|
#include <TNaming_NamedShape.hxx>
|
|
#include <TNaming_Tool.hxx>
|
|
#include <TNaming_Builder.hxx>
|
|
|
|
#include <TopTools_MapOfShape.hxx>
|
|
#include <TopTools_MapIteratorOfMapOfShape.hxx>
|
|
|
|
#include <TopoDS.hxx>
|
|
#include <TopoDS_Shape.hxx>
|
|
#include <TopoDS_Face.hxx>
|
|
#include <TopoDS_Wire.hxx>
|
|
#include <TopoDS_Edge.hxx>
|
|
#include <TopoDS_Iterator.hxx>
|
|
|
|
#include <TopExp.hxx>
|
|
#include <TopExp_Explorer.hxx>
|
|
|
|
#include <BRepAdaptor_Surface.hxx>
|
|
#include <BRepAdaptor_Curve.hxx>
|
|
|
|
#include <BRep_Tool.hxx>
|
|
|
|
#include <BRepAlgoAPI_Fuse.hxx>
|
|
#include <BRepAlgoAPI_Common.hxx>
|
|
#include <BRepAlgoAPI_Cut.hxx>
|
|
#include <BRepAlgoAPI_Section.hxx>
|
|
|
|
#include <QANewModTopOpe_Limitation.hxx>
|
|
#include <QANewModTopOpe_Intersection.hxx>
|
|
|
|
#include <Standard_Assert.hxx>
|
|
|
|
#include <BRepBuilderAPI_MakeEdge.hxx>
|
|
#include <BRepBuilderAPI_MakeFace.hxx>
|
|
#include <BRepBuilderAPI_MakeWire.hxx>
|
|
|
|
#include <BRepLib.hxx>
|
|
|
|
#include <TColgp_Array1OfPnt.hxx>
|
|
|
|
#include <GCE2d_MakeLine.hxx>
|
|
|
|
#include <gp_Pnt.hxx>
|
|
#include <gp_Ax1.hxx>
|
|
#include <gp_Dir.hxx>
|
|
#include <gp_Vec.hxx>
|
|
|
|
#include <QANewBRepNaming_Fuse.hxx>
|
|
#include <QANewBRepNaming_Cut.hxx>
|
|
#include <QANewBRepNaming_Common.hxx>
|
|
#include <QANewBRepNaming_Intersection.hxx>
|
|
#include <QANewBRepNaming_Limitation.hxx>
|
|
|
|
#include <BRepTools.hxx>
|
|
#include <TDF_LabelMap.hxx>
|
|
#include <QANewModTopOpe_Glue.hxx>
|
|
#include <QANewBRepNaming_Gluing.hxx>
|
|
|
|
//==============================================================
|
|
//function : QANewDBRepNaming_NameBooleanOperationFeat
|
|
//purpose : NameBooleanOperationFeat Doc Label Op = 1(Fuse), 2(Cut), 3(Common), 4(Inserction) 5(Limitation) DrawShape1 DrawShape2 [Forward = 0 || Reversed = 1 || BothSides = 2]
|
|
//==============================================================
|
|
|
|
static Standard_Integer QANewDBRepNaming_NameBooleanOperationFeat (Draw_Interpretor& di,
|
|
Standard_Integer nb,
|
|
const char ** arg)
|
|
{
|
|
if (nb != 6 || nb != 7) {
|
|
di << "QANewDBRepNaming_NameBooleanOperationFeat : Error" << "\n";
|
|
return 1;
|
|
}
|
|
|
|
Handle(TDocStd_Document) D;
|
|
if (!DDocStd::GetDocument(arg[1],D)) return 1;
|
|
TDF_Label L;
|
|
if (!DDF::AddLabel(D->GetData(), arg[2], L)) return 1;
|
|
|
|
const Standard_Integer Op = (Standard_Integer)atoi(arg[3]);
|
|
const TopoDS_Shape& S1 = DBRep::Get(arg[4]);
|
|
const TopoDS_Shape& S2 = DBRep::Get(arg[5]);
|
|
|
|
Standard_Integer Orientation = 0;
|
|
if (nb == 7) Orientation = atoi(arg[6]);
|
|
|
|
switch (Op) {
|
|
case 1: {
|
|
di << "BRepAlgoAPI_Fuse" << "\n";
|
|
BRepAlgoAPI_Fuse mkFuse(S1, S2);
|
|
|
|
Standard_ASSERT_RAISE(mkFuse.IsDone(), "Fuse failed");
|
|
QANewBRepNaming_Fuse nameBool(L);
|
|
nameBool.Load(mkFuse);
|
|
break;
|
|
}
|
|
case 2: {
|
|
di << "BRepAlgoAPI_Cut" << "\n";
|
|
BRepAlgoAPI_Cut mkCut(S1, S2);
|
|
|
|
Standard_ASSERT_RAISE(mkCut.IsDone(), "Cut failed");
|
|
QANewBRepNaming_Cut nameBool(L);
|
|
nameBool.Load(mkCut);
|
|
break;
|
|
}
|
|
case 3: {
|
|
di << "BRepAlgoAPI_Common" << "\n";
|
|
BRepAlgoAPI_Common mkCommon(S1, S2);
|
|
|
|
Standard_ASSERT_RAISE(mkCommon.IsDone(), "Common failed");
|
|
QANewBRepNaming_Common nameBool(L);
|
|
nameBool.Load(mkCommon);
|
|
break;
|
|
}
|
|
case 4: {
|
|
QANewModTopOpe_Intersection mkSection(S1, S2);
|
|
Standard_ASSERT_RAISE(mkSection.IsDone(), "Section failed");
|
|
QANewBRepNaming_Intersection nameBool(L);
|
|
nameBool.Load(mkSection);
|
|
break;
|
|
}
|
|
case 5: {
|
|
QANewModTopOpe_Limitation mkLimit(S1, S2);
|
|
const QANewModTopOpe_ModeOfLimitation aMode = (QANewModTopOpe_ModeOfLimitation) Orientation;
|
|
mkLimit.SetMode(aMode);
|
|
mkLimit.Cut();
|
|
// if (Orientation = 0) mkLimit.CutForward();
|
|
// else if (Orientation = 1) mkLimit.CutReversed();
|
|
// else if (Orientation = 2) mkLimit.CutBothSides();
|
|
Standard_ASSERT_RAISE(mkLimit.IsDone(),"Limit failed");
|
|
QANewBRepNaming_Limitation nameBool(L);
|
|
nameBool.Load(mkLimit);
|
|
break;
|
|
}
|
|
default:
|
|
di<<"QANewDBRepNaming_NameBooleanOperation The type of operation must be 1 - fuse, 2 - cut or 3 - common"<<"\n";
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//==============================================================
|
|
//function : QANewDBRepNaming_NameFuse
|
|
//purpose : NameFuse Doc Label DrawShape1 DrawShape2
|
|
//==============================================================
|
|
|
|
static Standard_Integer QANewDBRepNaming_NameFuse (Draw_Interpretor& di,
|
|
Standard_Integer nb,
|
|
const char ** arg)
|
|
{
|
|
if (nb != 5) {
|
|
di << "QANewDBRepNaming_NameFuse : Error" << "\n";
|
|
return 1;
|
|
}
|
|
|
|
Handle(TDocStd_Document) D;
|
|
if (!DDocStd::GetDocument(arg[1],D)) return 1;
|
|
TDF_Label L;
|
|
if (!DDF::AddLabel(D->GetData(), arg[2], L)) return 1;
|
|
const TopoDS_Shape& S1 = DBRep::Get(arg[3]);
|
|
const TopoDS_Shape& S2 = DBRep::Get(arg[4]);
|
|
QANewBRepNaming_Fuse nameBool(L);
|
|
|
|
di << "BRepAlgoAPI_Fuse" << "\n";
|
|
BRepAlgoAPI_Fuse mkFuse(S1, S2);
|
|
|
|
Standard_ASSERT_RAISE(mkFuse.IsDone(), "Fuse failed");
|
|
nameBool.Load(mkFuse);
|
|
return 0;
|
|
}
|
|
|
|
//==============================================================
|
|
//function : QANewDBRepNaming_NameCut
|
|
//purpose : NameCut Doc Label DrawShape1 DrawShape2
|
|
//==============================================================
|
|
|
|
static Standard_Integer QANewDBRepNaming_NameCut (Draw_Interpretor& di,
|
|
Standard_Integer nb,
|
|
const char ** arg)
|
|
{
|
|
if (nb != 5) {
|
|
di << "QANewDBRepNaming_NameCut : Error" << "\n";
|
|
return 1;
|
|
}
|
|
|
|
Handle(TDocStd_Document) D;
|
|
if (!DDocStd::GetDocument(arg[1],D)) return 1;
|
|
TDF_Label L;
|
|
if (!DDF::AddLabel(D->GetData(), arg[2], L)) return 1;
|
|
const TopoDS_Shape& S1 = DBRep::Get(arg[3]);
|
|
const TopoDS_Shape& S2 = DBRep::Get(arg[4]);
|
|
// DBRep::Set("aShape", S1);
|
|
QANewBRepNaming_Cut nameBool(L);
|
|
// DBRep::Set("S1", S1);
|
|
// DBRep::Set("S2", S2);
|
|
|
|
di << "BRepAlgoAPI_Cut" << "\n";
|
|
BRepAlgoAPI_Cut mkCut(S1, S2);
|
|
|
|
// DBRep::Set("CutRes", mkCut.Shape());
|
|
// DBRep::Set("Shape1", mkCut.Shape1());
|
|
// DBRep::Set("Shape2", mkCut.Shape2());
|
|
// BRepTools::Write(mkCut.Shape1(), "/dn04/OS/SAMTECH/env/S1.brep");
|
|
Standard_ASSERT_RAISE(mkCut.IsDone(), "Cut failed");
|
|
nameBool.Load(mkCut);
|
|
// BRepTools::Write(mkCut.Shape1(), "/dn04/OS/SAMTECH/env/S2.brep");
|
|
return 0;
|
|
}
|
|
|
|
//==============================================================
|
|
//function : QANewDBRepNaming_NameCommon
|
|
//purpose : NameCommon Doc Label DrawShape1 DrawShape2
|
|
//==============================================================
|
|
|
|
static Standard_Integer QANewDBRepNaming_NameCommon (Draw_Interpretor& di,
|
|
Standard_Integer nb,
|
|
const char ** arg)
|
|
{
|
|
if (nb != 5) {
|
|
di << "QANewDBRepNaming_NameCommon : Error" << "\n";
|
|
return 1;
|
|
}
|
|
|
|
Handle(TDocStd_Document) D;
|
|
if (!DDocStd::GetDocument(arg[1],D)) return 1;
|
|
TDF_Label L;
|
|
if (!DDF::AddLabel(D->GetData(), arg[2], L)) return 1;
|
|
const TopoDS_Shape& S1 = DBRep::Get(arg[3]);
|
|
const TopoDS_Shape& S2 = DBRep::Get(arg[4]);
|
|
QANewBRepNaming_Common nameBool(L);
|
|
|
|
di << "BRepAlgoAPI_Common" << "\n";
|
|
BRepAlgoAPI_Common mkCommon(S1, S2);
|
|
|
|
Standard_ASSERT_RAISE(mkCommon.IsDone(), "Common failed");
|
|
nameBool.Load(mkCommon);
|
|
return 0;
|
|
}
|
|
|
|
//==============================================================
|
|
//function : QANewDBRepNaming_NameIntersection
|
|
//purpose : NameIntersection Doc Label DrawShape1 DrawShape2
|
|
//==============================================================
|
|
|
|
static Standard_Integer QANewDBRepNaming_NameIntersection (Draw_Interpretor& di,
|
|
Standard_Integer nb,
|
|
const char ** arg)
|
|
{
|
|
if (nb != 5) {
|
|
di << "QANewDBRepNaming_NameIntersection : Error" << "\n";
|
|
return 1;
|
|
}
|
|
|
|
Handle(TDocStd_Document) D;
|
|
if (!DDocStd::GetDocument(arg[1],D)) return 1;
|
|
TDF_Label L;
|
|
if (!DDF::AddLabel(D->GetData(), arg[2], L)) return 1;
|
|
const TopoDS_Shape& S1 = DBRep::Get(arg[3]);
|
|
const TopoDS_Shape& S2 = DBRep::Get(arg[4]);
|
|
QANewBRepNaming_Intersection nameBool(L);
|
|
QANewModTopOpe_Intersection mkIntersection(S1, S2);
|
|
Standard_ASSERT_RAISE(mkIntersection.IsDone(), "Section failed");
|
|
nameBool.Load(mkIntersection);
|
|
return 0;
|
|
}
|
|
|
|
//==============================================================
|
|
//function : QANewDBRepNaming_NameLimit
|
|
//purpose : NameLimit Doc Label DrawShape1 DrawShape2 [Orientation (Forward - 0, Reversed - 1 or BothSise - 2)]
|
|
//==============================================================
|
|
|
|
static Standard_Integer QANewDBRepNaming_NameLimit (Draw_Interpretor& di,
|
|
Standard_Integer nb,
|
|
const char ** arg)
|
|
{
|
|
if (nb != 5 && nb != 6) {
|
|
di << "QANewDBRepNaming_NameLimit : Error" << "\n";
|
|
return 1;
|
|
}
|
|
|
|
Handle(TDocStd_Document) D;
|
|
if (!DDocStd::GetDocument(arg[1],D)) return 1;
|
|
TDF_Label L;
|
|
if (!DDF::AddLabel(D->GetData(), arg[2], L)) return 1;
|
|
const TopoDS_Shape& S1 = DBRep::Get(arg[3]);
|
|
const TopoDS_Shape& S2 = DBRep::Get(arg[4]);
|
|
Standard_Integer Orientation = 0;
|
|
if (nb == 6) {
|
|
Orientation = atoi(arg[5]);
|
|
}
|
|
QANewBRepNaming_Limitation nameBool(L);
|
|
const QANewModTopOpe_ModeOfLimitation aMode = (QANewModTopOpe_ModeOfLimitation) Orientation;
|
|
QANewModTopOpe_Limitation mkLimit(S1, S2, aMode);
|
|
mkLimit.Cut();
|
|
// if (Orientation == 0) mkLimit.CutForward();
|
|
// else if (Orientation == 1) mkLimit.CutReversed();
|
|
// else if (Orientation == 2) mkLimit.CutBothSides();
|
|
Standard_ASSERT_RAISE(mkLimit.IsDone(), "Limit failed");
|
|
nameBool.Load(mkLimit);
|
|
return 0;
|
|
}
|
|
|
|
//==============================================================
|
|
//function : QANewDBRepNaming_NameGlue
|
|
//purpose : NameGlue Doc Label ObjectLabel ToolLabel [auxiliary valid labels]
|
|
//==============================================================
|
|
|
|
static Standard_Integer QANewDBRepNaming_NameGlue (Draw_Interpretor& di,
|
|
Standard_Integer nb,
|
|
const char ** arg)
|
|
{
|
|
if (nb < 5) {
|
|
di << "QANewDBRepNaming_NameGlue : Error" << "\n";
|
|
return 1;
|
|
}
|
|
|
|
Handle(TDocStd_Document) D;
|
|
if (!DDocStd::GetDocument(arg[1],D)) return 1;
|
|
TDF_Label L,OL,TL;
|
|
if (!DDF::AddLabel(D->GetData(), arg[2], L)) return 1;
|
|
if (!DDF::AddLabel(D->GetData(), arg[3], OL)) return 1;
|
|
if (!DDF::AddLabel(D->GetData(), arg[4], TL)) return 1;
|
|
TDF_LabelMap aLog;
|
|
for(Standard_Integer i=5;i<nb;i++) {
|
|
TDF_Label aLabel;
|
|
if (!DDF::AddLabel(D->GetData(), arg[i], aLabel)) return 1;
|
|
aLog.Add(aLabel);
|
|
}
|
|
Handle(TNaming_NamedShape) anObjectNS,aToolNS;
|
|
if (!OL.FindAttribute(TNaming_NamedShape::GetID(),anObjectNS)) return 1;
|
|
if (!TL.FindAttribute(TNaming_NamedShape::GetID(),aToolNS)) return 1;
|
|
|
|
QANewModTopOpe_Glue aMKGlue(TNaming_Tool::CurrentShape(anObjectNS),TNaming_Tool::CurrentShape(aToolNS));
|
|
if (!aMKGlue.IsDone()) return 1;
|
|
aMKGlue.Build();
|
|
if (!aMKGlue.IsDone()) return 1;
|
|
|
|
QANewBRepNaming_Gluing aGlue(L);
|
|
aGlue.SetContext(TNaming_Tool::CurrentShape(anObjectNS),TNaming_Tool::CurrentShape(aToolNS));
|
|
aGlue.SetLog(aLog);
|
|
aGlue.Load(aMKGlue);
|
|
return 0;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : FeatureCommands
|
|
//purpose :
|
|
//=======================================================================
|
|
|
|
void QANewDBRepNaming::FeatureCommands (Draw_Interpretor& theCommands)
|
|
{
|
|
static Standard_Boolean done = Standard_False;
|
|
if (done) return;
|
|
done = Standard_True;
|
|
const char* g = "Naming algorithm commands for features" ;
|
|
|
|
|
|
theCommands.Add ("NameBooleanOperationFeat",
|
|
"NameBooleanOperationFeat Doc Label Operation(1, 2, 3, 4 or 5) DrawShape1 DrawShape2 [Forward = 0 || Reversed = 1 || BothSides = 2] ",
|
|
__FILE__, QANewDBRepNaming_NameBooleanOperationFeat, g);
|
|
|
|
theCommands.Add ("NameFuse",
|
|
"NameFuse Doc Label DrawShape1 DrawShape2",
|
|
__FILE__, QANewDBRepNaming_NameFuse, g);
|
|
|
|
theCommands.Add ("NameCut",
|
|
"NameCut Doc Label DrawShape1 DrawShape2",
|
|
__FILE__, QANewDBRepNaming_NameCut, g);
|
|
|
|
theCommands.Add ("NameCommon",
|
|
"NameCommon Doc Label DrawShape1 DrawShape2",
|
|
__FILE__, QANewDBRepNaming_NameCommon, g);
|
|
|
|
theCommands.Add ("NameIntersection",
|
|
"NameIntersection Doc Label DrawShape1 DrawShape2",
|
|
__FILE__, QANewDBRepNaming_NameIntersection, g);
|
|
|
|
theCommands.Add ("NameLimit",
|
|
"NameLimit Doc Label DrawShape1 DrawShape2 [Orientation (Forward - 0, Reversed - 1 or BothSise - 2)]",
|
|
__FILE__, QANewDBRepNaming_NameLimit, g);
|
|
|
|
theCommands.Add ("NameGlue",
|
|
"NameGlue Doc Label ObjectLabel ToolLabel [auxiliary valid labels]",
|
|
__FILE__, QANewDBRepNaming_NameGlue, g);
|
|
|
|
}
|