1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-09 13:22:24 +03:00

Compare commits

..

1 Commits

13 changed files with 106 additions and 204 deletions

View File

@@ -86,8 +86,7 @@ typedef enum
MT_BoundaryEdge = 4, //!< Boundary edge (related to a single face)
MT_SharedEdge = 5, //!< Shared edge (related to several faces)
MT_WireFrameFace = 6, //!< Wireframe face
MT_ShadedFace = 7, //!< Shaded face
MT_SeamEdge = 8 //!< Seam edge between faces
MT_ShadedFace = 7 //!< Shaded face
} IVtk_MeshType;
//! @enum IVtk_DisplayMode Display modes for 3D shapes

View File

@@ -719,85 +719,6 @@ static Standard_Integer VtkSetDisplayMode (Draw_Interpretor& theDI,
return 0;
}
//================================================================
// Function : VtkSetBoundaryDraw
// Purpose :
// Draw args : ivtksetboundingdraw [name] draw on/off(0,1)
//================================================================
static Standard_Integer VtkSetBoundaryDraw(Draw_Interpretor& theDI,
Standard_Integer theArgNum,
const char** theArgs)
{
// Check viewer
if (!GetInteractor()->IsEnabled())
{
theDI << theArgs[0] << " error: call ivtkinit before\n";
return 1; // TCL_ERROR
}
// Check arguments
if (theArgNum != 2 && theArgNum != 3)
{
theDI << theArgs[0] << " error: expects 1 or 2 arguments\n";
return 1; // TCL_ERROR
}
vtkSmartPointer<vtkActor> anActor;
// Set disp mode for all objects
if (theArgNum == 2)
{
// Get mode
Standard_Integer toDraw = Draw::Atoi(theArgs[1]);
DoubleMapOfActorsAndNames::Iterator anIter(GetMapOfActors());
while (anIter.More())
{
anActor = anIter.Key1();
IVtkTools_ShapeDataSource* aSrc = IVtkTools_ShapeObject::GetShapeSource(anActor);
if (aSrc)
{
IVtkOCC_Shape::Handle anOccShape = aSrc->GetShape();
if (!anOccShape.IsNull())
{
IVtkTools_DisplayModeFilter* aFilter = GetPipeline(anOccShape->GetId())->GetDisplayModeFilter();
aFilter->SetDisplayMode(DM_Shading);
aFilter->SetFaceBoundaryDraw((toDraw == 0)? false : true);
aFilter->Modified();
aFilter->Update();
}
}
anIter.Next();
}
}
// Set disp mode for named object
else
{
Standard_Integer toDraw = atoi(theArgs[2]);
TCollection_AsciiString aName = theArgs[1];
if (GetMapOfActors().IsBound2(aName))
{
anActor = GetMapOfActors().Find2(aName);
vtkSmartPointer<IVtkTools_ShapeDataSource> aSrc = IVtkTools_ShapeObject::GetShapeSource(anActor);
if (aSrc)
{
IVtkOCC_Shape::Handle anOccShape = aSrc->GetShape();
if (!anOccShape.IsNull())
{
IVtkTools_DisplayModeFilter* aFilter = GetPipeline(anOccShape->GetId())->GetDisplayModeFilter();
aFilter->SetDisplayMode(DM_Shading);
aFilter->SetFaceBoundaryDraw((toDraw == 0) ? false : true);
aFilter->Modified();
aFilter->Update();
}
}
}
}
// Redraw window
GetInteractor()->Render();
return 0;
}
//================================================================
// Function : VtkSetSelectionMode
// Purpose :
@@ -1277,13 +1198,6 @@ void IVtkDraw::Commands (Draw_Interpretor& theCommands)
"if name is not defined.",
__FILE__, VtkSetDisplayMode, group);
theCommands.Add("ivtksetboundingdraw",
"ivtksetboundingdraw usage:\n"
"ivtksetboundingdraw [name] draw on/off (0,1)"
"\n\t\t: Sets or unsets boundaries drawing for shading display mode to the object with name 'name' or to all objects"
"if name is not defined.",
__FILE__, VtkSetBoundaryDraw, group);
theCommands.Add("ivtksetselmode",
"ivtksetselmode usage:\n"
" ivtksetselmode [name] mode on/off(0,1)"

View File

@@ -180,19 +180,15 @@ void IVtkOCC_ShapeMesher::addEdges()
TopAbs_FACE,
anEdgesMap);
TopTools_IndexedMapOfShape anEdgesList;
TopExp::MapShapes(GetShapeObj()->GetShape(), TopAbs_EDGE, anEdgesList);
int aNbFaces;
IVtk_MeshType aType;
myEdgesTypes.Clear();
TopTools_IndexedMapOfShape::const_iterator aEdgeIt;
for (aEdgeIt = anEdgesList.cbegin(); aEdgeIt != anEdgesList.cend(); aEdgeIt++)
TopExp_Explorer anEdgeIter (GetShapeObj()->GetShape(), TopAbs_EDGE);
for (; anEdgeIter.More(); anEdgeIter.Next())
{
const TopoDS_Edge& anOcctEdge = TopoDS::Edge (*aEdgeIt);
const TopTools_ListOfShape& aFaceList = anEdgesMap.FindFromKey(anOcctEdge);
aNbFaces = aFaceList.Extent();
const TopoDS_Edge& anOcctEdge = TopoDS::Edge (anEdgeIter.Current());
aNbFaces = anEdgesMap.FindFromKey (anOcctEdge).Extent();
if (aNbFaces == 0)
{
aType = MT_FreeEdge;
@@ -203,21 +199,7 @@ void IVtkOCC_ShapeMesher::addEdges()
}
else
{
bool isSame = false;
TopTools_ListOfShape::const_iterator aFaceIt;
for (aFaceIt = aFaceList.cbegin(); aFaceIt != aFaceList.cend(); aFaceIt++) {
TopExp_Explorer aIt((*aFaceIt), TopAbs_EDGE);
int aCount = 0;
for (; aIt.More(); aIt.Next()) {
if (aIt.Current().IsSame(anOcctEdge))
aCount++;
}
if (aCount == 2) {
isSame = true;
break;
}
}
aType = isSame? MT_SeamEdge : MT_SharedEdge;
aType = MT_SharedEdge;
}
addEdge (anOcctEdge, GetShapeObj()->GetSubShapeId (anOcctEdge), aType);
myEdgesTypes.Bind (anOcctEdge, aType);

View File

@@ -35,8 +35,7 @@ vtkStandardNewMacro(IVtkTools_DisplayModeFilter)
//============================================================================
IVtkTools_DisplayModeFilter::IVtkTools_DisplayModeFilter()
: myDisplayMode (DM_Wireframe),
myDoDisplaySharedVertices (false),
myDrawFaceBoundaries( false )
myDoDisplaySharedVertices (false)
{
// Filter according to values in subshapes types array.
myIdsArrayName = IVtkVTK_ShapeData::ARRNAME_MESH_TYPES();
@@ -48,16 +47,15 @@ IVtkTools_DisplayModeFilter::IVtkTools_DisplayModeFilter()
aTypes.Add (MT_FreeEdge);
aTypes.Add (MT_BoundaryEdge);
aTypes.Add (MT_SharedEdge);
aTypes.Add (MT_SeamEdge);
aTypes.Add (MT_WireFrameFace);
myModesDefinition[DM_Wireframe] = aTypes;
myModesDefinition.Bind (DM_Wireframe, aTypes);
aTypes.Clear();
aTypes.Add (MT_FreeVertex);
aTypes.Add (MT_ShadedFace);
myModesDefinition[DM_Shading] = aTypes;
myModesDefinition.Bind (DM_Shading, aTypes);
}
//============================================================================
@@ -75,7 +73,7 @@ int IVtkTools_DisplayModeFilter::RequestData (vtkInformation *theRequest,
vtkInformationVector **theInputVector,
vtkInformationVector *theOutputVector)
{
SetData (myModesDefinition[myDisplayMode]);
SetData (myModesDefinition.Find (myDisplayMode));
return Superclass::RequestData (theRequest, theInputVector, theOutputVector);
}
@@ -106,20 +104,24 @@ void IVtkTools_DisplayModeFilter::SetDisplaySharedVertices (const bool theDoDisp
if (myDoDisplaySharedVertices != theDoDisplay)
{
myDoDisplaySharedVertices = theDoDisplay;
vtkIdType aVertexType = MT_SharedVertex;
NCollection_DataMap<IVtk_DisplayMode, IVtk_IdTypeMap>::Iterator aModes (myModesDefinition);
NCollection_DataMap<IVtk_DisplayMode, IVtk_IdTypeMap> aNewModes;
IVtk_IdTypeMap aModeTypes;
for (int i = 0; i < 2; i++)
for (; aModes.More(); aModes.Next())
{
aModeTypes = myModesDefinition[i];
if (theDoDisplay && !aModeTypes.Contains(MT_SharedVertex))
aModeTypes = aModes.Value();
if (theDoDisplay && !aModeTypes.Contains(aVertexType))
{
aModeTypes.Add (MT_SharedVertex);
aModeTypes.Add (aVertexType);
}
else if (!theDoDisplay && aModeTypes.Contains (MT_SharedVertex))
else if (!theDoDisplay && aModeTypes.Contains (aVertexType))
{
aModeTypes.Remove (MT_SharedVertex);
aModeTypes.Remove (aVertexType);
}
myModesDefinition[i] = aModeTypes;
aNewModes.Bind (aModes.Key(), aModeTypes);
}
myModesDefinition = aNewModes;
Modified();
}
}
@@ -146,42 +148,3 @@ IVtk_DisplayMode IVtkTools_DisplayModeFilter::GetDisplayMode () const
return myDisplayMode;
}
//============================================================================
// Method: meshTypesForMode
// Purpose:
//============================================================================
const IVtk_IdTypeMap& IVtkTools_DisplayModeFilter::MeshTypesForMode(IVtk_DisplayMode theMode) const
{
return myModesDefinition[theMode];
}
//============================================================================
// Method: setMeshTypesForMode
// Purpose:
//============================================================================
void IVtkTools_DisplayModeFilter::SetMeshTypesForMode(IVtk_DisplayMode theMode, const IVtk_IdTypeMap& theMeshTypes)
{
myModesDefinition[theMode] = theMeshTypes;
Modified();
}
//============================================================================
// Method: SetFaceBoundaryDraw
// Purpose:
//============================================================================
void IVtkTools_DisplayModeFilter::SetFaceBoundaryDraw(bool theToDraw)
{
myDrawFaceBoundaries = theToDraw;
if (theToDraw) {
myModesDefinition[DM_Shading].Add(MT_BoundaryEdge);
myModesDefinition[DM_Shading].Add(MT_SharedEdge);
}
else {
if (myModesDefinition[DM_Shading].Contains(MT_BoundaryEdge))
myModesDefinition[DM_Shading].Remove(MT_BoundaryEdge);
if (myModesDefinition[DM_Shading].Contains(MT_SharedEdge))
myModesDefinition[DM_Shading].Remove(MT_SharedEdge);
}
Modified();
}

