Changeset 597 in main for branches


Ignore:
Timestamp:
12/07/11 14:33:58 (9 years ago)
Author:
agalech
Message:

branch 3D: 3D view: make it possible to show/hide each shape of a stp file

Location:
branches/3D
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • branches/3D/openPLM/document3D/STP_converter_JSS.py

    r592 r597  
    1515##You should have received a copy of the GNU Lesser General Public License 
    1616##along with pythonOCC.  If not, see <http://www.gnu.org/licenses/>. 
    17  
    18  
    19  
    20 import os.path 
     17import os, os.path 
     18from openPLM.document3D.models import * 
     19from OCC.Quantity import * 
    2120from OCC.TDataStd import * 
    22 from OCC.Utils.Topology import Topo 
    23 from OCC.TopAbs import * 
    24  
    25 from OCC import XCAFApp, TDocStd, XCAFDoc ,TCollection, Quantity, TopLoc, gp, TPrsStd, XCAFPrs 
     21from OCC.TopoDS import * 
     22from OCC.BRep import * 
     23from OCC.STEPControl import * 
     24from OCC.Interface import * 
     25 
     26from OCC.IFSelect import * 
     27from OCC.TColStd import * 
     28 
     29from OCC.XCAFApp import * 
    2630from OCC.STEPCAFControl import * 
    27 from OCC.STEPControl import * 
    28  
    29 from django.core.files.base import File 
    30  
    31 #from openPLM.document3D.aficher import * 
    32 import StringIO 
    33 #from OCC.Utils.DataExchange.STEP import * 
    34  
    35 #from OCC.TopoDS import * 
    36 from OCC.BRep import * 
    37  
    38  
    39 from OCC.IFSelect import * 
    40  
    41  
     31from OCC.TDocStd import * 
     32from OCC.TCollection import * 
     33from OCC.XCAFDoc import * 
    4234from OCC.TDF import * 
    43  
    44 from OCC.TopoDS import * 
     35#from OCC.TDataStd import * 
     36from OCC import XCAFApp, TDocStd, TCollection, XCAFDoc, BRepPrimAPI, Quantity, TopLoc, gp, TPrsStd, XCAFPrs 
     37 
    4538 
    4639 
    4740##Puede haver dos root? 
    4841## y si el shapeTOPO no es ABS 1 o 2 
    49  
     42##SI tengo una location dentro de otra location en un shape referenciado? 
    5043 
    5144 
     
    5548        self.filename = filename 
    5649        self._shapes = [] #an empty string 
    57         self._arbre_nom= [] 
     50        self._shapes_avec_nom= [] 
    5851        self._vertices= [] 
    5952        self._faces= [] 
     
    6154    def get_shapes(self): 
    6255        return self._shapes   
    63     def get_shapes_(self,i): 
    64         return self._arbre_nom[i]   
     56    def get_shapes_avec_nom(self): 
     57        return self._shapes_avec_nom 
    6558         
    6659    def read_file(self):       
    6760        STEPReader = STEPCAFControl_Reader() 
    6861        STEPReader.ReadFile(self.filename)   
    69         #STEPReader.ReadFile("/home/linux/openPLM/branches/3D/openPLM/docs/stp/pppp.stp") 
     62        #STEPReader.ReadFile("/home/linux/test/s1/1.stp") 
    7063        h_doc = TDocStd.Handle_TDocStd_Document() 
    7164        app = XCAFApp.GetApplication().GetObject() 
    7265        app.NewDocument(TCollection.TCollection_ExtendedString("MDTV-CAF"),h_doc) 
     66 
     67 
    7368        STEPReader.Transfer(h_doc) 
     69 
    7470        doc = h_doc.GetObject() 
    7571        h_shape_tool = XCAFDoc.XCAFDoc_DocumentTool_ShapeTool(doc.Main()) 
     72        l_Colors = XCAFDoc.XCAFDoc_DocumentTool_ColorTool(doc.Main()) 
     73         
     74        ColorLabels = TDF_LabelSequence() 
    7675        l_Labels_root = TDF_LabelSequence() 
    7776        l_LabelShapes = TDF_LabelSequence() 
     77        l_Colors.GetObject().GetColors(ColorLabels) 
     78        color_tool=l_Colors.GetObject() 
     79        print 'Number of colors=%i'%ColorLabels.Length() 
     80 
    7881        l_ComponentShapes = TDF_LabelSequence() 
    79         l_SubComponent=TDF_LabelSequence() 
    8082        shape_tool = h_shape_tool.GetObject() 
    8183        shape_tool.GetShapes(l_LabelShapes) 
    8284        shape_tool.GetFreeShapes(l_Labels_root) 
    8385         
    84         ### Presentation Shapes### 
    85         print "Shapes in fichier:"   
    86         for i in range(l_LabelShapes.Length()): 
    87             print '\t',Nom_Label_Shape(l_LabelShapes.Value(i+1)) 
    88         ###              ### 
    89         ### Presentation Components### 
    90         print "Components:" 
    91         shape_tool.GetComponents(l_Labels_root.Value(1),l_ComponentShapes)   
    92         for i in range(l_ComponentShapes.Length()): 
    93             print '\t',Nom_Label_Shape(l_ComponentShapes.Value(i+1)) 
    94         ###              ### 
    95          
     86 
     87                     
     88        #for i in range(l_Labels_root.Length()): 
    9689        for i in range(l_Labels_root.Length()): 
    97             self._shapes.append([]) 
    98             parcours_recursif(l_Labels_root.Value(i+1),self._shapes[i],shape_tool) 
     90            loc=[] 
     91            self._shapes_avec_nom.append(arbre_nom_shapes(Nom_Label_Shape(l_Labels_root.Value(i+1)))) 
     92            parcours_recursif(l_Labels_root.Value(i+1),shape_tool,self._shapes_avec_nom[i].children,color_tool,loc) 
    9993 
    10094             
    101              
    102         """ 
    103         for i in range(l_Labels_root.Length()):  #pour chaque root          
    104             l_ComponentShapes = TDF_LabelSequence() 
    105             shape_tool.GetComponents(l_Labels_root.Value(i+1),l_ComponentShapes) 
    106             #print "Root[",Nom_Label_Shape(l_Labels_root.Value(i+1)),"]" 
    107             if(l_ComponentShapes.Length()>0):  
    108                 for f in range(l_ComponentShapes.Length()): #pour chaque component 
    109                     #print '\tComposant[',Nom_Label_Shape(l_ComponentShapes.Value(f+1)),']' 
    110                     compShape=shape_tool.GetShape(l_ComponentShapes.Value(f+1)) 
    111                      
    112                     self._arbre_nom.append(Nom_Label_Shape(l_ComponentShapes.Value(f+1))) 
    113                     if len(self._shapes) <= f: 
    114                         #self._shapes.append([]) 
    115                         self._shapes[f].append(compShape) 
    116  
    117                      
    118                      
    119                     #t = Topo(compShape)    
    120                     #Podemos conseguir piezas mas pequenas pero no sus nombres  
    121                     #for aux in t.solids(): #entramos q solid para tener mass precision pero no conseguimos los nombres de las partes 
    122                         #self._shapes[f].append(aux) 
    123                         #print "no entra aqui" 
    124                         
    125                     #tengo que enviar el compshape 
    126                       
    127             else: 
    128  
    129                     compShape=shape_tool.GetShape(l_Labels_root.Value(i+1)) 
    130                     self._shapes.append([]) 
    131                     self._shapes[0].append(compShape)  
    132  
    133         """ 
    13495        return True               
    135                          
    136              
    137 def parcours_recursif(label,shape,shape_tool): 
    138     l_ComponentShapes = TDF_LabelSequence()             
    139     shape_tool.GetComponents(label,l_ComponentShapes) 
    140     if(l_ComponentShapes.Length()>0):  
    141          
    142         for f in range(l_ComponentShapes.Length()): 
    143             shape.append([])      
    144             parcours_recursif(l_ComponentShapes.Value(f+1),shape[f],shape_tool)      
    145     else: 
    146  
    147         compShape=shape_tool.GetShape(label) 
    148         shape.append(compShape)  
     96         
     97 
     98def parcours_recursif(label,shape_tool,arbre_shape,color_tool,loc): 
     99 
     100    l_ComponentShapes = TDF_LabelSequence()  
     101    colour_chercher(label,color_tool) 
     102     
     103     
     104     
     105    if(shape_tool.IsReference(label)):     
     106        lab=TDF_Label() 
     107        shape_tool.GetReferredShape(label,lab) 
     108        shape_tool.GetComponents(lab,l_ComponentShapes) 
     109        if(l_ComponentShapes.Length()>0): 
     110            loc.append(shape_tool.GetLocation(label))  
     111            for f in range(l_ComponentShapes.Length()): 
     112                arbre_shape.append(arbre_nom_shapes(Nom_Label_Shape(l_ComponentShapes.Value(f+1))))  
     113                  
     114                parcours_recursif(l_ComponentShapes.Value(f+1),shape_tool,arbre_shape[f].children,color_tool,loc[:]) 
     115        else: 
     116            compShape=shape_tool.GetShape(label)  
     117            for i in range(len(loc)):  
     118                compShape.Move(loc[len(loc)-i-1])         
     119            arbre_shape.append(compShape)         
     120    else: 
     121        shape_tool.GetComponents(label,l_ComponentShapes) 
     122        if(l_ComponentShapes.Length()>0):      
     123            for f in range(l_ComponentShapes.Length()):            
     124                arbre_shape.append(arbre_nom_shapes(Nom_Label_Shape(l_ComponentShapes.Value(f+1))))    
     125                parcours_recursif(l_ComponentShapes.Value(f+1),shape_tool,arbre_shape[f].children,color_tool,loc[:])       
     126        else:  
     127                 
     128            compShape=shape_tool.GetShape(label)  
     129            if loc: 
     130                print "y aqui no entra" 
     131                compShape.Move(loc)         
     132            arbre_shape.append(compShape)               
     133 
     134 
     135def colour_chercher(label,color_tool): 
     136    c=Quantity_Color() 
     137    if( color_tool.GetColor(label,XCAFDoc_ColorSurf,c) or  color_tool.GetColor(label,XCAFDoc_ColorCurv,c) or color_tool.GetColor(label,XCAFDoc_ColorGen,c)): 
     138        print "ALELUY##########################"   
     139        print "" 
     140        print "Color encontrado para : " , Nom_Label_Shape(label)  
     141        print ""       
     142        print "################################" 
     143    else: 
     144        print "No hay color para : " , Nom_Label_Shape(label)       
    149145     
    150146             
     
    159155         
    160156         
    161                      
    162 class NEW_STEPOCAF_Import(object): 
    163     ''' 
    164     Imports STEP file that support layers & colors 
    165     ''' 
    166     def __init__(self, filename, layer_name='layer-00'): 
    167         self.filename = filename 
    168         self._shapes = [] #an empty string 
    169         self._components =[] 
    170      
    171     def get_shapes(self): 
    172         return self._shapes 
    173         #return self._components 
    174      
    175     def read_file(self): 
    176      
    177         # Create the TDocStd document 
    178  
    179          
    180          
    181              
    182         # Create Reader 
    183          
    184      
    185         STEPReader = STEPCAFControl_Reader() 
    186         #STEPReader.SetColorMode(True) 
    187         #STEPReader.SetLayerMode(True) 
    188         #STEPReader.SetNameMode(True) 
    189         #STEPReader.SetMatMode(True) 
    190         #status = STEPReader.ReadFile(str(self.filename))   
    191         #status = STEPReader.ReadNames("/home/linux/openPLM/trunk/openPLM/docs/stp/d14c00b285ebb58966e0a962400ccb60-j8g.stp") 
    192          
    193          
    194         STEPReader.ReadFile("/home/linux/openPLM/trunk/openPLM/docs/stp/d14c00b285ebb58966e0a962400ccb60-tmi.stp") 
    195          
    196          
    197         h_doc = TDocStd.Handle_TDocStd_Document() 
    198  
    199          
    200  
    201         # Create the application 
    202          
    203         app = XCAFApp.GetApplication().GetObject() 
    204         app.NewDocument(TCollection.TCollection_ExtendedString("MDTV-CAF"),h_doc) 
    205          
    206          
    207         # Transfer 
    208  
    209         STEPReader.Transfer(h_doc) 
    210  
    211         # Get root assembly 
    212         doc = h_doc.GetObject() 
    213          
    214          
    215          
    216         h_shape_tool = XCAFDoc.XCAFDoc_DocumentTool_ShapeTool(doc.Main()) 
    217         l_Colors = XCAFDoc.XCAFDoc_DocumentTool_ColorTool(doc.Main()) 
    218         l_Layers = XCAFDoc.XCAFDoc_DocumentTool_LayerTool(doc.Main()) 
    219         l_materials = XCAFDoc.XCAFDoc_DocumentTool_MaterialTool(doc.Main()) 
    220                     #ShapeSequence = new TopTools_HSequenceOfShape(); 
    221         #STEPReader.Transfer(doc.GetHandle()) 
    222  
    223         Labels = TDF_LabelSequence() 
    224         ColorLabels = TDF_LabelSequence() 
    225         LayersLabel = TDF_LabelSequence() 
    226         l_LabelShapes = TDF_LabelSequence() 
    227          
    228         shape_tool = h_shape_tool.GetObject() 
    229         shape_tool.GetFreeShapes(Labels) 
    230         shape_tool.GetShapes(l_LabelShapes); 
    231  
    232         
    233         print 'Number of root :%i'%Labels.Length() 
    234         print 'Number of shapes :%i'%l_LabelShapes.Length()   
    235          
    236  
    237          
    238         for i in range(l_LabelShapes.Length()): 
    239             lab=TDF_Label() 
    240             lab=l_LabelShapes.Value(i+1) 
    241             entry = TCollection.TCollection_AsciiString() 
    242             TDF_Tool.Entry(lab,entry) 
    243  
    244             N = Handle_TDataStd_Name() 
    245             lab.FindAttribute(TDataStd_Name_GetID(),N) 
    246  
    247             n=N.GetObject() 
    248             a=n.Get() 
    249              
    250             nuevoShape = shape_tool.GetShape(l_LabelShapes.Value(i+1))         
    251             sub_shapes_labels = TDF_LabelSequence() 
    252             sub_component_labels = TDF_LabelSequence() 
    253             shape_tool.GetSubShapes(l_LabelShapes.Value(i+1),sub_shapes_labels) 
    254             shape_tool.GetComponents(l_LabelShapes.Value(i+1),sub_component_labels) 
    255  
    256       
    257             nuevoshape=shape_tool.GetShape(l_LabelShapes.Value(i+1)) 
    258             #print "Tipo del atributo" ,  nuevoshape.ShapeType() 
    259             if (nuevoshape.ShapeType() == TopAbs_COMPOUND or nuevoshape.ShapeType() == 2) and i==1: #or i==4 or i==5): 
    260                 print 'Name of atributo del shape ',a.PrintToString() 
    261                 print 'Number of subshapes  in the assemly :%i'%sub_shapes_labels.Length() 
    262                 print 'Number of components in the assemly :%i'%sub_component_labels.Length()   
     157"""                     
     158def parcours_recursif(label,shape_tool,arbre_shape,loc=None): 
     159 
     160    l_ComponentShapes = TDF_LabelSequence()             
     161    shape_tool.GetComponents(label,l_ComponentShapes) 
     162    if(l_ComponentShapes.Length()>0):  
     163         
     164        for f in range(l_ComponentShapes.Length()): 
     165            #shape.append([])             
     166            arbre_shape.append(arbre_nom_shapes(Nom_Label_Shape(l_ComponentShapes.Value(f+1))))    
     167            parcours_recursif(l_ComponentShapes.Value(f+1),shape_tool,arbre_shape[f].children,loc)      
     168    else: 
     169 
     170            compShape=shape_tool.GetShape(label)        
     171            arbre_shape.append(compShape)     
     172"""         
     173         
     174""" 
     175parcours_recursif(l_Labels_root.Value(i+1),shape_tool,self._shapes_avec_nom[i].children) 
     176def parcours_recursif(label,shape_tool,arbre_shape,loc=None): 
     177 
     178    l_ComponentShapes = TDF_LabelSequence()  
     179     
     180    if(shape_tool.IsReference(label)):     
     181        lab=TDF_Label() 
     182        shape_tool.GetReferredShape(label,lab) 
     183        shape_tool.GetComponents(lab,l_ComponentShapes) 
     184        if not loc: 
     185            print "entra en loc para " , Nom_Label_Shape(label) 
     186            loc=shape_tool.GetLocation(label)   
     187        if(l_ComponentShapes.Length()>0):  
     188            for f in range(l_ComponentShapes.Length()): 
     189                arbre_shape.append(arbre_nom_shapes(Nom_Label_Shape(l_ComponentShapes.Value(f+1))))    
     190                parcours_recursif(l_ComponentShapes.Value(f+1),shape_tool,arbre_shape[f].children,loc) 
     191        else: 
     192            compShape=shape_tool.GetShape(label)  
     193            if loc: 
     194                compShape.Move(loc)         
     195            arbre_shape.append(compShape)         
     196    else: 
     197        shape_tool.GetComponents(label,l_ComponentShapes) 
     198        if(l_ComponentShapes.Length()>0):      
     199            for f in range(l_ComponentShapes.Length()):            
     200                arbre_shape.append(arbre_nom_shapes(Nom_Label_Shape(l_ComponentShapes.Value(f+1))))    
     201                parcours_recursif(l_ComponentShapes.Value(f+1),shape_tool,arbre_shape[f].children,loc)       
     202        else:  
    263203                 
    264                  
    265                 for y in range(sub_component_labels.Length()): 
    266                     Shape_componente=shape_tool.GetShape(sub_component_labels.Value(y+1)) 
    267                     lab=sub_component_labels.Value(y+1) 
    268                     entry = TCollection.TCollection_AsciiString() 
    269                     TDF_Tool.Entry(lab,entry) 
    270  
    271                     N = Handle_TDataStd_Name() 
    272                     lab.FindAttribute(TDataStd_Name_GetID(),N) 
    273  
    274                     n=N.GetObject() 
    275                     a=n.Get() 
    276                      
    277                     print 'Name of component ',a.PrintToString()   
    278                      
    279                 #for t in t.compounds(): 
    280                     #print "Tipo del atributo" ,  shape_tool.GetShape(sub_component_labels.Value(i+1)).ShapeType() 
    281                     if (Shape_componente.ShapeType()==TopAbs_COMPOUND or Shape_componente.ShapeType()==TopAbs_SOLID):                      
    282                         componente = Component_Step(a.PrintToString(),Shape_componente) 
    283                         self._components.append(componente)  #######AQUI#### 
    284                         t = Topo(Shape_componente) 
    285   
    286  
    287                         for t in t.solids(): 
    288                             self._shapes.append(t) 
    289  
    290          
    291         for i in range(Labels.Length()): 
    292          
    293          
    294  
    295             lab=Labels.Value(i+1) 
    296             entry = TCollection.TCollection_AsciiString() 
    297             TDF_Tool.Entry(lab,entry) 
    298  
    299             N = Handle_TDataStd_Name() 
    300             lab.FindAttribute(TDataStd_Name_GetID(),N) 
    301  
    302             n=N.GetObject() 
    303             a=n.Get() 
    304             print 'Name of root ',a.PrintToString() 
    305              
    306  
    307  
    308             #print "Is Assembly?",shape_tool.IsAssembly(Labels.Value(i+1)) 
    309              
    310             sub_shapes = shape_tool.GetSubShapes(Labels.Value(i+1),sub_shapes_labels) 
    311             sub_component = shape_tool.GetComponents(Labels.Value(i+1),sub_component_labels) 
    312  
    313             #print 'Number of subshapes  in the assemly :%i'%sub_shapes_labels.Length() 
    314             #print 'Number of components in the assemly :%i'%sub_component_labels.Length() 
    315  
    316            
    317            
    318            
    319         l_Colors.GetObject().GetColors(ColorLabels) 
    320         #print 'Number of colors=%i'%ColorLabels.Length() 
    321          
    322         #if(CL_Len>0): 
    323         #       ColorTool->GetColor(ColorLabels.Value(1),DefaultColor); 
    324          
    325         #for i in range(sub_component_labels.Length()): 
    326         """ 
    327         for i in range(Labels.Length()): 
    328  
    329             #print i 
    330             #aShape = shape_tool.GetShape(sub_omponent_labels.Value(i+1)) 
    331             aShape = shape_tool.GetShape(Labels.Value(i+1)) 
    332             #aShape = shape_tool.GetShapes(Labels.Value(i+1)) 
    333             m = l_Layers.GetObject().GetLayers(aShape) 
    334             #print c 
    335             #print "Lenght of popo :%i"%m.GetObject().Length() 
    336             #v = m.GetObject().Value(0)#Value() 
    337             #print v,v.Length() 
    338                     #for i in v.Length(): 
    339                     #    print chr(v.Value(i+1)) 
    340             #layer_labels = TDF_LabelSequence() 
    341             #popo = Handle_TColStd_HSequenceOfExtendedString() 
    342              
    343             #print 'Number of layers :%i'%layer_labels.Length() 
    344             #print aShape,aShape.ShapeType() 
    345             if aShape.ShapeType() == TopAbs_COMPOUND: 
    346                 t = Topo(aShape) 
    347  
    348                 #for t in t.compounds(): 
    349                 for t in t.solids(): 
    350                      
    351                     self._shapes.append(t) 
    352        
    353        
    354         """ 
    355         sub_sub_shapes_labels = TDF_LabelSequence() 
    356         sub_sub_component_labels = TDF_LabelSequence() 
    357         sub1 = TDF_LabelSequence() 
    358         sub2 = TDF_LabelSequence() 
    359          
    360         #print "Llega hasta aqui" 
    361         """ 
    362         for i in range(sub_component_labels.Length()): 
    363          
    364             lab=sub_component_labels.Value(i+1) 
    365             entry = TCollection.TCollection_AsciiString() 
    366             TDF_Tool.Entry(lab,entry) 
    367  
    368             N = Handle_TDataStd_Name() 
    369             lab.FindAttribute(TDataStd_Name_GetID(),N) 
    370  
    371             n=N.GetObject() 
    372             a=n.Get() 
    373             componente = Component_Step(a.PrintToString(),shape_tool.GetShape(sub_component_labels.Value(i+1))) 
    374             print 'Name of component ',a.PrintToString()   
    375              
    376              
    377             shape_tool.GetSubShapes(sub_component_labels.Value(i+1),sub_sub_shapes_labels) 
    378             shape_tool.GetComponents(sub_component_labels.Value(i+1),sub_sub_component_labels) 
    379  
    380             #print 'Number of subshapes  in the assemly :%i'%sub_sub_shapes_labels.Length() 
    381             #print 'Number of components in the assemly :%i'%sub_sub_component_labels.Length() 
    382       
    383             self._components.append(componente) 
    384         """ 
    385                
    386              
    387         return True 
    388          
    389          
    390          
    391 class STEP_NEW_Importer(object): 
    392     def __init__(self,filename=None):         
    393         self._shapes = [] 
    394         self._nbs = 0 
    395         self.set_filename(filename) 
    396  
    397     def get_nbr_shapes(self): 
    398         """ Return the number of shapes from the importer 
    399         """ 
    400         return self._nbs 
    401         
    402     def set_filename(self, filename): 
    403         if not os.path.isfile(filename): 
    404             print "STEPImporter initialization Error: file %s not found."%filename 
    405             self._filename = None 
    406         else: 
    407             self._filename = filename 
    408          
    409     def read_file(self): 
    410         """ 
    411         Read the STEP file and stores the result in a _shapes list 
    412         """ 
    413         "entro acocococococo" 
    414         if not self._filename: 
    415             print "ReadFile Error: first set the filename." 
    416             return False 
    417         aReader = STEPControl_Reader() 
    418         status = aReader.ReadFile(self._filename) 
    419         if status==IFSelect_RetDone: 
    420             failsonly = False 
    421             aReader.PrintCheckLoad(failsonly, IFSelect_ItemsByEntity) 
    422             nbr = aReader.NbRootsForTransfer() 
    423             print "%i root(s)"%nbr 
    424             aReader.PrintCheckTransfer(failsonly, IFSelect_ItemsByEntity) 
    425             for n in range(1,nbr+1): 
    426                 ok = aReader.TransferRoot(n) 
    427                 self._nbs = aReader.NbShapes() 
    428                 print "El numero de nbs es" , self._nbs 
    429                 if self._nbs == 0: 
    430                     print "At least one shape in STEP cannot be transfered" 
    431                 elif (nbr==1 and self._nbs==1): 
    432                     aResShape = aReader.Shape(1) 
    433                     if aResShape.IsNull(): 
    434                         print "At least one shape in STEP cannot be transferred" 
    435                     self._shapes.append(aResShape) 
    436                 else:                     
    437                     for i in range(1,self._nbs+1): 
    438                         aShape = aReader.Shape(i) 
    439                         if aShape.IsNull(): 
    440                             print "At least one shape in STEP cannot be transferred" 
    441                         else: 
    442                             self._shapes.append(aShape) 
    443                             #B.Add(compound,aShape) 
    444             return True 
    445         else: 
    446             print "Error: can't read file %s"%self._filename 
    447             return False 
    448         return False 
    449  
    450     def get_compound(self): 
    451         """ Create and returns a compound from the _shapes list 
    452         """ 
    453         # Create a compound 
    454         compound = TopoDS_Compound() 
    455         B = BRep_Builder() 
    456         B.MakeCompound(compound) 
    457         # Populate the compound 
    458         for shape in self._shapes: 
    459             B.Add(compound,shape) 
    460         return compound 
    461      
    462     def get_shapes(self): 
    463         return self._shapes         
    464          
    465 class Component_Step(): 
    466  
    467     def __init__(self,name_composant,aShape): 
    468         self._shapes = [] 
    469         self._name_composant = name_composant 
    470          
    471         #print "el tipo es :", aShape.ShapeType() 
    472         if aShape.ShapeType() == TopAbs_COMPOUND or aShape.ShapeType() == 2: 
    473                 t = Topo(aShape) 
    474   
    475                 #for t in t.compounds(): 
    476                 for t in t.solids(): 
    477                     #print "entra el guacamayo" 
    478                     self._shapes.append(t) 
    479  
    480  
    481  
     204            compShape=shape_tool.GetShape(label)  
     205            if loc: 
     206                print "y aqui no entra" 
     207                compShape.Move(loc)         
     208            arbre_shape.append(compShape)     
     209"""                
     210 
     211 
     212 
  • branches/3D/openPLM/document3D/aficher.py

    r592 r597  
    44from OCC.MSH.Mesh import QuickTriangleMesh 
    55from kjbuckets import kjGraph 
    6 #llevar el stp_to_jss a models  
    76# si sale mal de mes3js borrar el new_stp_js para que no se muestre    
    87 
    98 
    109 
    11      
     10        
    1211def convertir_STP_to_JSS(doc_file): 
    1312 
     
    2221 
    2322     
    24      
    25  
    26     my_shape = my_step_importer.get_shapes()   
    27  
    28  
     23    my_shape = my_step_importer.get_shapes_avec_nom() 
     24    
     25 
     26 
     27    ###     Remplir my_shape avec information sur vertex, faces et graph avec l' arbre de nom de parts, root avec nom de parts roots. 
    2928    graph=kjGraph() 
    3029    fileName, fileExtension = os.path.splitext(doc_file.filename) 
    31     return parcours_recursif(my_shape,fileName,doc_file,graph)     
    32      
    33       
    34      
    35     return True     
    36      
    37      
    38 def parcours_recursif(my_shape,fileName,doc_file,graph): 
    39       
     30    root=[] 
     31    part_numeration=[] 
     32    part_numeration.append(0) 
     33    ok=parcours_recursif(my_shape,fileName,doc_file,graph,part_numeration,root) 
     34    ### 
     35 
     36     
     37 
     38    new_stp_to_jss_navigabilite= stp_to_jss_navigabilite() 
     39    new_stp_to_jss_navigabilite.stp = doc_file 
     40    name = new_stp_to_jss_navigabilite.js.storage.get_available_name(fileName+".js") 
     41    path = os.path.join(new_stp_to_jss_navigabilite.js.storage.location, name) 
     42    new_stp_to_jss_navigabilite.js = name 
     43    new_stp_to_jss_navigabilite.save() 
     44     
     45    if ok: 
     46        try: 
     47            directory = os.path.dirname(path.encode())         
     48            if not os.path.exists(directory): 
     49                os.makedirs(directory) 
     50                 
     51               
     52            output = open(path.encode(),"w") 
     53             
     54             
     55            ######          Generate Menu javascript         
     56            output.write("function menu() {\nelement = document.createElement(\"div\");\nelement.id=\"root\";\nelement.innerHTML =\"")         
     57            generate_menu(graph,root,output)   
     58            output.write("\";\ndocument.getElementById('menu_').appendChild(element);\n}\n") 
     59            ######          End generate menu 
     60             
     61             
     62            #####           Generate objects javascript 
     63            generate_objects(graph,root,output) 
     64            #####           End generate objects 
     65             
     66                     
     67            #####           Generate functions javascript 
     68            generate_functions(graph,root,output) 
     69            #####           End generate functions 
     70             
     71             
     72 
     73                    
     74            output.close()  
     75             
     76        except IOError as (errno, strerror): 
     77            print "I/O error({0}): {1}".format(errno, strerror) 
     78            return False 
     79    return ok 
     80 
     81     
     82     
     83     
     84def generate_objects(graph,root,output,nom=''): 
     85 
     86    if not nom=='': #nom = '' only in first interaction 
     87        root=graph.neighbors(nom) 
     88 
     89 
     90    for i in range(len(root)): 
     91  
     92         
     93        feuille=graph.neighbors(root[i]) 
     94        if not len(feuille)==0:  
     95            part_name, part_id = os.path.splitext(root[i]) 
     96            part_id=part_id.replace(".","") 
     97            output.write("var part%s=new THREE.Object3D();\n"%part_id) 
     98            generate_objects(graph,'',output,root[i]) 
     99        else: 
     100            output.write("var object%s=new THREE.Mesh( new _%s(), new THREE.MeshNormalMaterial({opacity:0.5,shading:THREE.SmoothShading}) );\n"%(root[i],root[i]))   
     101             
     102def generate_functions(graph,root,output,nom=''): 
     103 
     104 
     105    if not nom=='': #nom = '' only in first interaction 
     106        root=graph.neighbors(nom) 
     107 
     108 
     109 
     110    for i in range(len(root)): 
     111  
     112         
     113        feuille=graph.neighbors(root[i]) 
     114        if not len(feuille)==0:  
     115            part_name, part_id = os.path.splitext(root[i]) 
     116            part_id=part_id.replace(".","") 
     117            output.write("function change_part%s(atribute) { \n"%part_id) 
     118            output.write("if (atribute==\"click\"){\n") 
     119            output.write("part%s.visible=!part%s.visible;\n"%(part_id,part_id)) 
     120            output.write("}\n") 
     121            output.write("else{\n") 
     122            output.write("part%s.visible=atribute;\n"%part_id) 
     123            output.write("}\n")   
     124            for t in range(len(feuille)): 
     125                feuille_2=graph.neighbors(feuille[t]) 
     126                 
     127                if not len(feuille_2)==0: 
     128                    part_name, part_id_2 = os.path.splitext(feuille[t]) 
     129                    part_id_2=part_id_2.replace(".","") 
     130                    output.write("change_part%s(part%s.visible);\n"%(part_id_2,part_id))     
     131                else:   
     132                    output.write("object%s.visible=part%s.visible;\n"%(feuille[t],part_id))  
     133       
     134  
     135             
     136 
     137            output.write("}\n") 
     138            generate_functions(graph,'',output,root[i]) 
     139 
     140 
     141 
     142     
     143def generate_menu(graph,root,output,nom=''): 
     144 
     145 
     146 
     147    output.write("<ul>")     
     148     
     149    if not nom=='': #nom = '' only in first interaction 
     150        root=graph.neighbors(nom) 
     151 
     152    for i in range(len(root)): 
     153  
     154        feuille=graph.neighbors(root[i]) 
     155        if not len(feuille)==0:  
     156            part_name, part_extension = os.path.splitext(root[i]) 
     157            part_id=part_extension.replace(".","") 
     158            functio_onclick="change_part"+part_id+"(\\\"click\\\")" 
     159            output.write("<li > <a href='#' onClick='%s'><b onClick='%s'></b>%s </a>"%(functio_onclick,functio_onclick,part_name))            
     160            generate_menu(graph,'',output,root[i])        
     161            output.write("</li>") 
     162 
     163    
     164    output.write("</ul>") 
     165 
     166  
     167   
     168#el grafo para las partes tiene el nombre .id correlativa, para las hojas es directamente un ID             
     169def parcours_recursif(my_shape,fileName,doc_file,graph,part_numeration,root,old_name=''): 
     170     
    40171    for i in range(len(my_shape)): 
    41       
    42         if  len(my_shape[i])==1: 
    43             my_mesh = mesh_shape(my_shape[i][0]) 
     172   
     173         
     174         
     175        if  isinstance(my_shape[i],arbre_nom_shapes): 
     176            nom=my_shape[i].nom 
     177            nom=nom+"."+str(part_numeration[0]) 
     178            part_numeration[0]=part_numeration[0]+1 
     179            if not old_name == '': 
     180                graph.add(old_name,nom) 
     181            else:  #nom=root 
     182                root.append(nom)   
     183            parcours_recursif(my_shape[i].children,fileName,doc_file,graph,part_numeration,root,nom) 
     184             
     185             
     186 
     187        else: 
    44188            new_stp_jss= stp_to_jss() 
    45189            new_stp_jss.stp = doc_file 
    46190            new_stp_jss.save() 
     191            my_mesh = mesh_shape(my_shape[i]) 
    47192            name = new_stp_jss.js.storage.get_available_name(fileName+".js") 
    48193            path = os.path.join(new_stp_jss.js.storage.location, name) 
     
    52197                #exception 
    53198            else: 
    54  
     199                graph.add(old_name,new_stp_jss.id) 
    55200                new_stp_jss.js = name 
    56201                new_stp_jss.save() 
    57  
    58         else: 
    59             return parcours_recursif(my_shape[i],fileName,doc_file,graph) 
    60              
    61     return True     
    62     """ 
    63     for i in range(len(my_shape)): 
    64          
    65         for t in range(len(my_shape[i])): 
    66             print "estoy aqui adentro" 
    67         #print "aqui tambien con nombre ",my_shape[i]       
    68             my_mesh = mesh_shape(my_shape[i][t]) 
    69             #mesh_to_3js(my_mesh,output,aux,aux2) 
    70             fileName, fileExtension = os.path.splitext(doc_file.filename) 
    71             new_stp_jss= stp_to_jss() 
    72             new_stp_jss.stp = doc_file 
    73             new_stp_jss.save() 
    74             name = new_stp_jss.js.storage.get_available_name(fileName+".js") 
    75             path = os.path.join(new_stp_jss.js.storage.location, name) 
    76             ### 
    77             if(not mesh_to_3js(my_mesh,path.encode(),"_"+str(new_stp_jss.id))): 
    78                 print "se borro el fichero" 
    79                 new_stp_jss.delete()     
    80             ### 
    81             else: 
    82                 print "entra" 
    83                 new_stp_jss.js = name 
    84                 new_stp_jss.save() 
    85     """ 
     202             
     203             
     204    return True          
    86205 
    87206 
     
    120239    THREE.Geometry.call( this ); 
    121240        """%name) 
    122  
    123241        # export vertices 
    124242        for vertex in mesh.get_vertices(): 
     
    157275        print "I/O error({0}): {1}".format(errno, strerror) 
    158276        return False 
     277         
     278         
     279 
     280     
     281""" 
     282def parcours_recursif2(my_shape,fileName,doc_file,graph,root,part_numeration,old_name=''): 
     283     
     284    for i in range(len(my_shape)): 
     285        nom=my_shape[i].nom 
     286        new_stp_jss= stp_to_jss() 
     287        new_stp_jss.stp = doc_file 
     288        new_stp_jss.save() 
     289        nom=nom+"."+str(part_numeration+i) 
     290        if not old_name == '': 
     291            graph.add(old_name,nom) 
     292        else:  #nom=root 
     293            root.append(nom)     
     294        if  len(my_shape[i].children)==1: 
     295            my_mesh = mesh_shape(my_shape[i].children[0]) 
     296 
     297 
     298            name = new_stp_jss.js.storage.get_available_name(fileName+".js") 
     299            path = os.path.join(new_stp_jss.js.storage.location, name) 
     300            if(not mesh_to_3js(my_mesh,path.encode(),"_"+str(new_stp_jss.id))): 
     301                new_stp_jss.delete() 
     302 
     303                return False     
     304                #exception 
     305            else: 
     306                graph.add(nom,new_stp_jss.id) 
     307                new_stp_jss.js = name 
     308                new_stp_jss.save() 
     309 
     310        else: 
     311 
     312            new_stp_jss.delete()#j avais besoin de generer pour obtenir une id 
     313            return parcours_recursif2(my_shape[i].children,fileName,doc_file,graph,root,(part_numeration+len(my_shape)),nom) 
     314             
     315    return True  
     316""" 
     317     
     318 
     319     
     320     
     321     
     322     
  • branches/3D/openPLM/document3D/forms.py

    r592 r597  
    44class Form3D(forms.ModelForm): 
    55 
    6     #GENDER_CHOICES = (('M', 'Male'),('F', 'Female'),) 
    7     #Display = forms.ChoiceField(choices=GENDER_CHOICES) 
     6 
    87    Display = forms.ModelChoiceField(queryset=stp_to_jss.objects.none(), empty_label=None) 
    98    Display.widget.attrs["onchange"]="this.form.submit()" 
    109     
    1110    class Meta: 
    12         #model = stp_to_jss 
     11 
    1312        model = DocumentFile 
    14         #exclude = ('js','stp') 
    1513        exclude = ('filename', 'file' , 'size' ,'thumbnail' ,'locked' ,'locker' ,'document' ,) 
    1614 
     
    3634            self.fields["Display"].initial = a[0] 
    3735         
    38         #self.fields["Display2"].initial=a[0] 
    3936 
    40         """for row in queryset: 
    41             a = models3d.stp_to_jss.objects.filter(stp=row) 
    42             print a[0].stp.filename 
    43             self.fields['Display'].choices = self.fields['Display'].choices + (1,1) 
    44         """ 
    45         #for row in stps 
    46         """ 
    47         super(SponsorForm, self).__init__(*args, **kwargs) 
    48         if "sponsor" in self.data: 
    49             sponsor = int(self.data["sponsor"]) 
    50         if sponsor is not None: 
    51             qset = m.GroupInfo.objects.filter(owner__id=sponsor) 
    52             self.fields["groups"].queryset = qset 
    53         self.fields["groups"].help_text = _("The new user will belong to the selected groups")  
    54         for key, field in self.fields.iteritems(): 
    55             if key != "warned": 
    56                 field.required = True 
    57         self.queryset = Author.objects.filter(name__startswith='O') 
    58         """ 
    5937    
  • branches/3D/openPLM/document3D/models.py

    r592 r597  
    2727 
    2828media3Djs = DocumentStorage(location=settings.MEDIA_ROOT+"3D/")     
     29media3Djs_navigabilite = DocumentStorage(location=settings.MEDIA_ROOT+"3D/navigabilite") 
    2930 
     31 
     32class stp_to_jss_navigabilite(models.Model): 
     33 
     34    js = models.FileField(upload_to='.',storage=media3Djs_navigabilite) 
     35    stp = models.ForeignKey(DocumentFile)  
     36     
     37          
    3038class stp_to_jss(models.Model): 
    3139 
     
    3341    stp = models.ForeignKey(DocumentFile)     
    3442 
    35      
     43class arbre_nom_shapes(): 
     44    nom='' 
     45    children=[] 
     46    def __init__(self, nom): 
     47        self.nom = nom 
     48        self.children=[] 
    3649     
    3750#restricciones fichero:si no se genera el jss , o si el jss generado es demasiado grande 
     
    4053    def handle_added_file(self, doc_file): 
    4154        from openPLM.document3D.aficher import convertir_STP_to_JSS 
    42      
     55         
    4356        fileName, fileExtension = os.path.splitext(doc_file.filename) 
    4457        if fileExtension.upper()== '.STP':  
    45             res=stp_to_jss.objects.filter() 
    4658             
    4759             
    48              
     60 
    4961            #delete old jss file (only neccesary in case of check-in -> handle) 
    5062            multi_jss=stp_to_jss.objects.filter(stp=doc_file) 
     
    5264            for i in range(count):   
    5365                os.remove(settings.MEDIA_ROOT+"3D/"+multi_jss[count-i-1].js.name) 
    54                 print "Deleting .jss associes :" , (settings.MEDIA_ROOT+"3D/"+multi_jss[count-i-1].js.name) 
     66                print "Deleting .jss associes:" , (settings.MEDIA_ROOT+"3D/"+multi_jss[count-i-1].js.name) 
    5567                multi_jss[count-i-1].delete() 
    5668 
     69            #delete old jss_navigabilite file 
     70            multi_jss=stp_to_jss_navigabilite.objects.filter(stp=doc_file) 
     71            count=multi_jss.count() 
     72            for i in range(count):   
     73                os.remove(settings.MEDIA_ROOT+"3D/navigabilite/"+multi_jss[count-i-1].js.name) 
     74                print "Deleting navigabilite .jss associe:" , (settings.MEDIA_ROOT+"3D/navigabilite/"+multi_jss[count-i-1].js.name) 
     75                multi_jss[count-i-1].delete() 
    5776            # end delteting 
    5877             
     
    6988         
    7089            multi_jss=stp_to_jss.objects.filter(stp=doc_file) 
    71  
    7290            count=multi_jss.count() 
    7391            for i in range(count): 
    74                 print "el nombre es : " ,  multi_jss[count-i-1].js.name 
    7592                os.remove(settings.MEDIA_ROOT+"3D/"+multi_jss[count-i-1].js.name) 
    7693                print "Deleting .jss associes :" , (settings.MEDIA_ROOT+"3D/"+multi_jss[count-i-1].js.name) 
     94                multi_jss[count-i-1].delete() 
     95                 
     96            multi_jss=stp_to_jss_navigabilite.objects.filter(stp=doc_file) 
     97            count=multi_jss.count() 
     98            for i in range(count): 
     99                os.remove(settings.MEDIA_ROOT+"3D/navigabilite/"+multi_jss[count-i-1].js.name) 
     100                print "Deleting .jss associes :" , (settings.MEDIA_ROOT+"3D/navigabilite/"+multi_jss[count-i-1].js.name) 
    77101                multi_jss[count-i-1].delete() 
    78102 
  • branches/3D/openPLM/document3D/templates/Display3D.htm

    r592 r597  
    1010 
    1111<style> 
    12     .trans{ 
     12 
     13.ajustar { 
     14clear: both; 
     15} 
     16.menu { 
     17        margin: 10px; 
     18        height: 100px; 
     19        font-size: 9pt; 
     20        font-family: roman; 
     21} 
     22.menu ul { 
     23 
     24        margin: 0pt; 
     25        padding: 0pt; 
     26        position: relative; 
     27        z-index: 500; 
     28        list-style-type: none; 
     29        width: 11em; 
     30 
     31} 
     32.menu li { 
     33 
     34        background-color: #cccc99; 
     35        float: left; 
     36} 
     37.menu li.sub { 
     38        background-color: #cccc99; 
     39} 
     40 
     41.menu a, .menu a:visited { 
     42        border: 1px solid #ffffff; 
     43        overflow: hidden; 
     44        text-overflow: ellipsis; 
     45        display: block; 
     46        text-decoration: none; 
     47        height: 2em; 
     48        line-height: 2em; 
     49        width: 11em; 
     50        color: #000000; 
     51        padding-left: 1em; 
     52        font-weight: normal; 
     53        font-style: normal; 
     54        font-variant: normal; 
     55        text-transform: none; 
     56} 
     57.menu b { 
     58        float: right; 
     59        margin-right: 5px; 
     60} 
     61* html .menu a, * html .menu a:visited { 
     62        width: 11em; 
     63} 
     64* html .menu a:hover { 
     65        color: #ccff66; 
     66        background-color: #999966; 
     67        position: relative; 
     68        font-weight: normal; 
     69        font-style: normal; 
     70        font-variant: normal; 
     71        text-decoration: none; 
     72        text-transform: none; 
     73} 
     74.menu li:hover { 
     75        position: relative; 
     76} 
     77.menu a:active, .menu a:focus { 
     78        color: #ccff66; 
     79        background-color: #999966; 
     80        font-weight: normal; 
     81        font-style: normal; 
     82        font-variant: normal; 
     83        text-decoration: none; 
     84        text-transform: none; 
     85} 
     86.menu li:hover > a { 
     87        color: #ccff66; 
     88        background-color: #999966; 
     89        font-weight: normal; 
     90        font-style: normal; 
     91        font-variant: normal; 
     92        text-decoration: none; 
     93        text-transform: none; 
     94} 
     95.menu li ul { 
     96        padding: 2em; 
     97        visibility: hidden; 
     98        position: absolute; 
     99        top: -2em; 
     100        left: 7em; 
     101        background-color: transparent; 
     102} 
     103.menu li:hover > ul { 
     104        visibility: visible; 
     105} 
     106.menu ul a:hover ul ul { 
     107        visibility: hidden; 
     108} 
     109.menu ul a:hover ul a:hover ul ul { 
     110        visibility: hidden; 
     111} 
     112.menu ul a:hover ul a:hover ul a:hover ul ul { 
     113        visibility: hidden; 
     114} 
     115.menu ul a:hover ul { 
     116        visibility: visible; 
     117} 
     118.menu ul a:hover ul a:hover ul { 
     119        visibility: visible; 
     120} 
     121.menu ul a:hover ul a:hover ul a:hover ul { 
     122        visibility: visible; 
     123} 
     124.menu ul a:hover ul a:hover ul a:hover ul a:hover ul { 
     125        visibility: visible; 
     126} 
     127.trans{ 
    13128     
    14129       
     
    19134       
    20135    } 
    21     .fond{ 
     136    . 
     137    fond{ 
    22138       
    23139      position:relative; 
     
    31147        <div class="trans" > 
    32148                    <form method="post" action="" id="from_stp_form"> 
    33                   
    34   
    35                         {% for form in select_stp_form %} 
     149                    {% for form in select_stp_form %} 
     150                        <ul><li>{{ form }}</li></ul> 
     151                    {% endfor %} 
     152                    </form> 
    36153   
    37                         <ul> 
    38                         <li>{{ form }}</li>  
    39                         </ul> 
     154                    <div class="menu" id="menu_">   </div> 
     155        </div>  
     156    
     157            
    40158                         
    41                          
    42                         <div id=button_affichage ><input  type="button" value="A" onmouseover="afficher()" onmouseout="masquer()" > 
    43                         <li id="caca"style="DISPLAY:none">  
    44                          
    45                         
    46                          
    47                          
    48                          
    49                         {% for item in multi_image3D %} 
    50  
    51                         <input type="checkbox" id="{{item.id}}"> 
    52 <a href="" onClick="changeBox{{item.id}}('document.getElementById({{item.id}})');return false">{{item.stp.filename}}</a> 
    53  
    54                         {% endfor %} 
    55  
    56                          
    57                          
    58                          
    59                          
    60                         </li></div>  
    61                         {% endfor %} 
    62                          
    63                                                  
    64  
    65  
    66                        
    67     
    68                          
    69  
    70             </form> 
    71       </div>    
    72      
    73     <div class="fond" id="container"></div> 
     159        <div class="fond" id="container"> 
     160         
     161        <div id="webgl_warning" class="main" style="display:none;"> 
     162    <div class="warning_container"> 
     163      <div class="warning"> 
     164 
     165        <p><strong>WARNING:</strong> Your browser does not support <a target="_top" href="http://www.khronos.org/webgl/wiki/Main_Page">WebGL</a>. Thingiview works best with WebGL support, which is available in the following browsers:</p> 
     166        <ul> 
     167          <li><a target="_top" href="http://www.google.com/chrome">Google Chrome 9+</a> (Recommended)</li> 
     168          <li><a target="_top" href="http://www.khronos.org/webgl/wiki/Getting_a_WebGL_Implementation">Firefox 4.0+</a></li> 
     169 
     170          <li><a target="_top" href="http://www.khronos.org/webgl/wiki/Getting_a_WebGL_Implementation">Safari Nightly (OS X 10.6+ only)</a></li> 
     171        </ul> 
     172        <p>Or, you can <a href="javascript: show_thingiview();">try Thingiview at your own risk</a>. It may lock up your computer!</p> 
     173      </div> 
     174    </div> 
     175  </div> 
     176   
     177  </div> 
    74178 
    75179 
     
    84188                <script> 
    85189 
    86                         {% for item in multi_image3D %} 
    87  
    88                         function changeBox{{item.id}}(cbox) { 
    89                         box = eval(cbox); 
    90                         box.checked = !box.checked; 
    91                         object_{{item.id}}.visible=!object_{{item.id}}.visible; 
    92                         }        
    93  
    94                         {% endfor %} 
    95                 // 
    96  
    97                                 //onmouseover="over()" onmouseout="out()" 
    98 /*$("#button_affichage").hoverIntent({ 
    99         over: afficher, 
    100         timeout: 100, 
    101         interval: 100, 
    102         out: masquer 
    103     });*/ 
     190 
     191 
    104192                 
    105193                 
     
    117205    //ver si se muestra tmb en la franja superior 
    118206    //si estoy en 3D y pulso 3D , lo que hago es llevar el objeto a su posicion inicial 
    119          
    120          
     207    //posibilidad partes sin nombre nom='' 
     208     
     209     
     210    // y si tengo al mismo tiempo para una parte shapes simples y conjuntos con sus propios shapes, es decir tendria un hijo shape y otro hijo que seria una parte 
     211    // tiene que estar antes el items aue el lacaca.js    * 
     212    // si changepart(atrib)  atrib = ''cambia el estado, sino pone cada parte el valor pasado como atributo 
     213          
    121214 
    122215        </script> 
     
    129222         
    130223                <script type="text/javascript" src="/media/js/Three.js"></script>  
    131                  
    132224                {% for item in multi_image3D %} 
    133225                <script type="text/javascript" src="/media/3D/{{ item.js.name}}"></script> 
    134226                {% endfor %} 
     227                <script type="text/javascript" src="/media/3D/navigabilite/{{menu_navigabilite}}"></script>  
     228 
    135229  
    136230 
     
    141235                    var container; 
    142236                    var main_content; 
    143                         var targetRotation = 0; 
    144                         var targetRotationOnMouseDown = 0; 
    145                         var targetRotationY = 0; 
    146                         var targetRotationYOnMouseDown = 0; 
    147                         var mouseX = 0; 
    148                         var mouseXOnMouseDown = 0; 
    149                         var mouseY = 0; 
    150                         var mouseYOnMouseDown = 0; 
     237                     
     238                     
     239                        var targetRotation = 0; 
     240                        var targetRotationOnMouseDown = 0; 
     241                        var targetRotationY = 0; 
     242                        var targetRotationYOnMouseDown = 0; 
     243                        var mouseX = 0; 
     244                        var mouseXOnMouseDown = 0; 
     245                        var mouseY = 0; 
     246                        var mouseYOnMouseDown = 0; 
     247 
     248             
     249            var width ; 
     250            var height ; 
     251            var deep ; 
     252 
     253 
    151254                        var windowHalfX = window.innerWidth / 2; 
    152255                        var windowHalfY = window.innerHeight / 2; 
    153                         {% for item in multi_image3D %} 
    154                     var object_{{item.id}}; 
    155                     {% endfor %} 
    156                          
    157  
     256 
     257                 
     258 
     259             
     260                        var targetXRotation             = 0; 
     261            var targetXRotationOnMouseDown  = 0; 
     262            var mouseX                      = 0; 
     263            var mouseXOnMouseDown           = 0; 
     264            var targetYRotation             = 0; 
     265            var targetYRotationOnMouseDown  = 0; 
     266 
     267 
     268            var mouseDown                  = false; 
     269            var mouseOver                  = false; 
     270         
     271                         
     272                         
    158273                        $(document.getElementById( 'container' )).ready(init); 
    159274                         
    160                 function getPos(el) { 
    161             for (var lx=0, ly=0; 
    162             el != null; 
    163             lx += el.offsetLeft, ly += el.offsetTop, el = el.offsetParent); 
    164             return {x: lx,y: ly}; 
    165             } 
    166              
     275                         
     276 
    167277                        function init() { 
    168             //main_box 
     278                         
     279                         
     280                         
     281                            if (!has_webgl()){ 
     282 
     283                document.getElementById("webgl_warning").style.display = 'block';  
     284 
     285                } 
     286  
     287 
     288 
     289                         
     290                         
     291                         
     292 
    169293                                main_content = document.getElementById('main_content'); 
    170294                                container=document.getElementById('container'); 
    171                                 //camera = new THREE.OrthographicCamera( container.innerWidth/-2, container.innerWidth/2, 
    172                                 //container.innerHeight/2,container.innerHeight/-2,1,10000 ); 
    173  
    174                 //pos_container=getPos("main_content"); 
    175                 //alert("Alto de la otra : "+$(main_content).height()+" Alto de la division "+main_content.offsetHeight+"Ancho de la division "+main_content.offsetWidth+"\n"); 
    176                  
    177                 //camera = new THREE.OrthographicCamera(1000,1000, 1000, 1000, 1, 8000 ) 
    178                 //OrthographicCamera 
    179                  
    180                                 //camera = new THREE.PerspectiveCamera( 50, main_content.offsetWidth / main_content.offsetHeight, 1, 20000 ); 
    181                                 camera = new THREE.PerspectiveCamera( 50, $(main_content).width() / $(main_content).height(), 1, 20000 ); 
     295 
    182296                                 
    183                                  
    184  
    185297                                scene = new THREE.Scene(); 
    186  
    187                                 /* 
    188                                 var from_stp_form=document.getElementById("from_stp_form"); 
    189                                  var tables=from_stp_form.getElementsByTagName("option"); 
    190                                  input=document.createElement('input'); 
    191                                  txt=document.createTextNode('this is d3'); 
    192                                  input.appendChild(txt); 
    193                  tables[0].appendChild(input); 
    194                  */ 
    195                                   
    196                  //alert("Il y a "+tables.length+" tableaux HTML dans cette page"); 
    197                  
    198                                 object3D = new THREE.Object3D(); 
    199                                 //object3D = new THREE.Mesh(); 
    200                                 object3D.overdraw = true; 
     298                object3D = new THREE.Object3D(); 
     299 
     300                                //object3D.overdraw = true; 
    201301 
    202302                                 
     
    205305                                scene.add( light1 ); 
    206306                                scene.add( object3D); 
    207          
    208                                 // 
    209                                 /*object = new THREE.Mesh( new Shape(), new THREE.MeshNormalMaterial({opacity:1,shading:THREE.SmoothShading}) ); 
    210                                 object.overdraw = true; 
    211                                 object.scale.x = object.scale.y = object.scale.z = 10.; 
    212                                 object.position.y -= 200.; 
    213                                 */ 
     307                                 
     308                                 
     309                                    
    214310                                {% for item in multi_image3D %} 
    215                 object_{{item.id}} = new THREE.Mesh( new _{{item.id}}(), new THREE.MeshNormalMaterial({opacity:0.5,shading:THREE.SmoothShading}) ); 
    216                 object_{{item.id}}.overdraw = true; 
    217                 //object_{{item.id}}.position.x = 0; 
    218                 //object_{{item.id}}.position.y = 0; 
    219                 //object_{{item.id}}.position.z = 0; 
    220                 //object_{{item.id}}.scale.x = object_{{item.id}}.scale.y = object_{{item.id}}.scale.z = 1; 
    221                 object3D.add(object_{{item.id}}); 
     311                object{{item.id}}.overdraw = true; 
     312                object3D.add(object{{item.id}}); 
    222313                {% endfor %} 
    223  
    224314                 
    225                 //object3D.position.x=0; 
    226                                 //object3D.position.y=0; 
    227                                 //object3D.position.z=0; 
    228                                 //object3D.add(object) 
    229                                 //object3D.add(object) 
    230                          
    231                             //centrer l'object 
     315 
    232316                            centrer_objet(object3D); 
     317                camera = new THREE.PerspectiveCamera( 50, $(main_content).width() / $(main_content).height(), 1, deep*8 ); 
     318                camera.position.z = deep*4; 
    233319                 
    234                          
    235                          
    236  
    237  
    238  
    239                                 //renderer = new THREE.CanvasRenderer(); 
    240320                                renderer = new THREE.WebGLRenderer(); 
    241321                                renderer.setSize( $(main_content).width(), $(main_content).height() ); 
    242                                 //alert(main_content.innerWidth+ " " + main_content.innerHeight); 
    243                                 //renderer.setSize( main_content.offsetWidth, main_content.offsetHeight); 
    244                                  
    245                                 //main_content.appendChild( renderer.domElement ); 
     322 
    246323                                container.appendChild( renderer.domElement ); 
    247                                 container.addEventListener( 'mousedown', onDocumentMouseDown, false ); 
     324                                //container.addEventListener( 'mousedown', onDocumentMouseDown, false ); 
     325   
     326                container.addEventListener( 'mousedown', onDocumentMouseDown, false ); 
     327                container.addEventListener('DOMMouseScroll', wheel, false); 
     328 
     329                    //renderer.domElement.addEventListener('touchstart',     onRendererTouchStart,    false); 
     330                    //renderer.domElement.addEventListener('touchend',       onRendererTouchEnd,      false); 
     331                    //renderer.domElement.addEventListener('touchmove',      onRendererTouchMove,     false); 
     332 
     333                //renderer.domElement.addEventListener('DOMMouseScroll', onRendererScroll,        false); 
     334                    //renderer.domElement.addEventListener('mousewheel',     onRendererScroll,        false); 
     335                    //renderer.domElement.addEventListener('gesturechange',  onRendererGestureChange, false); 
    248336                container.focus()  
    249337                setInterval( loop, 1000 / 60 ); 
     338                 
     339                menu(); 
    250340 
    251341                        } 
    252342 
    253  
     343            function has_webgl(){ 
     344            return !!window.WebGLRenderingContext; 
     345            } 
    254346                         
    255347                        function centrer_objet(object3D_){               
    256                         boundingBox=computeGroupBoundingBox(object3D_);                          
    257             //var width =Math.abs(boundingBox.x[ 1 ]-boundingBox.x[ 0 ]); 
    258             //var height =Math.abs(boundingBox.y[ 1 ]-boundingBox.y[ 0 ]); 
    259             var deep =Math.abs(boundingBox.z[ 1 ]-boundingBox.z[ 0 ]); 
    260              
    261             camera.position.z = deep*4; 
    262             object3D_.position.x-=(boundingBox.x[ 1 ]+boundingBox.x[ 0 ])/2; 
    263             object3D_.position.y-=(boundingBox.y[ 1 ]+boundingBox.y[ 0 ])/2;   
    264                         object3D_.position.z-=(boundingBox.z[ 1 ]+boundingBox.z[ 0 ])/2;     
     348                        boundingBox=computeGroupBoundingBox(object3D_);                                  
     349            width =Math.abs(boundingBox.x[ 1 ]-boundingBox.x[ 0 ]); 
     350            height =Math.abs(boundingBox.y[ 1 ]-boundingBox.y[ 0 ]); 
     351            deep =Math.abs(boundingBox.z[ 1 ]-boundingBox.z[ 0 ]); 
     352  
     353             
     354            object3D_.position.x=-(boundingBox.x[ 1 ]+boundingBox.x[ 0 ])/2; 
     355            object3D_.position.y=-(boundingBox.y[ 1 ]+boundingBox.y[ 0 ])/2;   
     356                        object3D_.position.z=-(boundingBox.z[ 1 ]+boundingBox.z[ 0 ])/2;     
    265357 
    266358            } 
    267359             
    268              
    269                         function onDocumentMouseDown( event ) { 
    270  
    271  
    272                                                         event.preventDefault(); 
    273  
    274                                                         document.addEventListener( 'mousemove', onDocumentMouseMove, false ); 
    275                                                         document.addEventListener( 'mouseup', onDocumentMouseUp, false ); 
    276                                                         document.addEventListener( 'mouseout', onDocumentMouseOut, false ); 
    277  
    278                                                         mouseXOnMouseDown = event.clientX - windowHalfX; 
    279                                                         mouseYOnMouseDown = event.clientY - windowHalfY; 
    280                                                         targetRotationOnMouseDown = targetRotation; 
    281                                                 } 
    282  
    283                                                 function onDocumentMouseMove( event ) { 
    284  
    285                                                         mouseX = event.clientX - windowHalfX; 
    286                                                         mouseY = event.clientY - windowHalfY; 
    287                                                         targetRotation = targetRotationOnMouseDown + ( mouseX - mouseXOnMouseDown ) * 0.02; 
    288                                                         targetRotationY = targetRotationYOnMouseDown + ( mouseY - mouseYOnMouseDown ) * 0.02; 
    289                                                 } 
    290  
    291                                                 function onDocumentMouseUp( event ) { 
    292  
    293                                                         document.removeEventListener( 'mousemove', onDocumentMouseMove, false ); 
    294                                                         document.removeEventListener( 'mouseup', onDocumentMouseUp, false ); 
    295                                                         document.removeEventListener( 'mouseout', onDocumentMouseOut, false ); 
    296                                                 } 
    297  
    298                                                 function onDocumentMouseOut( event ) { 
    299  
    300                                                         document.removeEventListener( 'mousemove', onDocumentMouseMove, false ); 
    301                                                         document.removeEventListener( 'mouseup', onDocumentMouseUp, false ); 
    302                                                         document.removeEventListener( 'mouseout', onDocumentMouseOut, false ); 
    303                                                 } 
    304  
    305                         function loop() { 
    306  
    307                                 var time = new Date().getTime() * 0.0005; 
    308  
    309                                 //scene.rotation.x -= 0.1; 
    310                                 //scene.rotation.y -= 0.1; 
    311                 //object3D.scale.x = object3D.scale.y = object3D.scale.z = object3D.scale.z*1.01; 
    312                                 //scene.rotation.y += ( targetRotation - scene.rotation.y ) * 0.02; 
    313                                 //scene.rotation.x += ( targetRotationY - scene.rotation.x ) * 0.02; 
    314  
    315                 object3D.rotation.x += ( targetRotation - object3D.rotation.y ) * 0.02; 
    316                 object3D.rotation.y -= ( targetRotationY - object3D.rotation.x ) * 0.02; 
    317                 //object3D.position.y+=10; 
    318                 //alert(container.offsetWidth+ " "+ container.offsetHeight); 
    319                                 //renderer.setSize( container.innerWidth, container.innerHeight );                               
    320                                 renderer.render(scene, camera); 
    321  
    322                         } 
    323  
    324  
    325 function computeGroupBoundingBox(Object_Group) { 
    326  
    327  
    328     
    329    if(Object_Group.children.length >  0 ){ 
    330     
    331     
    332         Object_Group.children[ 0 ].geometry.computeBoundingBox(); 
    333         var boundingBox = {  
    334         'x': [ Object_Group.children[ 0 ].geometry.boundingBox.x[ 0 ], Object_Group.children[ 0 ].geometry.boundingBox.x[ 1 ] ], 
    335         'y': [ Object_Group.children[ 0 ].geometry.boundingBox.y[ 0 ], Object_Group.children[ 0 ].geometry.boundingBox.y[ 1 ] ], 
    336         'z': [ Object_Group.children[ 0 ].geometry.boundingBox.z[ 0 ], Object_Group.children[ 0 ].geometry.boundingBox.z[ 1 ] ]};   
    337          
    338  
    339          
    340        
    341         for ( var v = 1 ;v  < Object_Group.children.length; v ++ ) { 
    342  
    343         Object_Group.children[ v ].geometry.computeBoundingBox(); 
    344          
    345  
    346         if ( Object_Group.children[ v ].geometry.boundingBox.x[ 0 ] < boundingBox.x[ 0 ] ) { 
    347  
    348         boundingBox.x[ 0 ] = Object_Group.children[ v ].geometry.boundingBox.x[ 0 ]; 
    349         } 
    350         if ( Object_Group.children[ v ].geometry.boundingBox.x[ 1 ] > boundingBox.x[ 1 ] ) { 
    351  
    352         boundingBox.x[ 1 ] = Object_Group.children[ v ].geometry.boundingBox.x[ 1 ]; 
    353  
    354         } 
    355          
    356         if ( Object_Group.children[ v ].geometry.boundingBox.y[ 0 ] < boundingBox.y[ 0 ] ) { 
    357  
    358         boundingBox.y[ 0 ] = Object_Group.children[ v ].geometry.boundingBox.y[ 0 ]; 
    359         } 
    360         if ( Object_Group.children[ v ].geometry.boundingBox.y[ 1 ] > boundingBox.y[ 1 ] ) { 
    361  
    362         boundingBox.y[ 1 ] = Object_Group.children[ v ].geometry.boundingBox.y[ 1 ]; 
    363  
    364         } 
    365          
    366         if ( Object_Group.children[ v ].geometry.boundingBox.z[ 0 ] < boundingBox.z[ 0 ] ) { 
    367  
    368         boundingBox.z[ 0 ] = Object_Group.children[ v ].geometry.boundingBox.z[ 0 ]; 
    369         } 
    370         if ( Object_Group.children[ v ].geometry.boundingBox.z[ 1 ] > boundingBox.z[ 1 ] ) { 
    371  
    372         boundingBox.z[ 1 ] = Object_Group.children[ v ].geometry.boundingBox.z[ 1 ]; 
    373  
    374         } 
    375          
    376         } 
    377  
    378     
    379    } 
    380    return boundingBox; 
    381    } 
    382  
    383  
    384  
    385  
    386  
    387  
    388  
    389  
    390  
    391     
    392  
    393          
    394                 /* 
    395                     var camera, scene, renderer, object; 
    396                         var targetRotation = 0; 
    397                         var targetRotationOnMouseDown = 0; 
    398                         var targetRotationY = 0; 
    399                         var targetRotationYOnMouseDown = 0; 
    400                         var mouseX = 0; 
    401                         var mouseXOnMouseDown = 0; 
    402                         var mouseY = 0; 
    403                         var mouseYOnMouseDown = 0; 
    404                         var windowHalfX = window.innerWidth / 2; 
    405                         var windowHalfY = window.innerHeight / 2; 
    406             var largDiv = 0; 
    407             var hautDiv = 0; 
    408                     var container ; 
    409                     var pos_container ; 
    410                     var main_box ; 
    411                     var pos_main_box; 
    412                     //shapes of object 
    413             {% for item in multi_image3D %} 
    414                     var object_{{item.id}}; 
    415                     {% endfor %} 
    416                         var bbox; //pour encadrer un object dans une boit 
    417                          
    418                         $(document.getElementById( 'container' )).ready(init); 
    419                         init(); 
    420                         setInterval( loop, 1000 / 60 ); 
    421                          
    422                          
    423  
    424             function getPos(el) { 
    425         for (var lx=0, ly=0; 
    426          el != null; 
    427          lx += el.offsetLeft, ly += el.offsetTop, el = el.offsetParent); 
    428         return {x: lx,y: ly}; 
    429         } 
    430          
    431  
    432          
    433  
    434                         function init() { 
    435  
    436                                  
    437  
    438  
    439                  
    440                                 //main_box = document.getElementById( 'Page' ); 
    441                 container = document.getElementById( 'main_content' ); 
    442                  
    443                 scene = new THREE.Scene(); 
    444                                 scene.addLight( new THREE.AmbientLight( 0x0ff20 ) ); 
    445                                 light1 = new THREE.PointLight( 0xff0040 ); 
    446                                 scene.addLight( light1 ); 
    447                                 object = new THREE.Object3D(); 
    448                                  
    449                 //scene.addObject( object ); 
    450                  
    451  
    452                  
    453                  
    454                  
    455                  
    456                 //alert("{{images_3D}}"); 
    457                  
    458                 //pos_main_box=getPos(main_box); 
    459                 //alert("X inicial : "+pos_main_box.x+" Ancho de la web "+window.innerWidth+"Ancho de la division "+main_box.offsetWidth+"\n"); 
    460                 pos_container=getPos(container); 
    461  
    462                  
    463                  
    464                 {% for item in multi_image3D %} 
    465                 object_{{item.id}} = new THREE.Mesh( new _{{item.id}}(), new THREE.MeshNormalMaterial({opacity:0.5,shading:THREE.SmoothShading}) ); 
    466                  
    467                 //object.prototype.add(object_{{item.id}}); 
    468                 scene.addObject( object_{{item.id}} ); 
    469                 {% endfor %} 
    470                      
    471  
    472  
    473  
    474                                 //object = new THREE.Mesh( new Shape(), new THREE.MeshNormalMaterial({opacity:0.5,shading:THREE.SmoothShading}) ); 
    475                                  
    476                                 //object.overdraw = true; 
    477                                  
    478                                 object.overdraw = false; 
    479                                 object.scale.x = object.scale.y = object.scale.z = 1.; 
    480                  
    481                                  
    482                                 object.geometry.computeBoundingBox(); 
    483                                  
    484                                 //centre geometrique d image 
    485                                 centerX = 0.5 * ( object.geometry.boundingBox.x[ 1 ] +object.geometry.boundingBox.x[ 0 ] ); 
    486                                 centerY = 0.5 * ( object.geometry.boundingBox.y[ 1 ] + object.geometry.boundingBox.y[ 0 ] ); 
    487                                 centerZ = 0.5 * ( object.geometry.boundingBox.z[ 1 ] + object.geometry.boundingBox.z[ 0 ] ); 
    488                                 //taille         
    489                                 Width = Math.abs(object.geometry.boundingBox.x[ 1 ] - object.geometry.boundingBox.x[ 0 ]) ; 
    490                                 Height = Math.abs(object.geometry.boundingBox.y[ 1 ] - object.geometry.boundingBox.y[ 0 ]) ; 
    491                                 Depth = Math.abs(object.geometry.boundingBox.z[ 1 ] - object.geometry.boundingBox.z[ 0 ]) ; 
    492                                  
    493  
    494  
    495                                 camera = new THREE.Camera( 50, (window.innerWidth-pos_container.x) / (window.innerHeight-pos_container.y), 1, centerZ+20*Depth);         
    496  
    497                                 camera.target.position.copy( object.position ); 
    498                                 camera.target.position.addSelf( new THREE.Vector3( centerX,centerY, centerZ ) ); 
    499                  
    500                                 camera = new THREE.Camera( 50, (window.innerWidth-pos_container.x) / (window.innerHeight-pos_container.y), 1, 1);        
    501  
    502   
    503                                 z=Math.sqrt((Height*Height-(Height*Height/2))/2); 
    504                                 y=Math.sqrt((Width*Width-(Width*Width/2))/2); 
    505                                 if(z>y){ 
    506                                 y=z; 
    507                                 } 
    508                 
    509                                 factor=1.5; // =1 la image s afiche complete // >>1  l image se montre plus petit au debut // <<1 on commance avec un                                   zoom d image    
    510                                 camera.position.copy( new THREE.Vector3( centerX, centerY, centerZ+y+factor*Depth ) ); 
    511                                  
    512                                 //alert("Porofundidad necesaria: "+z+" "+y+"\n"); 
    513                                  
    514                                 //scene.add( object ); 
    515                                                  
    516                 //renderer = new THREE.CanvasRenderer(); 
    517                                 renderer = new THREE.WebGLRenderer(); 
    518                                 //renderer.setSize( window.innerWidth, window.innerHeight ); 
    519                                 //renderer.setSize( window.innerWidth-pos, 400 ); 
    520                 //renderer.setSize( window.innerWidth-pos_container.x-pos_main_box.x, window.innerHeight-pos_container.y -20); 
    521                 renderer.setSize( window.innerWidth-pos_container.x, window.innerHeight-pos_container.y -20); 
    522                 container.appendChild( renderer.domElement ); 
    523                  
    524                  
    525                                 //object.computeBoundingBox; 
    526                                  
    527                                  
    528                                 container.addEventListener( 'mousedown', onDocumentMouseDown, false ); 
    529                                 container.addEventListener('DOMMouseScroll', wheel, false); 
    530                                  
    531                                  
    532  
    533  
    534                         } 
    535  
    536                         function wheel(event){ 
     360function wheel(event){ 
    537361                             
    538362                                var delta = 0; 
     
    552376                        function handle(delta) { 
    553377                                if (delta <0){ 
    554                                 object.scale.x = object.scale.y = object.scale.z = object.scale.z * 1.01; 
     378                                object3D.scale.x = object3D.scale.y = object3D.scale.z = object3D.scale.z * 1.01; 
    555379                                         
    556380 
     
    558382                                else{ 
    559383                                //alert('boundRadius'); 
    560                                 object.scale.x = object.scale.y = object.scale.z = object.scale.z * 0.99; 
     384                                object3D.scale.x = object3D.scale.y = object3D.scale.z = object3D.scale.z * 0.99; 
    561385                                }        
    562386                                } 
    563387 
    564  
    565                         function onDocumentMouseDown( event ) { 
    566  
    567                                                         event.preventDefault(); 
    568          
    569  
    570                                                         document.addEventListener( 'mousemove', onDocumentMouseMove, false ); 
    571                                                         document.addEventListener( 'mouseup', onDocumentMouseUp, false ); 
    572                                                         document.addEventListener( 'mouseout', onDocumentMouseOut, false ); 
    573  
    574                                                         mouseXOnMouseDown = event.clientX - windowHalfX; 
    575                                                         mouseYOnMouseDown = event.clientY - windowHalfY; 
    576                                                         targetRotationOnMouseDown = targetRotation; 
    577                                                 } 
    578  
    579                                                 function onDocumentMouseMove( event ) { 
    580  
    581                                                         mouseX = event.clientX - windowHalfX; 
    582                                                         mouseY = event.clientY - windowHalfY; 
    583  
    584                                                         targetRotation = targetRotationOnMouseDown + ( mouseX - mouseXOnMouseDown ) * 0.02; 
    585                                                         targetRotationY = targetRotationYOnMouseDown + ( mouseY - mouseYOnMouseDown ) * 0.02; 
    586                                                 } 
    587  
    588                                                 function onDocumentMouseUp( event ) { 
    589  
    590                                                         document.removeEventListener( 'mousemove', onDocumentMouseMove, false ); 
    591                                                         document.removeEventListener( 'mouseup', onDocumentMouseUp, false ); 
    592                                                         document.removeEventListener( 'mouseout', onDocumentMouseOut, false ); 
    593                                                 } 
    594  
    595                                                 function onDocumentMouseOut( event ) { 
    596  
    597                                                         document.removeEventListener( 'mousemove', onDocumentMouseMove, false ); 
    598                                                         document.removeEventListener( 'mouseup', onDocumentMouseUp, false ); 
    599                                                         document.removeEventListener( 'mouseout', onDocumentMouseOut, false ); 
    600                                                 } 
    601388                                                 
    602                                                  
    603                 function resize() 
    604  
    605                 { 
    606                 pos_container=getPos(container);  
    607                 if(typeof(renderer) != 'undefined') 
    608             renderer.setSize( window.innerWidth-pos_container.x-pos_main_box.x, window.innerHeight-pos_container.y-20 ); 
    609  
    610  
    611                 } 
    612                         function loop() { 
    613          
    614                      
    615                 resize(); 
    616     
    617                                 var time = new Date().getTime() * 0.0005; 
    618  
    619                                 //object.rotation.x -= 0.005; 
    620                                 //object.rotation.y -= 0.01; 
    621                                 object.rotation.y += ( targetRotation - object.rotation.y ) * 0.02; 
    622                                 object.rotation.x += ( targetRotationY - object.rotation.x ) * 0.02; 
    623  
    624                                                                  
    625                                 renderer.render(scene, camera); 
    626  
    627                         } 
    628                          
     389function onDocumentMouseDown( event ) { 
     390 
     391                                                        event.preventDefault(); 
     392 
     393                                                        document.addEventListener( 'mousemove', onDocumentMouseMove, false ); 
     394                                                        document.addEventListener( 'mouseup', onDocumentMouseUp, false ); 
     395                                                        document.addEventListener( 'mouseout', onDocumentMouseOut, false ); 
     396 
     397                                                        mouseXOnMouseDown = event.clientX - windowHalfX; 
     398                                                        mouseYOnMouseDown = event.clientY - windowHalfY; 
     399                                                        targetRotationOnMouseDown = targetRotation; 
     400                                                } 
     401 
     402                                                function onDocumentMouseMove( event ) { 
     403 
     404                                                        mouseX = event.clientX - windowHalfX; 
     405                                                        mouseY = event.clientY - windowHalfY; 
     406 
     407                                                        targetRotation = targetRotationOnMouseDown + ( mouseX - mouseXOnMouseDown ) * 0.02; 
     408                                                        targetRotationY = targetRotationYOnMouseDown + ( mouseY - mouseYOnMouseDown ) * 0.02; 
     409                                                } 
     410 
     411                                                function onDocumentMouseUp( event ) { 
     412 
     413                                                        document.removeEventListener( 'mousemove', onDocumentMouseMove, false ); 
     414                                                        document.removeEventListener( 'mouseup', onDocumentMouseUp, false ); 
     415                                                        document.removeEventListener( 'mouseout', onDocumentMouseOut, false ); 
     416                                                } 
     417 
     418                                                function onDocumentMouseOut( event ) { 
     419 
     420                                                        document.removeEventListener( 'mousemove', onDocumentMouseMove, false ); 
     421                                                        document.removeEventListener( 'mouseup', onDocumentMouseUp, false ); 
     422                                                        document.removeEventListener( 'mouseout', onDocumentMouseOut, false ); 
     423                                                } 
     424function loop() { 
     425 
     426                                var time = new Date().getTime() * 0.0005; 
     427 
     428                                //object.rotation.x -= 0.005; 
     429                                //object.rotation.y -= 0.01; 
     430                                object3D.rotation.y += ( targetRotation - object3D.rotation.y ) * 0.02; 
     431                                object3D.rotation.x += ( targetRotationY - object3D.rotation.x ) * 0.02; 
     432 
     433                                                                 
     434                                renderer.render(scene, camera); 
     435 
     436                        } 
     437 
     438 
    629439                        function cancelEvent(e) 
    630440            { 
     
    640450            return false; 
    641451            } 
    642 */ 
    643 function afficher(){ 
    644  
    645 document.getElementById('caca').style.display = 'block';  
    646 } 
    647  
    648  
    649 function masquer(){ 
    650  
    651 //document.getElementById('caca').style.display = 'none';  
    652 } 
    653 /*                               
    654 var config = {     
    655      over: afficher, // function = onMouseOver callback (REQUIRED)     
    656      timeout: 500, // number = milliseconds delay before onMouseOut     
    657      out: masquer // function = onMouseOut callback (REQUIRED)     
    658 }; 
    659  
    660 $(document.getElementById('button_affichage')).hoverIntent(  afficher,masquer );                 
    661 */ 
     452             
     453             
     454             
     455function computeGroupBoundingBox(Object_Group) { 
     456 
     457 
     458    
     459   if(Object_Group.children.length >  0 ){ 
     460    
     461    
     462        Object_Group.children[ 0 ].geometry.computeBoundingBox(); 
     463        var boundingBox = {  
     464        'x': [ Object_Group.children[ 0 ].geometry.boundingBox.x[ 0 ], Object_Group.children[ 0 ].geometry.boundingBox.x[ 1 ] ], 
     465        'y': [ Object_Group.children[ 0 ].geometry.boundingBox.y[ 0 ], Object_Group.children[ 0 ].geometry.boundingBox.y[ 1 ] ], 
     466        'z': [ Object_Group.children[ 0 ].geometry.boundingBox.z[ 0 ], Object_Group.children[ 0 ].geometry.boundingBox.z[ 1 ] ]};   
     467         
     468 
     469         
     470       
     471        for ( var v = 1 ;v  < Object_Group.children.length; v ++ ) { 
     472 
     473        Object_Group.children[ v ].geometry.computeBoundingBox(); 
     474         
     475        if(Object_Group.children[ v ].geometry.boundingBox){ 
     476 
     477        if ( Object_Group.children[ v ].geometry.boundingBox.x[ 0 ] < boundingBox.x[ 0 ] ) { 
     478 
     479        boundingBox.x[ 0 ] = Object_Group.children[ v ].geometry.boundingBox.x[ 0 ]; 
     480        } 
     481        if ( Object_Group.children[ v ].geometry.boundingBox.x[ 1 ] > boundingBox.x[ 1 ] ) { 
     482 
     483        boundingBox.x[ 1 ] = Object_Group.children[ v ].geometry.boundingBox.x[ 1 ]; 
     484 
     485        } 
     486         
     487        if ( Object_Group.children[ v ].geometry.boundingBox.y[ 0 ] < boundingBox.y[ 0 ] ) { 
     488 
     489        boundingBox.y[ 0 ] = Object_Group.children[ v ].geometry.boundingBox.y[ 0 ]; 
     490        } 
     491        if ( Object_Group.children[ v ].geometry.boundingBox.y[ 1 ] > boundingBox.y[ 1 ] ) { 
     492 
     493        boundingBox.y[ 1 ] = Object_Group.children[ v ].geometry.boundingBox.y[ 1 ]; 
     494 
     495        } 
     496         
     497        if ( Object_Group.children[ v ].geometry.boundingBox.z[ 0 ] < boundingBox.z[ 0 ] ) { 
     498 
     499        boundingBox.z[ 0 ] = Object_Group.children[ v ].geometry.boundingBox.z[ 0 ]; 
     500        } 
     501        if ( Object_Group.children[ v ].geometry.boundingBox.z[ 1 ] > boundingBox.z[ 1 ] ) { 
     502 
     503        boundingBox.z[ 1 ] = Object_Group.children[ v ].geometry.boundingBox.z[ 1 ]; 
     504 
     505        } 
     506         
     507        } 
     508        } 
     509 
     510    
     511   } 
     512   return boundingBox; 
     513   } 
     514 
     515 
     516 
     517 
    662518                 
    663                  
    664                  
    665519 
    666520 
  • branches/3D/openPLM/document3D/views.py

    r592 r597  
    4949            image = options["Display"] 
    5050            multi_image=stp_to_jss.objects.filter(stp=image) 
     51            menu_navigabilite=stp_to_jss_navigabilite.objects.filter(stp=image)[0].js.name 
    5152 
    5253            #ctx.update({'current_page':'3D','select_stp_form': form,'images_3D':options["Display"].js.name}) 
    53             ctx.update({'current_page':'3D','select_stp_form': form, 'multi_image3D' : multi_image})     
     54            ctx.update({'current_page':'3D','select_stp_form': form, 'multi_image3D' : multi_image ,'menu_navigabilite' : menu_navigabilite, })     
    5455            return r2r('Display3D.htm', ctx, request) 
    5556         
     
    6263    if image is None: 
    6364        multi_image='' 
     65        menu_navigabilite='' 
    6466 
    6567    else: 
    6668 
    6769        multi_image=stp_to_jss.objects.filter(stp=image) 
    68          
     70        menu_navigabilite=stp_to_jss_navigabilite.objects.filter(stp=image)[0].js.name 
    6971        #print "EL numero de ficheros es " ,multi_image.count() 
    7072 
    7173         
    72     ctx.update({'current_page':'3D','select_stp_form': form , 'multi_image3D' : multi_image ,}) 
     74    ctx.update({'current_page':'3D','select_stp_form': form , 'multi_image3D' : multi_image , 'menu_navigabilite' : menu_navigabilite , }) 
    7375  
    7476    return r2r('Display3D.htm', ctx, request) 
  • branches/3D/plugins/freecad/OpenPLM/openplm.py

    r259 r597  
    66import tempfile 
    77 
     8 
    89# poster makes it possible to send http request with files 
    910# sudo easy_install poster 
     
    1819 
    1920import FreeCAD, FreeCADGui 
     21import Part 
    2022 
    2123connect = QtCore.QObject.connect 
     
    114116            gdoc = FreeCAD.ActiveDocument 
    115117            path = os.path.join(rep, filename) 
     118            fileName, fileExtension = os.path.splitext(filename) 
     119            path_stp=os.path.join(rep, (fileName+".stp")) 
     120            #create temporal file stp   
     121            Part.export(gdoc.Objects,path_stp) 
    116122            gdoc.FileName = path 
    117123            save(gdoc) 
    118             doc_file = self.upload_file(doc, path) 
     124             
     125            #upload stp and freecad object 
     126            doc_step_file=self.upload_file(doc, path_stp) # XXX 
     127            doc_file = self.upload_file(doc, path) # XXX 
     128             
     129            #remove temporal file stp   
     130            os.remove(path_stp) 
     131             
     132             
    119133            self.add_managed_file(doc, doc_file, path) 
    120134            self.load_file(doc, doc_file["id"], path, gdoc) 
    121135            if not unlock: 
    122                 self.get_data("api/object/%s/lock/%s/" % (doc["id"], doc_file["id"])) 
     136                self.get_data("api/object/%s/lock/%s/" % (doc["id"], doc_file["id"])) # XXX 
     137                self.get_data("api/object/%s/lock/%s/" % (doc["id"], doc_step_file["id"])) # XXX 
    123138            else: 
    124139                self.send_thumbnail(gdoc) 
     
    149164        res = json.load(self.opener.open(request)) 
    150165        return res["doc_file"] 
     166         
     167         
     168 
     169         
    151170 
    152171    def download(self, doc, doc_file): 
     172     
     173     
     174     
    153175        f = self.opener.open(self.SERVER + "file/%s/" % doc_file["id"]) 
    154176        rep = os.path.join(self.PLUGIN_DIR, doc["type"], doc["reference"], 
     
    179201        self.get_data("api/object/%s/checkout/%s/" % (doc["id"], doc_file["id"])) 
    180202        self.download(doc, doc_file) 
     203         
     204 
     205        #on va locker fichier step associe 
     206        url= "api/object/%s/files/all/" % doc["id"]  
     207        res = PLUGIN.get_data(url) 
     208        fileName, fileExtension = os.path.splitext(doc_file["filename"]) 
     209        doc_step = [obj for obj in res["files"] if obj["filename"] == fileName+".stp"] 
     210        if not len(doc_step)==0:     
     211            self.get_data("api/object/%s/lock/%s/" % (doc["id"], doc_step[0]["id"])) 
     212        #end locker     
    181213 
    182214    def add_managed_file(self, document, doc_file, path): 
     
    240272                del data["documents"][str(doc["id"])] 
    241273            self.save_conf(data) 
     274            #on va unlocker 
     275            self.get_data("api/object/%s/unlock/%s/" % (doc["id"], doc_file_id))  
     276            url= "api/object/%s/files/all/" % doc["id"]  
     277            res = PLUGIN.get_data(url) 
     278            root, f_name = os.path.split(path) 
     279            fileName, fileExtension = os.path.splitext(f_name) 
     280            doc_step = [obj for obj in res["files"] if obj["filename"] == fileName+".stp"] 
     281            if not len(doc_step)==0:     
     282                self.get_data("api/object/%s/unlock/%s/" % (doc["id"], doc_step[0]["id"])) 
     283   
     284            #end unlocker     
     285                           
    242286            if delete and os.path.exists(path): 
    243287                os.remove(path) 
     
    265309            doc = self.documents[gdoc]["openplm_doc"] 
    266310            doc_file_id = self.documents[gdoc]["openplm_file_id"] 
     311            #doc_file_name = self.documents[gdoc]["openplm_file_name"] 
    267312            path = self.documents[gdoc]["openplm_path"] 
    268313            def func(): 
     
    271316                datagen, headers = multipart_encode({"filename": open(path, "rb")}) 
    272317                # Create the Request object 
    273                 url = self.SERVER + "api/object/%s/checkin/%s/" % (doc["id"], doc_file_id) 
    274                 request = urllib2.Request(url, datagen, headers) 
     318                 
     319                 
     320                #check-in fichier step asscocies if exists 
     321                #api/doc_id/files/[all/] 
     322                url= "api/object/%s/files/all/" % doc["id"]  
     323                res = PLUGIN.get_data(url) 
     324                root, f_name = os.path.split(path) 
     325                fileName, fileExtension = os.path.splitext(f_name) 
     326                doc_step = [obj for obj in res["files"] if obj["filename"] == fileName+".stp"] 
     327                 
     328                if len(doc_step)==0:    #il faut generer un nouvelle fichier step 
     329 
     330                    fileName, fileExtension = os.path.splitext(path) 
     331                    path_stp=fileName+".stp" 
     332                    Part.export(gdoc.Objects,path_stp) 
     333                    doc_step_file=self.upload_file(doc,path_stp) # XXX 
     334                    doc_step.append(doc_step_file) 
     335 
     336                else:                   #il faut un check-in 
     337  
     338                    fileName, fileExtension = os.path.splitext(path) 
     339                    Part.export(gdoc.Objects,fileName+".stp") 
     340                    datagen, headers = multipart_encode({"filename": open(fileName+".stp", "rb")}) 
     341                    url = self.SERVER + "api/object/%s/checkin/%s/" % (doc["id"], doc_step[0]["id"]) # XXX 
     342                    request = urllib2.Request(url, datagen, headers) 
     343                    res = self.opener.open(request) 
     344                    os.remove(fileName+".stp")                  
     345                 
     346                 
     347                 
     348                url = self.SERVER + "api/object/%s/checkin/%s/" % (doc["id"], doc_file_id) # XXX 
     349                request = urllib2.Request(url, datagen, headers)                 
    275350                res = self.opener.open(request) 
     351                 
     352 
     353                 
    276354                if not unlock: 
    277                     self.get_data("api/object/%s/lock/%s/" % (doc["id"], doc_file_id)) 
     355                    self.get_data("api/object/%s/lock/%s/" % (doc["id"], doc_file_id)) # XXX 
     356                    self.get_data("api/object/%s/lock/%s/" % (doc["id"], doc_step[0]["id"])) # XXX 
    278357                else: 
    279358                    self.send_thumbnail(gdoc) 
Note: See TracChangeset for help on using the changeset viewer.