Salome HOME
debug
[modules/smesh.git] / src / Tools / blocFissure / gmu / findWireIntermediateVertices.py
1 # -*- coding: utf-8 -*-
2
3 import logging
4 from geomsmesh import geompy
5
6 # -----------------------------------------------------------------------------
7 # --- trouver les vertices intermediaires d'un wire
8
9 def findWireIntermediateVertices(aWire, getNormals=False):
10   """
11   trouver les vertices d'un wire qui ne sont pas aux extremités
12   calcul optionnel des tangentes. Attention à la tolérance qui peut être élevée (> 0.001)
13   """
14   logging.info("start")
15   edges = geompy.ExtractShapes(aWire, geompy.ShapeType["EDGE"], False)
16   vertices = []
17   idsubs = {}
18   shortList = []
19   if getNormals:
20     normals = []
21     idnorm = {}
22     shortNorm = []
23   for edge in edges:
24     vert = geompy.ExtractShapes(edge, geompy.ShapeType["VERTEX"], False)
25     vertices += vert
26     if getNormals:
27       v0 = geompy.MakeVertexOnCurve(edge, 0.0)
28       n0 = geompy.MakeTangentOnCurve(edge, 0.0)
29       v1 = geompy.MakeVertexOnCurve(edge, 1.0)
30       n1 = geompy.MakeTangentOnCurve(edge, 1.0)
31       dist = geompy.MinDistance(v0, vert[0])
32       logging.debug("distance %s", dist)
33       if dist < 1.e-2:
34         normals += [n0, n1]
35       else:
36         normals += [n1, n0]
37   for i, sub in enumerate(vertices):
38     subid = geompy.GetSubShapeID(aWire, sub)
39     if subid in idsubs.keys():
40       idsubs[subid].append(sub)
41     else:
42       idsubs[subid] = [sub]
43       name='vertex%d'%i
44       geompy.addToStudyInFather(aWire, sub, name)
45       if getNormals:
46         idnorm[subid] = normals[i]
47         name='norm%d'%i
48         geompy.addToStudyInFather(aWire, normals[i], name)
49   for k, v in idsubs.iteritems():
50     if len(v) > 1:
51       shortList.append(v[0])
52       if getNormals:
53         shortNorm.append(idnorm[k])
54   if getNormals:
55     return shortList, shortNorm
56   else:
57     return shortList
58