View File

@@ -20,15 +20,11 @@
#include <IVtkTools_SubPolyDataFilter.hxx>
#include <NCollection_DataMap.hxx>
#include <array>
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 4251) // avoid warning C4251: "class needs to have dll-interface..."
#endif
typedef std::array<IVtk_IdTypeMap, 2> IVtk_DisplayModeArray;
//! @class IVtkTools_DisplayModeFilter
//! @brief Cells filter according to the selected display mode by mesh parts types.
//! This filter is used to get parts of a shape according to different
@@ -50,18 +46,6 @@ public:
//! Get current display mode.
IVtk_DisplayMode GetDisplayMode() const;
//! Returns list of displaying mesh element types for the given display mode
const IVtk_IdTypeMap& MeshTypesForMode(IVtk_DisplayMode theMode) const;
//! Set a list of displaying mesh element types for the given display mode
void SetMeshTypesForMode(IVtk_DisplayMode theMode, const IVtk_IdTypeMap& theMeshTypes);
//! Draw Boundary of faces for shading mode
void SetFaceBoundaryDraw(bool theToDraw);
//! Returns True if drawing Boundary of faces for shading mode is defined.
bool FaceBoundaryDraw() const { return myDrawFaceBoundaries; }
protected:
//! Filter cells according to the given set of ids.
virtual int RequestData (vtkInformation *, vtkInformationVector **, vtkInformationVector *);
@@ -72,9 +56,8 @@ protected:
protected:
//! Display mode defining mesh types to pass through this filter.
IVtk_DisplayMode myDisplayMode;
IVtk_DisplayModeArray myModesDefinition;
NCollection_DataMap<IVtk_DisplayMode, IVtk_IdTypeMap> myModesDefinition;
bool myDoDisplaySharedVertices;
bool myDrawFaceBoundaries;
};
#ifdef _MSC_VER

