Salome HOME
Merge remote branch 'origin/V8_5_asterstudy'
[modules/smesh.git] / src / Tools / blocFissure / gmu / findWireIntermediateVertices.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 intermediaires d'un wire
11
12 def findWireIntermediateVertices(aWire, getNormals=False):
13   """
14   trouver les vertices d'un wire qui ne sont pas aux extremités
15   calcul optionnel des tangentes. Attention à la tolérance qui peut être élevée (> 0.001)
16   """
17   logging.info("start")
18   edges = geompy.ExtractShapes(aWire, geompy.ShapeType["EDGE"], False)
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 list(idsubs.keys()):
43       idsubs[subid].append(sub)
44     else:
45       idsubs[subid] = [sub]
46       name='vertex%d'%i
47       geomPublishInFather(initLog.debug, aWire, sub, name)
48       if getNormals:
49         idnorm[subid] = normals[i]
50         name='norm%d'%i
51         geomPublishInFather(initLog.debug, aWire, normals[i], name)
52   for k, v in idsubs.items():
53     if len(v) > 1:
54       shortList.append(v[0])
55       if getNormals:
56         shortNorm.append(idnorm[k])
57   if getNormals:
58     return shortList, shortNorm
59   else:
60     return shortList
61