Salome HOME
adaptation patch OCC 6.8.0 et probleme prolongation wire
[modules/smesh.git] / src / Tools / blocFissure / gmu / prolongeWire.py
1 # -*- coding: utf-8 -*-
2
3 import logging
4 from geomsmesh import geompy
5 from orderEdgesFromWire import orderEdgesFromWire
6
7 # -----------------------------------------------------------------------------
8 # --- prolongation d'un wire par deux segments tangents
9
10 def prolongeWire(aWire, extrem, norms, long):
11   """
12   """
13   logging.info("start")
14   if geompy.NumberOfEdges(aWire) > 1:
15     edges = geompy.ExtractShapes(aWire, geompy.ShapeType["EDGE"])
16     uneSeuleEdge = False
17   else:
18     edges = [aWire]
19     uneSeuleEdge = True
20   edgesBout = []
21   for i, v1 in enumerate(extrem):
22     exts = [geompy.MakeTranslationVectorDistance(v1, norms[i], l) for l in (-long, long)]
23     dists = [(geompy.MinDistance(v, aWire), i , v) for i, v in enumerate(exts)]
24     dists.sort()
25     v2 = dists[-1][-1]
26     #v2 = geompy.MakeTranslationVectorDistance(v1, norms[i], long)
27     edge = geompy.MakeEdge(v1, v2)
28     edges.append(edge)
29     edgesBout.append(edge)
30     name = "extrem%d"%i
31     geompy.addToStudy(edge,name)
32   try:
33     wireProlonge = geompy.MakeWire(edges)
34     geompy.addToStudy(wireProlonge, "wireProlonge")
35   except:
36     logging.warning("probleme MakeWire, approche pas a pas")
37     if uneSeuleEdge:
38       edgelist = [aWire]
39       accessList = [0]
40     else:
41       edgelist, accessList = orderEdgesFromWire(aWire)
42     edge1 = edgelist[accessList[0]]
43     if geompy.MinDistance(edgesBout[0], edge1) < 1.e-4 :
44       i0 = 0
45       i1 = 1
46     else:
47       i0 = 1
48       i1 = 0
49     wireProlonge = edgesBout[i0]
50     for i in range(len(edgelist)):
51       wireProlonge = geompy.MakeWire([wireProlonge, edgelist[accessList[i]]])
52       geompy.addToStudy(wireProlonge, "wireProlonge_%d"%i)
53     wireProlonge = geompy.MakeWire([wireProlonge,edgesBout[i1]])
54     geompy.addToStudy(wireProlonge, "wireNonProlonge")
55     logging.warning("prolongation wire pas a pas OK")
56   return wireProlonge