View File

@@ -97,9 +97,25 @@ namespace
return aPoly;
}
//! Add new solid
virtual void AddSolid() Standard_OVERRIDE
{
Handle(Poly_Triangulation) aCurrentTri = GetTriangulation();
myTriangulationList.Append(aCurrentTri);
myNodes.Clear();
myTriangles.Clear();
}
NCollection_Sequence<Handle(Poly_Triangulation)> GetTriangulationList()
{
return myTriangulationList;
}
private:
NCollection_Vector<gp_XYZ> myNodes;
NCollection_Vector<Poly_Triangle> myTriangles;
NCollection_Sequence<Handle(Poly_Triangulation)> myTriangulationList;
};
}
@@ -118,6 +134,17 @@ Handle(Poly_Triangulation) RWStl::ReadFile (const Standard_CString theFile,
return aReader.GetTriangulation();
}
//=============================================================================
//function : ReadFile
//purpose :
//=============================================================================
void RWStl::ReadFile(const Standard_CString theFile, NCollection_Sequence<Handle(Poly_Triangulation)>& theTriangList)
{
Reader aReader;
aReader.Read(theFile, Handle(Message_ProgressIndicator)(), true);
theTriangList = aReader.GetTriangulationList();
}
//=============================================================================
//function : ReadFile
//purpose :

