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