1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-05-01 10:26:12 +03:00
occt/src/HLRBRep/HLRBRep_HLRToShape.cxx
ski 5174095875 0026586: Eliminate compile warnings obtained by building occt with vc14: declaration of local variable hides previous local declaration
Eliminated warnings about "declaration of some local variable hides previous local declaration"
2015-09-17 12:53:55 +03:00

253 lines
7.4 KiB
C++

// Created on: 1993-10-11
// Created by: Christophe MARION
// Copyright (c) 1993-1999 Matra Datavision
// Copyright (c) 1999-2014 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 <BRep_Builder.hxx>
#include <HLRAlgo_EdgeIterator.hxx>
#include <HLRBRep.hxx>
#include <HLRBRep_Algo.hxx>
#include <HLRBRep_Data.hxx>
#include <HLRBRep_EdgeData.hxx>
#include <HLRBRep_HLRToShape.hxx>
#include <HLRBRep_ShapeBounds.hxx>
#include <TopExp_Explorer.hxx>
#include <TopoDS.hxx>
#include <TopoDS_Shape.hxx>
#include <TopTools_IndexedMapOfShape.hxx>
//=======================================================================
//function : HLRBRep_HLRToShape
//purpose :
//=======================================================================
HLRBRep_HLRToShape::HLRBRep_HLRToShape (const Handle(HLRBRep_Algo)& A) :
myAlgo(A)
{}
//=======================================================================
//function : InternalCompound
//purpose :
//=======================================================================
TopoDS_Shape
HLRBRep_HLRToShape::InternalCompound (const Standard_Integer typ,
const Standard_Boolean visible,
const TopoDS_Shape& S,
const Standard_Boolean In3d)
{
Standard_Boolean added = Standard_False;
TopoDS_Shape Result;
Handle(HLRBRep_Data) DS = myAlgo->DataStructure();
if (!DS.IsNull()) {
DS->Projector().Scaled(Standard_True);
Standard_Integer e1 = 1;
Standard_Integer e2 = DS->NbEdges();
Standard_Integer f1 = 1;
Standard_Integer f2 = DS->NbFaces();
Standard_Boolean explor = Standard_False;
// Standard_Boolean todraw;
if (!S.IsNull()) {
Standard_Integer v1,v2;
Standard_Integer index = myAlgo->Index(S);
if (index == 0) explor = Standard_True;
else myAlgo->ShapeBounds(index).Bounds(v1,v2,e1,e2,f1,f2);
}
BRep_Builder B;
B.MakeCompound(TopoDS::Compound(Result));
HLRBRep_EdgeData* ed = &(DS->EDataArray().ChangeValue(e1 - 1));
for (Standard_Integer ie = e1; ie <= e2; ie++) {
ed++;
if (ed->Selected() && !ed->Vertical()) {
ed->Used(Standard_False);
ed->HideCount(0);
}
else ed->Used(Standard_True);
}
if (explor) {
TopTools_IndexedMapOfShape& Edges = DS->EdgeMap();
TopTools_IndexedMapOfShape& Faces = DS->FaceMap();
TopExp_Explorer Exp;
for (Exp.Init (S, TopAbs_FACE);
Exp.More();
Exp.Next()) {
Standard_Integer iface = Faces.FindIndex(Exp.Current());
if (iface != 0)
DrawFace(visible,typ,iface,DS,Result,added,In3d);
}
if (typ >= 3) {
for (Exp.Init (S, TopAbs_EDGE, TopAbs_FACE);
Exp.More();
Exp.Next()) {
Standard_Integer ie = Edges.FindIndex(Exp.Current());
if (ie != 0) {
HLRBRep_EdgeData& EDataIE = DS->EDataArray().ChangeValue(ie);
if (!EDataIE.Used()) {
DrawEdge(visible,Standard_False,typ, EDataIE,Result,added,In3d);
EDataIE.Used(Standard_True);
}
}
}
}
}
else {
for (Standard_Integer iface = f1; iface <= f2; iface++)
DrawFace(visible,typ,iface,DS,Result,added,In3d);
if (typ >= 3) {
HLRBRep_EdgeData* EDataE11 = &(DS->EDataArray().ChangeValue(e1 - 1));
for (Standard_Integer ie = e1; ie <= e2; ie++) {
EDataE11++;
if (!EDataE11->Used()) {
DrawEdge(visible,Standard_False,typ,*EDataE11,Result,added,In3d);
EDataE11->Used(Standard_True);
}
}
}
}
DS->Projector().Scaled(Standard_False);
}
if (!added) Result = TopoDS_Shape();
return Result;
}
//=======================================================================
//function : DrawFace
//purpose :
//=======================================================================
void
HLRBRep_HLRToShape::DrawFace (const Standard_Boolean visible,
const Standard_Integer typ,
const Standard_Integer iface,
Handle(HLRBRep_Data)& DS,
TopoDS_Shape& Result,
Standard_Boolean& added,
const Standard_Boolean In3d) const
{
HLRBRep_FaceIterator Itf;
for (Itf.InitEdge(DS->FDataArray().ChangeValue(iface));
Itf.MoreEdge();
Itf.NextEdge()) {
Standard_Integer ie = Itf.Edge();
HLRBRep_EdgeData& edf = DS->EDataArray().ChangeValue(ie);
if (!edf.Used()) {
Standard_Boolean todraw;
if (typ == 1) todraw = Itf.IsoLine();
else if (typ == 2) //outlines
{
if (In3d)
todraw = Itf.Internal() || Itf.OutLine();
else
todraw = Itf.Internal();
}
else if (typ == 3) todraw = edf.Rg1Line() &&
!edf.RgNLine() && !Itf.OutLine();
else if (typ == 4) todraw = edf.RgNLine() && !Itf.OutLine();
else todraw =
!(Itf.IsoLine() ||
Itf.Internal() ||
(edf.Rg1Line() && !Itf.OutLine()));
if (todraw) {
DrawEdge(visible,Standard_True,typ,edf,Result,added,In3d);
edf.Used(Standard_True);
}
else {
if((typ > 4 || typ == 2) && //sharp or outlines
(edf.Rg1Line() && !Itf.OutLine()))
{
Standard_Integer hc = edf.HideCount();
if(hc > 0) {
edf.Used(Standard_True);
}
else {
++hc;
edf.HideCount(hc); //to try with another face
}
}
else {
edf.Used(Standard_True);
}
}
}
}
}
//=======================================================================
//function : DrawEdge
//purpose :
//=======================================================================
void
HLRBRep_HLRToShape::DrawEdge (const Standard_Boolean visible,
const Standard_Boolean inFace,
const Standard_Integer typ,
HLRBRep_EdgeData& ed,
TopoDS_Shape& Result,
Standard_Boolean& added,
const Standard_Boolean In3d) const
{
Standard_Boolean todraw = Standard_False;
if (inFace) todraw = Standard_True;
else if (typ == 3) todraw = ed.Rg1Line() && !ed.RgNLine();
else if (typ == 4) todraw = ed.RgNLine();
else todraw =!ed.Rg1Line();
if (todraw) {
Standard_Real sta,end;
Standard_ShortReal tolsta,tolend;
BRep_Builder B;
TopoDS_Edge E;
HLRAlgo_EdgeIterator It;
if (visible)
{
for (It.InitVisible(ed.Status()); It.MoreVisible(); It.NextVisible()) {
It.Visible(sta,tolsta,end,tolend);
if (!In3d)
E = HLRBRep::MakeEdge(ed.Geometry(),sta,end);
else
E = HLRBRep::MakeEdge3d(ed.Geometry(),sta,end);
if (!E.IsNull())
{
B.Add(Result,E);
added = Standard_True;
}
}
}
else
{
for (It.InitHidden(ed.Status()); It.MoreHidden(); It.NextHidden()) {
It.Hidden(sta,tolsta,end,tolend);
if (!In3d)
E = HLRBRep::MakeEdge(ed.Geometry(),sta,end);
else
E = HLRBRep::MakeEdge3d(ed.Geometry(),sta,end);
if (!E.IsNull())
{
B.Add(Result,E);
added = Standard_True;
}
}
}
}
}