View File

@@ -50,6 +50,8 @@ public:
Standard_EXPORT static Handle(Poly_Triangulation) ReadFile (const Standard_CString theFile,
const Handle(Message_ProgressIndicator)& aProgInd = Handle(Message_ProgressIndicator)());
Standard_EXPORT static void ReadFile(const Standard_CString theFile, NCollection_Sequence<Handle(Poly_Triangulation)>& theTriangList);
//! Read triangulation from a binary STL file
//! In case of error, returns Null handle.
Standard_EXPORT static Handle(Poly_Triangulation) ReadBinary (const OSD_Path& thePath,

View File

@@ -126,7 +126,8 @@ namespace
//==============================================================================
Standard_Boolean RWStl_Reader::Read (const char* theFile,
const Handle(Message_ProgressIndicator)& theProgress)
const Handle(Message_ProgressIndicator)& theProgress,
bool IsMultiSolid)
{
std::filebuf aBuf;
OSD_OpenStream (aBuf, theFile, std::ios::in | std::ios::binary);
@@ -165,6 +166,8 @@ Standard_Boolean RWStl_Reader::Read (const char* theFile,
}
}
aStream >> std::ws; // skip any white spaces
if (IsMultiSolid)
AddSolid();
}
return ! aStream.fail();
}

View File

@@ -39,7 +39,8 @@ public:
//! Format is recognized automatically by analysis of the file header.
//! Returns true if success, false on error or user break.
Standard_EXPORT Standard_Boolean Read (const char* theFile,
const Handle(Message_ProgressIndicator)& theProgress);
const Handle(Message_ProgressIndicator)& theProgress,
bool IsMultiSolid = false);
//! Guess whether the stream is an Ascii STL file, by analysis of the first bytes (~200).
//! The function attempts to put back the read symbols to the stream which thus must support ungetc().
@@ -74,6 +75,8 @@ public:
//! Should create new triangle built on specified nodes in the target model.
virtual void AddTriangle (Standard_Integer theN1, Standard_Integer theN2, Standard_Integer theN3) = 0;
virtual void AddSolid() = 0;
};
#endif

View File

@@ -411,6 +411,22 @@ static Standard_Integer ReadObj (Draw_Interpretor& theDI,
{
aFilePath = theArgVec[anArgIter];
}
else if (theArgc == 4 && strcmp("multi", theArgv[3]) == 0)
{
NCollection_Sequence<Handle(Poly_Triangulation)> theTriangList;
RWStl::ReadFile(theArgv[2], theTriangList);
BRep_Builder aB;
TopoDS_Compound aCmp;
aB.MakeCompound(aCmp);
for (int i = 1; i <= theTriangList.Length(); i++)
{
TopoDS_Face aFace;
aB.MakeFace(aFace);
aB.UpdateFace(aFace, theTriangList(i));
aB.Add(aCmp, aFace);
}
DBRep::Set(theArgv[1], aCmp);
}
else
{
std::cout << "Syntax error at '" << theArgVec[anArgIter] << "'\n";

View File

@@ -64,6 +64,7 @@ math_GaussLeastSquare.lxx
math_GaussMultipleIntegration.cxx
math_GaussMultipleIntegration.hxx
math_GaussMultipleIntegration.lxx
math_GaussPoints.hxx
math_GaussSetIntegration.cxx
math_GaussSetIntegration.hxx
math_GaussSetIntegration.lxx

View File

@@ -0,0 +1,28 @@
// Copyright (c) 1997-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.
#ifndef math_GaussPoints_HeaderFile
#define math_GaussPoints_HeaderFile
#include <math_Vector.hxx>
#include <Standard_Real.hxx>
extern const Standard_Real Point[157];
extern const Standard_Real Weight[157];
math_Vector GPoints(const Standard_Integer Index);
math_Vector GWeights(const Standard_Integer Index);
#endif

View File

@@ -1,19 +0,0 @@
puts "============="
puts "boundary_draw"
puts "============="
puts ""
#######################################################
# Tests boundary draw flag changing in the IVtk view
#######################################################
set anImage1 $imagedir/${casename}_1.png
set anImage2 $imagedir/${casename}_2.png
ivtkinit
box b 1 1 1
ivtkdisplay b
ivtksetboundingdraw 1
ivtkdump $anImage1
ivtksetboundingdraw 0
ivtkdump $anImage2