mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-04-24 01:22:05 +05:00
NPAL15298: KindOfShape(). For all cases.
This commit is contained in:
parent
52a39bebf3
commit
53a38614c4
@ -2127,32 +2127,33 @@ module GEOM
|
|||||||
SHELL,
|
SHELL,
|
||||||
WIRE,
|
WIRE,
|
||||||
// SOLIDs
|
// SOLIDs
|
||||||
SPHERE,
|
SPHERE, // full sphere
|
||||||
CYLINDER,
|
CYLINDER, // cylinder
|
||||||
BOX,
|
BOX, // box with faces, parallel to global coordinate planes
|
||||||
ROTATED_BOX,
|
ROTATED_BOX, // other box
|
||||||
TORUS,
|
TORUS, // full torus
|
||||||
CONE,
|
CONE, // cone
|
||||||
POLYHEDRON,
|
POLYHEDRON, // solid, bounded by polygons
|
||||||
SOLID,
|
SOLID, // other solid
|
||||||
// FACEs
|
// FACEs
|
||||||
SPHERE2D,
|
SPHERE2D, // spherical face (closed)
|
||||||
CYLINDER2D,
|
CYLINDER2D, // cylindrical face with defined height
|
||||||
TORUS2D,
|
TORUS2D, // toroidal face (closed)
|
||||||
CONE2D,
|
CONE2D, // conical face with defined height
|
||||||
DISK,
|
DISK_CIRCLE, // planar, bounded by circle
|
||||||
ELLIPSE2D,
|
DISK_ELLIPSE, // planar, bounded by ellipse
|
||||||
POLYGON,
|
POLYGON, // planar, bounded by segments
|
||||||
PLANAR,
|
PLANE, // infinite planar
|
||||||
FACE,
|
PLANAR, // other planar
|
||||||
|
FACE, // other face
|
||||||
// EDGEs
|
// EDGEs
|
||||||
CIRCLE,
|
CIRCLE, // full circle
|
||||||
ARC,
|
ARC_CIRCLE, // arc of circle
|
||||||
ELLIPSE,
|
ELLIPSE, // full ellipse
|
||||||
ARC_ELLIPSE,
|
ARC_ELLIPSE, // arc of ellipse
|
||||||
LINE, // infinite segment
|
LINE, // infinite segment
|
||||||
SEGMENT,
|
SEGMENT, // segment
|
||||||
EDGE,
|
EDGE, // other edge
|
||||||
// VERTEX
|
// VERTEX
|
||||||
VERTEX
|
VERTEX
|
||||||
};
|
};
|
||||||
|
@ -25,10 +25,13 @@
|
|||||||
#include <GEOMImpl_MeasureDriver.hxx>
|
#include <GEOMImpl_MeasureDriver.hxx>
|
||||||
#include <GEOMImpl_IMeasure.hxx>
|
#include <GEOMImpl_IMeasure.hxx>
|
||||||
|
|
||||||
|
#include <GEOMAlgo_ShapeInfo.hxx>
|
||||||
|
#include <GEOMAlgo_ShapeInfoFiller.hxx>
|
||||||
|
|
||||||
#include <GEOM_Function.hxx>
|
#include <GEOM_Function.hxx>
|
||||||
#include <GEOM_PythonDump.hxx>
|
#include <GEOM_PythonDump.hxx>
|
||||||
|
|
||||||
#include "utilities.h"
|
#include <utilities.h>
|
||||||
#include <OpUtil.hxx>
|
#include <OpUtil.hxx>
|
||||||
#include <Utils_ExceptHandlers.hxx>
|
#include <Utils_ExceptHandlers.hxx>
|
||||||
|
|
||||||
@ -132,318 +135,587 @@ GEOMImpl_IMeasureOperations::ShapeKind GEOMImpl_IMeasureOperations::KindOfShape
|
|||||||
TopoDS_Shape aShape = aRefShape->GetValue();
|
TopoDS_Shape aShape = aRefShape->GetValue();
|
||||||
if (aShape.IsNull()) return aKind;
|
if (aShape.IsNull()) return aKind;
|
||||||
|
|
||||||
TopAbs_ShapeEnum aType = aShape.ShapeType();
|
// Call algorithm
|
||||||
|
GEOMAlgo_ShapeInfoFiller aSF;
|
||||||
|
aSF.SetShape(aShape);
|
||||||
|
aSF.Perform();
|
||||||
|
Standard_Integer iErr = aSF.ErrorStatus();
|
||||||
|
if (iErr) {
|
||||||
|
SetErrorCode("Error in GEOMAlgo_ShapeInfoFiller");
|
||||||
|
return SK_NO_SHAPE;
|
||||||
|
}
|
||||||
|
const GEOMAlgo_ShapeInfo& anInfo = aSF.Info();
|
||||||
|
|
||||||
|
// Interprete results
|
||||||
|
TopAbs_ShapeEnum aType = anInfo.Type();
|
||||||
switch (aType)
|
switch (aType)
|
||||||
{
|
{
|
||||||
//??? geompy.kind.compound nb_solids nb_faces nb_edges nb_vertices
|
case TopAbs_COMPOUND:
|
||||||
//??? geompy.kind.compsolid nb_solids nb_faces nb_edges nb_vertices
|
case TopAbs_COMPSOLID:
|
||||||
//? "nb_faces" - all faces or only 'standalone' faces?
|
{
|
||||||
case TopAbs_COMPOUND:
|
// (+) geompy.kind.COMPOUND nb_solids nb_faces nb_edges nb_vertices
|
||||||
aKind = SK_COMPOUND;
|
// (+) geompy.kind.COMPSOLID nb_solids nb_faces nb_edges nb_vertices
|
||||||
//
|
// ??? "nb_faces" - all faces or only 'standalone' faces?
|
||||||
break;
|
if (aType == TopAbs_COMPOUND)
|
||||||
case TopAbs_COMPSOLID:
|
aKind = SK_COMPOUND;
|
||||||
aKind = SK_COMPSOLID;
|
else
|
||||||
//
|
aKind = SK_COMPSOLID;
|
||||||
break;
|
|
||||||
case TopAbs_SHELL:
|
//theIntegers->Append(anInfo.NbSubShapes(TopAbs_COMPOUND));
|
||||||
//geompy.kind.shell geompy.info.closed nb_faces nb_edges nb_vertices
|
//theIntegers->Append(anInfo.NbSubShapes(TopAbs_COMPSOLID));
|
||||||
//geompy.kind.shell geompy.info.unclosed nb_faces nb_edges nb_vertices
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_SOLID));
|
||||||
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_FACE));
|
||||||
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_EDGE));
|
||||||
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_VERTEX));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TopAbs_SHELL:
|
||||||
|
{
|
||||||
|
// (+) geompy.kind.SHELL geompy.info.closed nb_faces nb_edges nb_vertices
|
||||||
|
// (+) geompy.kind.SHELL geompy.info.unclosed nb_faces nb_edges nb_vertices
|
||||||
aKind = SK_SHELL;
|
aKind = SK_SHELL;
|
||||||
//
|
|
||||||
break;
|
theIntegers->Append((int)anInfo.KindOfClosed());
|
||||||
case TopAbs_WIRE:
|
|
||||||
//geompy.kind.wire geompy.info.closed nb_edges nb_vertices
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_FACE));
|
||||||
//geompy.kind.wire geompy.info.unclosed nb_edges nb_vertices
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_EDGE));
|
||||||
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_VERTEX));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TopAbs_WIRE:
|
||||||
|
{
|
||||||
|
// (+) geompy.kind.WIRE geompy.info.closed nb_edges nb_vertices
|
||||||
|
// (+) geompy.kind.WIRE geompy.info.unclosed nb_edges nb_vertices
|
||||||
aKind = SK_WIRE;
|
aKind = SK_WIRE;
|
||||||
//
|
|
||||||
break;
|
theIntegers->Append((int)anInfo.KindOfClosed());
|
||||||
case TopAbs_SOLID:
|
|
||||||
//geompy.kind.sphere xc yc zc R
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_EDGE));
|
||||||
//geompy.kind.cylinder xb yb zb dx dy dz R H
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_VERTEX));
|
||||||
//geompy.kind.box xc yc zc dx dy dz
|
}
|
||||||
//geompy.kind.rotated_box xo yo zo zx zy zz xx xy xz dx dy dz
|
break;
|
||||||
//geompy.kind.torus xc yc zc dx dy dz R_1 R_2
|
|
||||||
//geompy.kind.cone xb yb zb dx dy dz H R_1 R_2
|
case TopAbs_SOLID:
|
||||||
//geompy.kind.polyhedron nb_faces nb_edges nb_vertices
|
{
|
||||||
//geompy.kind.solid nb_faces nb_edges nb_vertices
|
|
||||||
aKind = SK_SOLID;
|
aKind = SK_SOLID;
|
||||||
//if () {
|
|
||||||
// aKind = SK_SPHERE;
|
GEOMAlgo_KindOfName aKN = anInfo.KindOfName();
|
||||||
// aKind = SK_CYLINDER;
|
switch (aKN)
|
||||||
// aKind = SK_BOX;
|
|
||||||
// aKind = SK_ROTATED_BOX;
|
|
||||||
// aKind = SK_TORUS;
|
|
||||||
// aKind = SK_CONE;
|
|
||||||
// aKind = SK_POLYHEDRON;
|
|
||||||
//}
|
|
||||||
break;
|
|
||||||
case TopAbs_FACE:
|
|
||||||
// geompy.kind.sphere2d xc yc zc R
|
|
||||||
// + geompy.kind.cylinder2d xb yb zb dx dy dz R H
|
|
||||||
// geompy.kind.torus2d xc yc zc dx dy dz R_1 R_2
|
|
||||||
// geompy.kind.cone2d xc yc zc dx dy dz R_1 R_2
|
|
||||||
// geompy.kind.disk xc yc zc dx dy dz R
|
|
||||||
// geompy.kind.ellipse2d xc yc zc dx dy dz R_1 R_2
|
|
||||||
// geompy.kind.polygon xo yo zo dx dy dz nb_edges nb_vertices
|
|
||||||
// + geompy.kind.planar xo yo zo dx dy dz nb_edges nb_vertices
|
|
||||||
// + geompy.kind.face nb_edges nb_vertices _surface_type_id_
|
|
||||||
aKind = SK_FACE;
|
|
||||||
{
|
{
|
||||||
TopoDS_Face aF = TopoDS::Face(aShape);
|
case GEOMAlgo_KN_SPHERE:
|
||||||
|
// (+) geompy.kind.SPHERE xc yc zc R
|
||||||
|
{
|
||||||
|
aKind = SK_SPHERE;
|
||||||
|
|
||||||
int nbWires = 0, nbEdges = 0, nbVertices = 0;
|
gp_Pnt aC = anInfo.Location();
|
||||||
|
theDoubles->Append(aC.X());
|
||||||
|
theDoubles->Append(aC.Y());
|
||||||
|
theDoubles->Append(aC.Z());
|
||||||
|
|
||||||
TopTools_MapOfShape mapShape;
|
theDoubles->Append(anInfo.Radius1());
|
||||||
TopExp_Explorer expw (aF, TopAbs_WIRE);
|
|
||||||
for (; expw.More(); expw.Next()) {
|
|
||||||
if (mapShape.Add(expw.Current())) {
|
|
||||||
//listShape.Append(expw.Current());
|
|
||||||
nbWires++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case GEOMAlgo_KN_CYLINDER:
|
||||||
|
// (+) geompy.kind.CYLINDER xb yb zb dx dy dz R H
|
||||||
|
{
|
||||||
|
aKind = SK_CYLINDER;
|
||||||
|
|
||||||
mapShape.Clear();
|
gp_Pnt aC = anInfo.Location();
|
||||||
TopExp_Explorer expe (aF, TopAbs_EDGE);
|
theDoubles->Append(aC.X());
|
||||||
for (; expe.More(); expe.Next()) {
|
theDoubles->Append(aC.Y());
|
||||||
if (mapShape.Add(expe.Current())) {
|
theDoubles->Append(aC.Z());
|
||||||
//listShape.Append(expe.Current());
|
|
||||||
nbEdges++;
|
gp_Ax3 anAx3 = anInfo.Position();
|
||||||
}
|
gp_Dir aD = anAx3.Direction();
|
||||||
|
theDoubles->Append(aD.X());
|
||||||
|
theDoubles->Append(aD.Y());
|
||||||
|
theDoubles->Append(aD.Z());
|
||||||
|
|
||||||
|
theDoubles->Append(anInfo.Radius1());
|
||||||
|
theDoubles->Append(anInfo.Height());
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case GEOMAlgo_KN_BOX:
|
||||||
|
// (+) geompy.kind.BOX xc yc zc ax ay az
|
||||||
|
{
|
||||||
|
aKind = SK_BOX;
|
||||||
|
|
||||||
mapShape.Clear();
|
gp_Pnt aC = anInfo.Location();
|
||||||
TopExp_Explorer expf (aF, TopAbs_VERTEX);
|
theDoubles->Append(aC.X());
|
||||||
for (; expf.More(); expf.Next()) {
|
theDoubles->Append(aC.Y());
|
||||||
if (mapShape.Add(expf.Current())) {
|
theDoubles->Append(aC.Z());
|
||||||
//listShape.Append(expf.Current());
|
|
||||||
nbVertices++;
|
gp_Ax3 anAx3 = anInfo.Position();
|
||||||
|
gp_Dir aD = anAx3.Direction();
|
||||||
|
gp_Dir aX = anAx3.XDirection();
|
||||||
|
|
||||||
|
// ax ay az
|
||||||
|
if (aD.IsParallel(gp::DZ(), Precision::Angular()) &&
|
||||||
|
aX.IsParallel(gp::DX(), Precision::Angular())) {
|
||||||
|
theDoubles->Append(anInfo.Length()); // ax'
|
||||||
|
theDoubles->Append(anInfo.Width()); // ay'
|
||||||
|
theDoubles->Append(anInfo.Height()); // az'
|
||||||
}
|
}
|
||||||
}
|
else if (aD.IsParallel(gp::DZ(), Precision::Angular()) &&
|
||||||
|
aX.IsParallel(gp::DY(), Precision::Angular())) {
|
||||||
// Geometry
|
theDoubles->Append(anInfo.Width()); // ay'
|
||||||
Handle(Geom_Surface) aGS = BRep_Tool::Surface(aF);
|
theDoubles->Append(anInfo.Length()); // ax'
|
||||||
if (!aGS.IsNull()) {
|
theDoubles->Append(anInfo.Height()); // az'
|
||||||
BRepAdaptor_Surface aBAS (aF);
|
|
||||||
|
|
||||||
if (aGS->IsKind(STANDARD_TYPE(Geom_Plane))) {
|
|
||||||
// planar
|
|
||||||
aKind = SK_PLANAR;
|
|
||||||
|
|
||||||
Handle(Geom_Plane) aGPlane = Handle(Geom_Plane)::DownCast(aGS);
|
|
||||||
gp_Pln aPln = aGPlane->Pln();
|
|
||||||
gp_Ax3 aPos = aPln.Position();
|
|
||||||
gp_Pnt anOri = aPos.Location();
|
|
||||||
gp_Dir aDirZ = aPos.Direction();
|
|
||||||
//gp_Dir aDirX = aPos.XDirection();
|
|
||||||
|
|
||||||
// xo yo zo
|
|
||||||
theDoubles->Append(anOri.X());
|
|
||||||
theDoubles->Append(anOri.Y());
|
|
||||||
theDoubles->Append(anOri.Z());
|
|
||||||
|
|
||||||
// dx dy dz
|
|
||||||
theDoubles->Append(aDirZ.X());
|
|
||||||
theDoubles->Append(aDirZ.Y());
|
|
||||||
theDoubles->Append(aDirZ.Z());
|
|
||||||
|
|
||||||
// nb_edges nb_vertices (for planar only)
|
|
||||||
theIntegers->Append(nbEdges);
|
|
||||||
theIntegers->Append(nbVertices);
|
|
||||||
|
|
||||||
//if () {
|
|
||||||
// aKind = SK_DISK;
|
|
||||||
// aKind = SK_ELLIPSE2D;
|
|
||||||
// aKind = SK_POLYGON;
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
else if (aGS->IsKind(STANDARD_TYPE(Geom_SphericalSurface))) {
|
else if (aD.IsParallel(gp::DX(), Precision::Angular()) &&
|
||||||
//if (/*isSphere*/false) {
|
aX.IsParallel(gp::DZ(), Precision::Angular())) {
|
||||||
if (aBAS.IsUClosed() && aBAS.IsVClosed()) { // does not work
|
theDoubles->Append(anInfo.Height()); // az'
|
||||||
Handle(Geom_SphericalSurface) aGSph = Handle(Geom_SphericalSurface)::DownCast(aGS);
|
theDoubles->Append(anInfo.Width()); // ay'
|
||||||
|
theDoubles->Append(anInfo.Length()); // ax'
|
||||||
// parameters
|
|
||||||
gp_Pnt aLoc = aGSph->Location();
|
|
||||||
Standard_Real rr = aGSph->Radius();
|
|
||||||
|
|
||||||
// xc yc zc
|
|
||||||
theDoubles->Append(aLoc.X());
|
|
||||||
theDoubles->Append(aLoc.Y());
|
|
||||||
theDoubles->Append(aLoc.Z());
|
|
||||||
|
|
||||||
// R
|
|
||||||
theDoubles->Append(rr);
|
|
||||||
|
|
||||||
aKind = SK_SPHERE2D;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// nb_edges nb_vertices (for spherical only)
|
|
||||||
theIntegers->Append(nbEdges);
|
|
||||||
theIntegers->Append(nbVertices);
|
|
||||||
|
|
||||||
theIntegers->Append((Standard_Integer)GeomAbs_Sphere);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (aGS->IsKind(STANDARD_TYPE(Geom_CylindricalSurface))) {
|
else if (aD.IsParallel(gp::DX(), Precision::Angular()) &&
|
||||||
// Pure cylinder or just a piece of cylindric surface
|
aX.IsParallel(gp::DY(), Precision::Angular())) {
|
||||||
TopLoc_Location aL;
|
theDoubles->Append(anInfo.Height()); // az'
|
||||||
Handle(Geom_Surface) aGSLoc = BRep_Tool::Surface(aF, aL);
|
theDoubles->Append(anInfo.Length()); // ax'
|
||||||
|
theDoubles->Append(anInfo.Width()); // ay'
|
||||||
//aF.Orientation(TopAbs_FORWARD);
|
|
||||||
TopExp_Explorer ex (aF, TopAbs_EDGE);
|
|
||||||
Standard_Real uMin, uMax, vMin, vMax;
|
|
||||||
bool isCylinder = true;
|
|
||||||
for (; ex.More(); ex.Next()) {
|
|
||||||
// check all edges: pure cylinder has only one seam edge
|
|
||||||
// and two edges with const v parameter
|
|
||||||
TopoDS_Edge E = TopoDS::Edge(ex.Current());
|
|
||||||
|
|
||||||
if (BRep_Tool::IsClosed(E, aGSLoc, aL)) {
|
|
||||||
// seam edge
|
|
||||||
//TopoDS_Edge ERevr = E;
|
|
||||||
//ERevr.Reverse();
|
|
||||||
//Handle(Geom2d_Curve) pcRepl1 = BRep_Tool::CurveOnSurface(E , aF, f,l);
|
|
||||||
//Handle(Geom2d_Curve) pcRepl2 = BRep_Tool::CurveOnSurface(ERevr, aF, f,l);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
BRepTools::UVBounds(aF, E, uMin, uMax, vMin, vMax);
|
|
||||||
if (Abs(vMin - vMax) > Precision::Confusion())
|
|
||||||
// neither seam, nor v-constant
|
|
||||||
isCylinder = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isCylinder) {
|
|
||||||
aKind = SK_CYLINDER2D;
|
|
||||||
|
|
||||||
Handle(Geom_CylindricalSurface) aGCyl = Handle(Geom_CylindricalSurface)::DownCast(aGS);
|
|
||||||
|
|
||||||
// parameters
|
|
||||||
gp_Pnt aLoc = aGCyl->Location();
|
|
||||||
gp_Ax1 anAx = aGCyl->Axis();
|
|
||||||
gp_Dir aDir = anAx.Direction();
|
|
||||||
Standard_Real rr = aGCyl->Radius();
|
|
||||||
|
|
||||||
// xb yb zb
|
|
||||||
theDoubles->Append(aLoc.X());
|
|
||||||
theDoubles->Append(aLoc.Y());
|
|
||||||
theDoubles->Append(aLoc.Z());
|
|
||||||
|
|
||||||
// dx dy dz
|
|
||||||
theDoubles->Append(aDir.X());
|
|
||||||
theDoubles->Append(aDir.Y());
|
|
||||||
theDoubles->Append(aDir.Z());
|
|
||||||
|
|
||||||
// R
|
|
||||||
theDoubles->Append(rr);
|
|
||||||
|
|
||||||
// H
|
|
||||||
Standard_Real hh = Abs(aBAS.FirstVParameter() - aBAS.LastVParameter());
|
|
||||||
theDoubles->Append(hh);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// nb_edges nb_vertices (for cylinrical only)
|
|
||||||
theIntegers->Append(nbEdges);
|
|
||||||
theIntegers->Append(nbVertices);
|
|
||||||
|
|
||||||
theIntegers->Append((Standard_Integer)GeomAbs_Cylinder);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (aGS->IsKind(STANDARD_TYPE(Geom_ToroidalSurface))) {
|
else if (aD.IsParallel(gp::DY(), Precision::Angular()) &&
|
||||||
// aKind = SK_TORUS2D;
|
aX.IsParallel(gp::DZ(), Precision::Angular())) {
|
||||||
theIntegers->Append(nbEdges);
|
theDoubles->Append(anInfo.Width()); // ay'
|
||||||
theIntegers->Append(nbVertices);
|
theDoubles->Append(anInfo.Height()); // az'
|
||||||
|
theDoubles->Append(anInfo.Length()); // ax'
|
||||||
theIntegers->Append((Standard_Integer)GeomAbs_Torus);
|
|
||||||
}
|
}
|
||||||
else if (aGS->IsKind(STANDARD_TYPE(Geom_ConicalSurface))) {
|
else if (aD.IsParallel(gp::DY(), Precision::Angular()) &&
|
||||||
// aKind = SK_CONE2D;
|
aX.IsParallel(gp::DX(), Precision::Angular())) {
|
||||||
theIntegers->Append(nbEdges);
|
theDoubles->Append(anInfo.Length()); // ax'
|
||||||
theIntegers->Append(nbVertices);
|
theDoubles->Append(anInfo.Height()); // az'
|
||||||
|
theDoubles->Append(anInfo.Width()); // ay'
|
||||||
theIntegers->Append((Standard_Integer)GeomAbs_Cone);
|
|
||||||
}
|
|
||||||
else if (aGS->IsKind(STANDARD_TYPE(Geom_SurfaceOfLinearExtrusion))) {
|
|
||||||
//
|
|
||||||
theIntegers->Append(nbEdges);
|
|
||||||
theIntegers->Append(nbVertices);
|
|
||||||
|
|
||||||
theIntegers->Append((Standard_Integer)GeomAbs_SurfaceOfExtrusion);
|
|
||||||
}
|
|
||||||
else if (aGS->IsKind(STANDARD_TYPE(Geom_SurfaceOfRevolution))) {
|
|
||||||
//
|
|
||||||
theIntegers->Append(nbEdges);
|
|
||||||
theIntegers->Append(nbVertices);
|
|
||||||
|
|
||||||
theIntegers->Append((Standard_Integer)GeomAbs_SurfaceOfRevolution);
|
|
||||||
}
|
|
||||||
else if (aGS->IsKind(STANDARD_TYPE(Geom_BezierSurface))) {
|
|
||||||
//
|
|
||||||
theIntegers->Append(nbEdges);
|
|
||||||
theIntegers->Append(nbVertices);
|
|
||||||
|
|
||||||
theIntegers->Append((Standard_Integer)GeomAbs_BezierSurface);
|
|
||||||
}
|
|
||||||
else if (aGS->IsKind(STANDARD_TYPE(Geom_BSplineSurface))) {
|
|
||||||
//
|
|
||||||
theIntegers->Append(nbEdges);
|
|
||||||
theIntegers->Append(nbVertices);
|
|
||||||
|
|
||||||
theIntegers->Append((Standard_Integer)GeomAbs_BSplineSurface);
|
|
||||||
}
|
|
||||||
else if (aGS->IsKind(STANDARD_TYPE(Geom_OffsetSurface))) {
|
|
||||||
//
|
|
||||||
theIntegers->Append(nbEdges);
|
|
||||||
theIntegers->Append(nbVertices);
|
|
||||||
|
|
||||||
theIntegers->Append((Standard_Integer)GeomAbs_OffsetSurface);
|
|
||||||
}
|
|
||||||
else if (aGS->IsKind(STANDARD_TYPE(Geom_RectangularTrimmedSurface))) {
|
|
||||||
//
|
|
||||||
theIntegers->Append(nbEdges);
|
|
||||||
theIntegers->Append(nbVertices);
|
|
||||||
|
|
||||||
theIntegers->Append((Standard_Integer)GeomAbs_OtherSurface);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// ???
|
// (+) geompy.kind.ROTATED_BOX xo yo zo zx zy zz xx xy xz ax ay az
|
||||||
theIntegers->Append(nbEdges);
|
aKind = SK_ROTATED_BOX;
|
||||||
theIntegers->Append(nbVertices);
|
|
||||||
|
|
||||||
theIntegers->Append((Standard_Integer)GeomAbs_OtherSurface);
|
// Direction and XDirection
|
||||||
|
theDoubles->Append(aD.X());
|
||||||
|
theDoubles->Append(aD.Y());
|
||||||
|
theDoubles->Append(aD.Z());
|
||||||
|
|
||||||
|
theDoubles->Append(aX.X());
|
||||||
|
theDoubles->Append(aX.Y());
|
||||||
|
theDoubles->Append(aX.Z());
|
||||||
|
|
||||||
|
// ax ay az
|
||||||
|
theDoubles->Append(anInfo.Length());
|
||||||
|
theDoubles->Append(anInfo.Width());
|
||||||
|
theDoubles->Append(anInfo.Height());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case GEOMAlgo_KN_TORUS:
|
||||||
|
// (+) geompy.kind.TORUS xc yc zc dx dy dz R_1 R_2
|
||||||
|
{
|
||||||
|
aKind = SK_TORUS;
|
||||||
|
|
||||||
|
gp_Pnt aO = anInfo.Location();
|
||||||
|
theDoubles->Append(aO.X());
|
||||||
|
theDoubles->Append(aO.Y());
|
||||||
|
theDoubles->Append(aO.Z());
|
||||||
|
|
||||||
|
gp_Ax3 anAx3 = anInfo.Position();
|
||||||
|
gp_Dir aD = anAx3.Direction();
|
||||||
|
theDoubles->Append(aD.X());
|
||||||
|
theDoubles->Append(aD.Y());
|
||||||
|
theDoubles->Append(aD.Z());
|
||||||
|
|
||||||
|
theDoubles->Append(anInfo.Radius1());
|
||||||
|
theDoubles->Append(anInfo.Radius2());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GEOMAlgo_KN_CONE:
|
||||||
|
// (+) geompy.kind.CONE xb yb zb dx dy dz R_1 R_2 H
|
||||||
|
{
|
||||||
|
aKind = SK_CONE;
|
||||||
|
|
||||||
|
gp_Pnt aO = anInfo.Location();
|
||||||
|
theDoubles->Append(aO.X());
|
||||||
|
theDoubles->Append(aO.Y());
|
||||||
|
theDoubles->Append(aO.Z());
|
||||||
|
|
||||||
|
gp_Ax3 anAx3 = anInfo.Position();
|
||||||
|
gp_Dir aD = anAx3.Direction();
|
||||||
|
theDoubles->Append(aD.X());
|
||||||
|
theDoubles->Append(aD.Y());
|
||||||
|
theDoubles->Append(aD.Z());
|
||||||
|
|
||||||
|
theDoubles->Append(anInfo.Radius1());
|
||||||
|
theDoubles->Append(anInfo.Radius2());
|
||||||
|
theDoubles->Append(anInfo.Height());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GEOMAlgo_KN_POLYHEDRON:
|
||||||
|
// (+) geompy.kind.POLYHEDRON nb_faces nb_edges nb_vertices
|
||||||
|
{
|
||||||
|
aKind = SK_POLYHEDRON;
|
||||||
|
|
||||||
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_FACE));
|
||||||
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_EDGE));
|
||||||
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_VERTEX));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// (+) geompy.kind.SOLID nb_faces nb_edges nb_vertices
|
||||||
|
{
|
||||||
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_FACE));
|
||||||
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_EDGE));
|
||||||
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_VERTEX));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
case TopAbs_EDGE:
|
break;
|
||||||
//geompy.kind.circle xc yc zc dx dy dz R
|
|
||||||
//geompy.kind.arc xc yc zc dx dy dz R x1 y1 z1 x2 y2 z2
|
case TopAbs_FACE:
|
||||||
//geompy.kind.ellipse xc yc zc dx dy dz R_1 R_2
|
{
|
||||||
//geompy.kind.arcEllipse xc yc zc dx dy dz R_1 R_2 x1 y1 z1 x2 y2 z2
|
aKind = SK_FACE;
|
||||||
//geompy.kind.line x1 y1 z1 x2 y2 z2
|
|
||||||
//geompy.kind.segment x1 y1 z1 x2 y2 z2
|
GEOMAlgo_KindOfName aKN = anInfo.KindOfName();
|
||||||
//geompy.kind.edge nb_vertices _curve_type_id_
|
switch (aKN) {
|
||||||
|
case GEOMAlgo_KN_SPHERE:
|
||||||
|
// (+) geompy.kind.SPHERE2D xc yc zc R
|
||||||
|
{
|
||||||
|
aKind = SK_SPHERE2D;
|
||||||
|
|
||||||
|
gp_Pnt aC = anInfo.Location();
|
||||||
|
theDoubles->Append(aC.X());
|
||||||
|
theDoubles->Append(aC.Y());
|
||||||
|
theDoubles->Append(aC.Z());
|
||||||
|
|
||||||
|
theDoubles->Append(anInfo.Radius1());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GEOMAlgo_KN_CYLINDER:
|
||||||
|
// (+) geompy.kind.CYLINDER2D xb yb zb dx dy dz R H
|
||||||
|
{
|
||||||
|
aKind = SK_CYLINDER2D;
|
||||||
|
|
||||||
|
gp_Pnt aO = anInfo.Location();
|
||||||
|
theDoubles->Append(aO.X());
|
||||||
|
theDoubles->Append(aO.Y());
|
||||||
|
theDoubles->Append(aO.Z());
|
||||||
|
|
||||||
|
gp_Ax3 anAx3 = anInfo.Position();
|
||||||
|
gp_Dir aD = anAx3.Direction();
|
||||||
|
theDoubles->Append(aD.X());
|
||||||
|
theDoubles->Append(aD.Y());
|
||||||
|
theDoubles->Append(aD.Z());
|
||||||
|
|
||||||
|
theDoubles->Append(anInfo.Radius1());
|
||||||
|
theDoubles->Append(anInfo.Height());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GEOMAlgo_KN_TORUS:
|
||||||
|
// (+) geompy.kind.TORUS2D xc yc zc dx dy dz R_1 R_2
|
||||||
|
{
|
||||||
|
aKind = SK_TORUS2D;
|
||||||
|
|
||||||
|
gp_Pnt aO = anInfo.Location();
|
||||||
|
theDoubles->Append(aO.X());
|
||||||
|
theDoubles->Append(aO.Y());
|
||||||
|
theDoubles->Append(aO.Z());
|
||||||
|
|
||||||
|
gp_Ax3 anAx3 = anInfo.Position();
|
||||||
|
gp_Dir aD = anAx3.Direction();
|
||||||
|
theDoubles->Append(aD.X());
|
||||||
|
theDoubles->Append(aD.Y());
|
||||||
|
theDoubles->Append(aD.Z());
|
||||||
|
|
||||||
|
theDoubles->Append(anInfo.Radius1());
|
||||||
|
theDoubles->Append(anInfo.Radius2());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GEOMAlgo_KN_CONE:
|
||||||
|
// (+) geompy.kind.CONE2D xc yc zc dx dy dz R_1 R_2 H
|
||||||
|
{
|
||||||
|
aKind = SK_CONE2D;
|
||||||
|
|
||||||
|
gp_Pnt aO = anInfo.Location();
|
||||||
|
theDoubles->Append(aO.X());
|
||||||
|
theDoubles->Append(aO.Y());
|
||||||
|
theDoubles->Append(aO.Z());
|
||||||
|
|
||||||
|
gp_Ax3 anAx3 = anInfo.Position();
|
||||||
|
gp_Dir aD = anAx3.Direction();
|
||||||
|
theDoubles->Append(aD.X());
|
||||||
|
theDoubles->Append(aD.Y());
|
||||||
|
theDoubles->Append(aD.Z());
|
||||||
|
|
||||||
|
theDoubles->Append(anInfo.Radius1());
|
||||||
|
theDoubles->Append(anInfo.Radius2());
|
||||||
|
theDoubles->Append(anInfo.Height());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GEOMAlgo_KN_DISKCIRCLE:
|
||||||
|
// (+) geompy.kind.DISK_CIRCLE xc yc zc dx dy dz R
|
||||||
|
{
|
||||||
|
aKind = SK_DISK_CIRCLE;
|
||||||
|
|
||||||
|
gp_Pnt aC = anInfo.Location();
|
||||||
|
theDoubles->Append(aC.X());
|
||||||
|
theDoubles->Append(aC.Y());
|
||||||
|
theDoubles->Append(aC.Z());
|
||||||
|
|
||||||
|
gp_Ax3 anAx3 = anInfo.Position();
|
||||||
|
gp_Dir aD = anAx3.Direction();
|
||||||
|
theDoubles->Append(aD.X());
|
||||||
|
theDoubles->Append(aD.Y());
|
||||||
|
theDoubles->Append(aD.Z());
|
||||||
|
|
||||||
|
theDoubles->Append(anInfo.Radius1());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GEOMAlgo_KN_DISKELLIPSE:
|
||||||
|
// (+) geompy.kind.DISK_ELLIPSE xc yc zc dx dy dz R_1 R_2
|
||||||
|
{
|
||||||
|
aKind = SK_DISK_ELLIPSE;
|
||||||
|
|
||||||
|
gp_Pnt aC = anInfo.Location();
|
||||||
|
theDoubles->Append(aC.X());
|
||||||
|
theDoubles->Append(aC.Y());
|
||||||
|
theDoubles->Append(aC.Z());
|
||||||
|
|
||||||
|
gp_Ax3 anAx3 = anInfo.Position();
|
||||||
|
gp_Dir aD = anAx3.Direction();
|
||||||
|
theDoubles->Append(aD.X());
|
||||||
|
theDoubles->Append(aD.Y());
|
||||||
|
theDoubles->Append(aD.Z());
|
||||||
|
|
||||||
|
theDoubles->Append(anInfo.Radius1());
|
||||||
|
theDoubles->Append(anInfo.Radius2());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GEOMAlgo_KN_RECTANGLE:
|
||||||
|
case GEOMAlgo_KN_TRIANGLE:
|
||||||
|
case GEOMAlgo_KN_QUADRANGLE:
|
||||||
|
case GEOMAlgo_KN_POLYGON:
|
||||||
|
// (+) geompy.kind.POLYGON xo yo zo dx dy dz nb_edges nb_vertices
|
||||||
|
{
|
||||||
|
aKind = SK_POLYGON;
|
||||||
|
|
||||||
|
gp_Pnt aO = anInfo.Location();
|
||||||
|
theDoubles->Append(aO.X());
|
||||||
|
theDoubles->Append(aO.Y());
|
||||||
|
theDoubles->Append(aO.Z());
|
||||||
|
|
||||||
|
gp_Ax3 anAx3 = anInfo.Position();
|
||||||
|
gp_Dir aD = anAx3.Direction();
|
||||||
|
theDoubles->Append(aD.X());
|
||||||
|
theDoubles->Append(aD.Y());
|
||||||
|
theDoubles->Append(aD.Z());
|
||||||
|
|
||||||
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_EDGE));
|
||||||
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_VERTEX));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GEOMAlgo_KN_PLANE: // infinite
|
||||||
|
// (+) geompy.kind.PLANE xo yo zo dx dy dz
|
||||||
|
{
|
||||||
|
aKind = SK_PLANE;
|
||||||
|
|
||||||
|
gp_Pnt aC = anInfo.Location();
|
||||||
|
theDoubles->Append(aC.X());
|
||||||
|
theDoubles->Append(aC.Y());
|
||||||
|
theDoubles->Append(aC.Z());
|
||||||
|
|
||||||
|
gp_Ax3 anAx3 = anInfo.Position();
|
||||||
|
gp_Dir aD = anAx3.Direction();
|
||||||
|
theDoubles->Append(aD.X());
|
||||||
|
theDoubles->Append(aD.Y());
|
||||||
|
theDoubles->Append(aD.Z());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (anInfo.KindOfShape() == GEOMAlgo_KS_PLANE) {
|
||||||
|
// (+) geompy.kind.PLANAR xo yo zo dx dy dz nb_edges nb_vertices
|
||||||
|
|
||||||
|
aKind = SK_PLANAR;
|
||||||
|
|
||||||
|
gp_Pnt aC = anInfo.Location();
|
||||||
|
theDoubles->Append(aC.X());
|
||||||
|
theDoubles->Append(aC.Y());
|
||||||
|
theDoubles->Append(aC.Z());
|
||||||
|
|
||||||
|
gp_Ax3 anAx3 = anInfo.Position();
|
||||||
|
gp_Dir aD = anAx3.Direction();
|
||||||
|
theDoubles->Append(aD.X());
|
||||||
|
theDoubles->Append(aD.Y());
|
||||||
|
theDoubles->Append(aD.Z());
|
||||||
|
|
||||||
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_EDGE));
|
||||||
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_VERTEX));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// ??? geompy.kind.FACE nb_edges nb_vertices _surface_type_id_
|
||||||
|
// (+) geompy.kind.FACE nb_edges nb_vertices
|
||||||
|
|
||||||
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_EDGE));
|
||||||
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_VERTEX));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TopAbs_EDGE:
|
||||||
|
{
|
||||||
aKind = SK_EDGE;
|
aKind = SK_EDGE;
|
||||||
//if () {
|
|
||||||
// aKind = SK_CIRCLE;
|
GEOMAlgo_KindOfName aKN = anInfo.KindOfName();
|
||||||
// aKind = SK_ARC;
|
switch (aKN) {
|
||||||
// aKind = SK_ELLIPSE;
|
case GEOMAlgo_KN_CIRCLE:
|
||||||
// aKind = SK_ARC_ELLIPSE;
|
{
|
||||||
// aKind = SK_LINE;
|
// (+) geompy.kind.CIRCLE xc yc zc dx dy dz R
|
||||||
// aKind = SK_SEGMENT;
|
aKind = SK_CIRCLE;
|
||||||
//}
|
|
||||||
break;
|
gp_Pnt aC = anInfo.Location();
|
||||||
case TopAbs_VERTEX:
|
theDoubles->Append(aC.X());
|
||||||
//geompy.kind.VERTEX x y z
|
theDoubles->Append(aC.Y());
|
||||||
aKind = SK_VERTEX;
|
theDoubles->Append(aC.Z());
|
||||||
{
|
|
||||||
TopoDS_Vertex aV = TopoDS::Vertex(aShape);
|
gp_Ax3 anAx3 = anInfo.Position();
|
||||||
gp_Pnt aP = BRep_Tool::Pnt(aV);
|
gp_Dir aD = anAx3.Direction();
|
||||||
theDoubles->Append(aP.X());
|
theDoubles->Append(aD.X());
|
||||||
theDoubles->Append(aP.Y());
|
theDoubles->Append(aD.Y());
|
||||||
theDoubles->Append(aP.Z());
|
theDoubles->Append(aD.Z());
|
||||||
|
|
||||||
|
theDoubles->Append(anInfo.Radius1());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GEOMAlgo_KN_ARCCIRCLE:
|
||||||
|
{
|
||||||
|
// (+) geompy.kind.ARC_CIRCLE xc yc zc dx dy dz R x1 y1 z1 x2 y2 z2
|
||||||
|
aKind = SK_ARC_CIRCLE;
|
||||||
|
|
||||||
|
gp_Pnt aC = anInfo.Location();
|
||||||
|
theDoubles->Append(aC.X());
|
||||||
|
theDoubles->Append(aC.Y());
|
||||||
|
theDoubles->Append(aC.Z());
|
||||||
|
|
||||||
|
gp_Ax3 anAx3 = anInfo.Position();
|
||||||
|
gp_Dir aD = anAx3.Direction();
|
||||||
|
theDoubles->Append(aD.X());
|
||||||
|
theDoubles->Append(aD.Y());
|
||||||
|
theDoubles->Append(aD.Z());
|
||||||
|
|
||||||
|
theDoubles->Append(anInfo.Radius1());
|
||||||
|
|
||||||
|
gp_Pnt aP1 = anInfo.Pnt1();
|
||||||
|
theDoubles->Append(aP1.X());
|
||||||
|
theDoubles->Append(aP1.Y());
|
||||||
|
theDoubles->Append(aP1.Z());
|
||||||
|
|
||||||
|
gp_Pnt aP2 = anInfo.Pnt2();
|
||||||
|
theDoubles->Append(aP2.X());
|
||||||
|
theDoubles->Append(aP2.Y());
|
||||||
|
theDoubles->Append(aP2.Z());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GEOMAlgo_KN_ELLIPSE:
|
||||||
|
{
|
||||||
|
// (+) geompy.kind.ELLIPSE xc yc zc dx dy dz R_1 R_2
|
||||||
|
aKind = SK_ELLIPSE;
|
||||||
|
|
||||||
|
gp_Pnt aC = anInfo.Location();
|
||||||
|
theDoubles->Append(aC.X());
|
||||||
|
theDoubles->Append(aC.Y());
|
||||||
|
theDoubles->Append(aC.Z());
|
||||||
|
|
||||||
|
gp_Ax3 anAx3 = anInfo.Position();
|
||||||
|
gp_Dir aD = anAx3.Direction();
|
||||||
|
theDoubles->Append(aD.X());
|
||||||
|
theDoubles->Append(aD.Y());
|
||||||
|
theDoubles->Append(aD.Z());
|
||||||
|
|
||||||
|
theDoubles->Append(anInfo.Radius1());
|
||||||
|
theDoubles->Append(anInfo.Radius2());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GEOMAlgo_KN_ARCELLIPSE:
|
||||||
|
{
|
||||||
|
// (+) geompy.kind.ARC_ELLIPSE xc yc zc dx dy dz R_1 R_2 x1 y1 z1 x2 y2 z2
|
||||||
|
aKind = SK_ARC_ELLIPSE;
|
||||||
|
|
||||||
|
gp_Pnt aC = anInfo.Location();
|
||||||
|
theDoubles->Append(aC.X());
|
||||||
|
theDoubles->Append(aC.Y());
|
||||||
|
theDoubles->Append(aC.Z());
|
||||||
|
|
||||||
|
gp_Ax3 anAx3 = anInfo.Position();
|
||||||
|
gp_Dir aD = anAx3.Direction();
|
||||||
|
theDoubles->Append(aD.X());
|
||||||
|
theDoubles->Append(aD.Y());
|
||||||
|
theDoubles->Append(aD.Z());
|
||||||
|
|
||||||
|
theDoubles->Append(anInfo.Radius1());
|
||||||
|
theDoubles->Append(anInfo.Radius2());
|
||||||
|
|
||||||
|
gp_Pnt aP1 = anInfo.Pnt1();
|
||||||
|
theDoubles->Append(aP1.X());
|
||||||
|
theDoubles->Append(aP1.Y());
|
||||||
|
theDoubles->Append(aP1.Z());
|
||||||
|
|
||||||
|
gp_Pnt aP2 = anInfo.Pnt2();
|
||||||
|
theDoubles->Append(aP2.X());
|
||||||
|
theDoubles->Append(aP2.Y());
|
||||||
|
theDoubles->Append(aP2.Z());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GEOMAlgo_KN_LINE:
|
||||||
|
{
|
||||||
|
// ??? geompy.kind.LINE x1 y1 z1 x2 y2 z2
|
||||||
|
// (+) geompy.kind.LINE x1 y1 z1 dx dy dz
|
||||||
|
aKind = SK_LINE;
|
||||||
|
|
||||||
|
gp_Pnt aO = anInfo.Location();
|
||||||
|
theDoubles->Append(aO.X());
|
||||||
|
theDoubles->Append(aO.Y());
|
||||||
|
theDoubles->Append(aO.Z());
|
||||||
|
|
||||||
|
gp_Dir aD = anInfo.Direction();
|
||||||
|
theDoubles->Append(aD.X());
|
||||||
|
theDoubles->Append(aD.Y());
|
||||||
|
theDoubles->Append(aD.Z());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GEOMAlgo_KN_SEGMENT:
|
||||||
|
{
|
||||||
|
// (+) geompy.kind.SEGMENT x1 y1 z1 x2 y2 z2
|
||||||
|
aKind = SK_SEGMENT;
|
||||||
|
|
||||||
|
gp_Pnt aP1 = anInfo.Pnt1();
|
||||||
|
theDoubles->Append(aP1.X());
|
||||||
|
theDoubles->Append(aP1.Y());
|
||||||
|
theDoubles->Append(aP1.Z());
|
||||||
|
|
||||||
|
gp_Pnt aP2 = anInfo.Pnt2();
|
||||||
|
theDoubles->Append(aP2.X());
|
||||||
|
theDoubles->Append(aP2.Y());
|
||||||
|
theDoubles->Append(aP2.Z());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// ??? geompy.kind.EDGE nb_vertices _curve_type_id_
|
||||||
|
// (+) geompy.kind.EDGE nb_vertices
|
||||||
|
theIntegers->Append(anInfo.NbSubShapes(TopAbs_VERTEX));
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TopAbs_VERTEX:
|
||||||
|
{
|
||||||
|
// (+) geompy.kind.VERTEX x y z
|
||||||
|
aKind = SK_VERTEX;
|
||||||
|
|
||||||
|
gp_Pnt aP = anInfo.Location();
|
||||||
|
theDoubles->Append(aP.X());
|
||||||
|
theDoubles->Append(aP.Y());
|
||||||
|
theDoubles->Append(aP.Z());
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetErrorCode(OK);
|
SetErrorCode(OK);
|
||||||
|
@ -48,32 +48,33 @@ class GEOMImpl_IMeasureOperations : public GEOM_IOperations {
|
|||||||
SK_SHELL,
|
SK_SHELL,
|
||||||
SK_WIRE,
|
SK_WIRE,
|
||||||
// SOLIDs
|
// SOLIDs
|
||||||
SK_SPHERE,
|
SK_SPHERE, // full sphere
|
||||||
SK_CYLINDER,
|
SK_CYLINDER, // cylinder
|
||||||
SK_BOX,
|
SK_BOX, // box with faces, parallel to global coordinate planes
|
||||||
SK_ROTATED_BOX,
|
SK_ROTATED_BOX, // other box
|
||||||
SK_TORUS,
|
SK_TORUS, // full torus
|
||||||
SK_CONE,
|
SK_CONE, // cone
|
||||||
SK_POLYHEDRON,
|
SK_POLYHEDRON, // solid, bounded by polygons
|
||||||
SK_SOLID,
|
SK_SOLID, // other solid
|
||||||
// FACEs
|
// FACEs
|
||||||
SK_SPHERE2D,
|
SK_SPHERE2D, // spherical face (closed)
|
||||||
SK_CYLINDER2D,
|
SK_CYLINDER2D, // cylindrical face with defined height
|
||||||
SK_TORUS2D,
|
SK_TORUS2D, // toroidal face (closed)
|
||||||
SK_CONE2D,
|
SK_CONE2D, // conical face with defined height
|
||||||
SK_DISK,
|
SK_DISK_CIRCLE, // planar, bounded by circle
|
||||||
SK_ELLIPSE2D,
|
SK_DISK_ELLIPSE, // planar, bounded by ellipse
|
||||||
SK_POLYGON,
|
SK_POLYGON, // planar, bounded by segments
|
||||||
SK_PLANAR,
|
SK_PLANE, // infinite planar
|
||||||
SK_FACE,
|
SK_PLANAR, // other planar
|
||||||
|
SK_FACE, // other face
|
||||||
// EDGEs
|
// EDGEs
|
||||||
SK_CIRCLE,
|
SK_CIRCLE, // full circle
|
||||||
SK_ARC,
|
SK_ARC_CIRCLE, // arc of circle
|
||||||
SK_ELLIPSE,
|
SK_ELLIPSE, // full ellipse
|
||||||
SK_ARC_ELLIPSE,
|
SK_ARC_ELLIPSE, // arc of ellipse
|
||||||
SK_LINE, // infinite segment
|
SK_LINE, // infinite segment
|
||||||
SK_SEGMENT,
|
SK_SEGMENT, // segment
|
||||||
SK_EDGE,
|
SK_EDGE, // other edge
|
||||||
// VERTEX
|
// VERTEX
|
||||||
SK_VERTEX
|
SK_VERTEX
|
||||||
};
|
};
|
||||||
|
@ -149,6 +149,11 @@ ShapeType = {"COMPOUND":0, "COMPSOLID":1, "SOLID":2, "SHELL":3, "FACE":4, "WIRE"
|
|||||||
|
|
||||||
kind = GEOM.GEOM_IKindOfShape
|
kind = GEOM.GEOM_IKindOfShape
|
||||||
|
|
||||||
|
class info:
|
||||||
|
UNKNOWN = 0
|
||||||
|
CLOSED = 1
|
||||||
|
UNCLOSED = 2
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
# Basic primitives
|
# Basic primitives
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
@ -1978,45 +1983,45 @@ def GetPosition(theShape):
|
|||||||
# @note Concrete meaning of each value, returned via \a theIntegers
|
# @note Concrete meaning of each value, returned via \a theIntegers
|
||||||
# or \a theDoubles list depends on the kind of the shape.
|
# or \a theDoubles list depends on the kind of the shape.
|
||||||
# The full list of possible outputs is:
|
# The full list of possible outputs is:
|
||||||
# Currently implemented cases are marked with '+' sign:
|
|
||||||
#
|
#
|
||||||
# geompy.kind.COMPOUND nb_solids nb_faces nb_edges nb_vertices
|
# geompy.kind.COMPOUND nb_solids nb_faces nb_edges nb_vertices
|
||||||
# geompy.kind.COMPSOLID nb_solids nb_faces nb_edges nb_vertices
|
# geompy.kind.COMPSOLID nb_solids nb_faces nb_edges nb_vertices
|
||||||
#
|
#
|
||||||
# geompy.kind.SHELL geompy.info.closed nb_faces nb_edges nb_vertices
|
# geompy.kind.SHELL geompy.info.CLOSED nb_faces nb_edges nb_vertices
|
||||||
# geompy.kind.SHELL geompy.info.unclosed nb_faces nb_edges nb_vertices
|
# geompy.kind.SHELL geompy.info.UNCLOSED nb_faces nb_edges nb_vertices
|
||||||
#
|
#
|
||||||
# geompy.kind.WIRE geompy.info.closed nb_edges nb_vertices
|
# geompy.kind.WIRE geompy.info.CLOSED nb_edges nb_vertices
|
||||||
# geompy.kind.WIRE geompy.info.unclosed nb_edges nb_vertices
|
# geompy.kind.WIRE geompy.info.UNCLOSED nb_edges nb_vertices
|
||||||
#
|
#
|
||||||
# geompy.kind.SPHERE xc yc zc R
|
# geompy.kind.SPHERE xc yc zc R
|
||||||
# geompy.kind.CYLINDER xb yb zb dx dy dz R H
|
# geompy.kind.CYLINDER xb yb zb dx dy dz R H
|
||||||
# geompy.kind.BOX xc yc zc dx dy dz
|
# geompy.kind.BOX xc yc zc ax ay az
|
||||||
# geompy.kind.ROTATED_BOX xo yo zo zx zy zz xx xy xz dx dy dz
|
# geompy.kind.ROTATED_BOX xc yc zc zx zy zz xx xy xz ax ay az
|
||||||
# geompy.kind.TORUS xc yc zc dx dy dz R_1 R_2
|
# geompy.kind.TORUS xc yc zc dx dy dz R_1 R_2
|
||||||
# geompy.kind.CONE xb yb zb dx dy dz H R_1 R_2
|
# geompy.kind.CONE xb yb zb dx dy dz R_1 R_2 H
|
||||||
# geompy.kind.POLYHEDRON nb_faces nb_edges nb_vertices
|
# geompy.kind.POLYHEDRON nb_faces nb_edges nb_vertices
|
||||||
# geompy.kind.SOLID nb_faces nb_edges nb_vertices
|
# geompy.kind.SOLID nb_faces nb_edges nb_vertices
|
||||||
#
|
#
|
||||||
# geompy.kind.SPHERE2D xc yc zc R
|
# geompy.kind.SPHERE2D xc yc zc R
|
||||||
# + geompy.kind.CYLINDER2D xb yb zb dx dy dz R H
|
# geompy.kind.CYLINDER2D xb yb zb dx dy dz R H
|
||||||
# geompy.kind.TORUS2D xc yc zc dx dy dz R_1 R_2
|
# geompy.kind.TORUS2D xc yc zc dx dy dz R_1 R_2
|
||||||
# geompy.kind.CONE2D xc yc zc dx dy dz R_1 R_2
|
# geompy.kind.CONE2D xc yc zc dx dy dz R_1 R_2 H
|
||||||
# geompy.kind.DISK xc yc zc dx dy dz R
|
# geompy.kind.DISK_CIRCLE xc yc zc dx dy dz R
|
||||||
# geompy.kind.ELLIPSE2D xc yc zc dx dy dz R_1 R_2
|
# geompy.kind.DISK_ELLIPSE xc yc zc dx dy dz R_1 R_2
|
||||||
# geompy.kind.POLYGON xo yo zo dx dy dz nb_edges nb_vertices
|
# geompy.kind.POLYGON xo yo zo dx dy dz nb_edges nb_vertices
|
||||||
# + geompy.kind.PLANAR xo yo zo dx dy dz nb_edges nb_vertices
|
# geompy.kind.PLANE xo yo zo dx dy dz
|
||||||
# + geompy.kind.FACE nb_edges nb_vertices _surface_type_id_
|
# geompy.kind.PLANAR xo yo zo dx dy dz nb_edges nb_vertices
|
||||||
|
# geompy.kind.FACE nb_edges nb_vertices
|
||||||
#
|
#
|
||||||
# geompy.kind.CIRCLE xc yc zc dx dy dz R
|
# geompy.kind.CIRCLE xc yc zc dx dy dz R
|
||||||
# geompy.kind.ARC xc yc zc dx dy dz R x1 y1 z1 x2 y2 z2
|
# geompy.kind.ARC_CIRCLE xc yc zc dx dy dz R x1 y1 z1 x2 y2 z2
|
||||||
# geompy.kind.ELLIPSE xc yc zc dx dy dz R_1 R_2
|
# geompy.kind.ELLIPSE xc yc zc dx dy dz R_1 R_2
|
||||||
# geompy.kind.ARC_ELLIPSE xc yc zc dx dy dz R_1 R_2 x1 y1 z1 x2 y2 z2
|
# geompy.kind.ARC_ELLIPSE xc yc zc dx dy dz R_1 R_2 x1 y1 z1 x2 y2 z2
|
||||||
# geompy.kind.LINE x1 y1 z1 x2 y2 z2
|
# geompy.kind.LINE xo yo zo dx dy dz
|
||||||
# geompy.kind.SEGMENT x1 y1 z1 x2 y2 z2
|
# geompy.kind.SEGMENT x1 y1 z1 x2 y2 z2
|
||||||
# geompy.kind.EDGE nb_vertices _curve_
|
# geompy.kind.EDGE nb_vertices
|
||||||
#
|
#
|
||||||
# + geompy.kind.VERTEX x y z
|
# geompy.kind.VERTEX x y z
|
||||||
#
|
#
|
||||||
# Example: see GEOM_TestMeasures.py
|
# Example: see GEOM_TestMeasures.py
|
||||||
def KindOfShape(theShape):
|
def KindOfShape(theShape):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user