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