Changeset 649 in main for branches


Ignore:
Timestamp:
01/17/12 15:04:00 (9 years ago)
Author:
agalech
Message:
 
Location:
branches/3D/openPLM/document3D
Files:
1 added
5 edited

Legend:

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

    r646 r649  
    3636 
    3737 
     38""" 
     39l_SubShapes = TDF_LabelSequence() 
     40shape_tool.GetSubShapes(label,l_SubShapes) 
     41if(l_SubShapes.Length()>0): 
     42    print "SubShapeDetectado ###################"#tengo un ejemplo en shapes con color 
     43"""     
    3844class NEW_STEP_Import(object): 
    3945 
     
    4147    
    4248     
    43     def __init__(self, filename, layer_name='layer-00'): 
     49    def __init__(self, filename): 
    4450        self.filename = filename 
    4551        self._shapes_simples = [] #an empty string 
     
    7682        color_tool=h_colors_tool.GetObject() 
    7783        self._color_tool=color_tool 
    78          
     84        self._shape_tool=shape_tool         
    7985         
    8086 
     
    100106                t=Topo(compShape)     
    101107                if t.number_of_vertices() > 0: 
    102                      
    103108                    self._shapes_simples.append(simple_shape(GetLabelNom(l_LabelShapes.Value(i+1)),compShape)) 
    104109                else: 
    105110                    print "Not information found for shape : ", GetLabelNom(l_LabelShapes.Value(i+1)) 
    106111           
    107  
    108  
    109  
     112        #We are going to refill the tree with information 
     113        for i in range(l_Labels_root.Length()): 
     114            generate_arbre_shape(l_Labels_root.Value(i+1),shape_tool,self._shapes_arbre,color_tool,self._shapes_simples) 
    110115       
    111         #We are going to refill the tree with information 
    112         #comprobar aqui tambien que la cantidad es 1 
    113  
    114         for i in range(l_Labels_root.Length()): 
    115             nom=[GetLabelNom(l_Labels_root.Value(i+1))] 
    116             loc=[shape_tool.GetLocation(l_Labels_root.Value(i+1))] 
    117             labels=[l_Labels_root.Value(i+1)] 
    118             root=True 
    119             self._shapes_arbre.append(node_shape(nom,loc,labels,l_Labels_root.Value(i+1),root)) 
    120             parcours_recursif2(l_Labels_root.Value(i+1),shape_tool,self._shapes_arbre[i].children,color_tool,self._shapes_simples) 
    121  
    122         self._shape_tool=shape_tool 
    123116        return True               
    124117         
    125  
    126  
    127  
    128 def parcours_recursif2(label,shape_tool,arbre_shape,color_tool,shapes_simples):     
    129     """ 
    130     l_SubShapes = TDF_LabelSequence() 
    131     shape_tool.GetSubShapes(label,l_SubShapes) 
    132     if(l_SubShapes.Length()>0): 
    133         print "SubShapeDetectado ###################"#tengo un ejemplo en shapes con color 
    134     """ 
    135         
    136     l_ComponentShapes = TDF_LabelSequence()  
    137  
    138      
    139      
    140     if(shape_tool.IsReference(label)):    
    141         lab=TDF_Label() 
    142         shape_tool.GetReferredShape(label,lab) 
    143         shape_tool.GetComponents(lab,l_ComponentShapes) 
    144  
     118def generate_arbre_shape(label,shape_tool,arbre_shape,color_tool,shapes_simples): 
     119 
     120#buscamos los vecinos con el mismo ref 
     121#si es una referencia buscamos si algun vecino tiene la misma referencia 
     122    reference_found=False  
     123    if shape_tool.IsReference(label): 
     124     
     125     
     126        label_reference=TDF_Label() 
     127        shape_tool.GetReferredShape(label,label_reference) 
     128  
     129  
     130        for i in range(len(arbre_shape)): 
     131            if shape_tool.GetShape(arbre_shape[i].label_reference).IsPartner(shape_tool.GetShape(label_reference)):                       
     132                reference_found=i 
     133                break 
     134                 
     135                  
     136        if reference_found: 
     137            arbre_shape[reference_found].Add_reference(label,GetLabelNom(label),shape_tool.GetLocation(label)) 
     138             
     139        else: 
     140            arbre_shape.append(node_shape(label,GetLabelNom(label),shape_tool.GetLocation(label),label_reference,GetLabelNom(label_reference),shape_tool.IsTopLevel(label))) 
     141            label_to_expand=label_reference 
     142                                     
    145143    else: 
    146         shape_tool.GetComponents(label,l_ComponentShapes) 
    147  
    148  
    149  
    150     #se podria hacer de una forma mas eficiente????? 
    151     if(l_ComponentShapes.Length()>0): 
    152  
    153         label_already_assigned=[] 
    154         #having count quantity 
    155         for i in range(l_ComponentShapes.Length()): 
    156             label_already_assigned.append(0) 
    157              
    158              
    159         index=0     
    160         for f in range(l_ComponentShapes.Length()): 
    161          
    162             if not label_already_assigned[f]: 
    163                 nom=[GetLabelNom(l_ComponentShapes.Value(f+1))] 
    164                 location=[shape_tool.GetLocation(l_ComponentShapes.Value(f+1))] 
    165                 labels=[l_ComponentShapes.Value(f+1)] 
    166                 compShape=shape_tool.GetShape(l_ComponentShapes.Value(f+1)) 
     144        label_to_expand=label     
     145        arbre_shape.append(node_shape(label,GetLabelNom(label),shape_tool.GetLocation(label),label,GetLabelNom(label),shape_tool.IsTopLevel(label))) 
    167146                 
    168                 for  t in range(f+1,l_ComponentShapes.Length()): 
    169                     if compShape.IsPartner(shape_tool.GetShape(l_ComponentShapes.Value(t+1))): 
    170                         label_already_assigned[t]=1 
    171                         nom.append(GetLabelNom(l_ComponentShapes.Value(t+1))) 
    172                         labels.append(l_ComponentShapes.Value(t+1)) 
    173                         location.append(shape_tool.GetLocation(l_ComponentShapes.Value(t+1))) 
    174  
    175                      
    176             #modificacion para anadir varias locaciones y cantidad 
    177                 #arbre_shape.append(node_shape(GetLabelNom(l_ComponentShapes.Value(f+1)),shape_tool.GetLocation(label))) 
    178                 # y si es referencia cojo el nombre de la referencia para tener uno unificado 
    179                 if(shape_tool.IsReference(l_ComponentShapes.Value(f+1))): 
    180                     lab=TDF_Label() 
    181                     shape_tool.GetReferredShape(l_ComponentShapes.Value(f+1),lab)  
    182                     nom_component=GetLabelNom(lab) 
    183                 else: 
    184                     nom_component=GetLabelNom(l_ComponentShapes.Value(f+1)) 
    185                     lab=l_ComponentShapes.Value(f+1) 
    186                     
    187                 arbre_shape.append(node_shape(nom,location,labels,lab,nom_component))    
    188                 parcours_recursif2(l_ComponentShapes.Value(f+1),shape_tool,arbre_shape[index].children,color_tool,shapes_simples) 
    189                 index=index+1 
    190  
    191     else: 
    192      
    193         compShape=shape_tool.GetShape(label) 
    194         #nous cherchons sa correspondance dans la liste de shapes simples / si le shape n avais pas de vertices on ne trouvera aucun shape                          
    195         for s in range(len(shapes_simples)): 
    196             if compShape.IsPartner(shapes_simples[s].shape): 
    197                 arbre_shape.append(feuille_nom_shapes(GetLabelNom(label),colour_chercher(label,color_tool,shape_tool),s))  
    198                 break 
    199         #else: 
    200  
    201          
    202      
    203  
    204  
    205  
    206     """ 
    207     l_SubShapes = TDF_LabelSequence() 
    208     shape_tool.GetSubShapes(label,l_SubShapes) 
    209     if(l_SubShapes.Length()>0): 
    210         print "SubShapeDetectado ###################"#tengo un ejemplo en shapes con color 
    211     """ 
    212         
    213  
    214  
    215      
    216      
    217   
    218  
     147    if not reference_found: 
     148     
     149        if shape_tool.IsAssembly(label_to_expand): 
     150                l_c = TDF_LabelSequence() 
     151                shape_tool.GetComponents(label_to_expand,l_c)  
     152                for i in range(l_c.Length()): 
     153                    generate_arbre_shape(l_c.Value(i+1),shape_tool,arbre_shape[len(arbre_shape)-1].children,color_tool,shapes_simples) 
     154        else: 
     155         
     156            compShape=shape_tool.GetShape(label) 
     157            #nous cherchons sa correspondance dans la liste de shapes simples / si le shape navais pas de vertices on ne trouvera aucun shape                          
     158            for s in range(len(shapes_simples)): 
     159                if compShape.IsPartner(shapes_simples[s].shape): 
     160                    arbre_shape[len(arbre_shape)-1].children.append(feuille_nom_shapes(GetLabelNom(label),colour_chercher(label,color_tool,shape_tool),s))  
     161                    break 
     162         
     163         
     164         
    219165         
    220166def GetLabelNom(lab): 
     
    226172            n=N.GetObject() 
    227173            return n.Get().PrintToString() 
    228  #p=TCollection_AsciiString("jota") 
     174 
    229175def SetLabelNom(lab,nom): 
    230176 
     
    237183    return True 
    238184  
    239  
    240  
    241  
    242     
     185   
    243186def colour_chercher(label,color_tool,shape_tool): 
    244187    c=Quantity_Color() 
     
    247190        color_tool.SetColor(label,c,1) 
    248191        color_tool.SetColor(label,c,2) #para no tener problemas a la hora de componer y no perder informacion del color 
    249         print "Color encontrado manera 1(",c.Red(),",",c.Green() ,"," ,c.Blue() ,    ") encontrado para : " , GetLabelNom(label)  
     192        #print "Color encontrado manera 1(",c.Red(),",",c.Green() ,"," ,c.Blue() ,    ") encontrado para : " , GetLabelNom(label)  
    250193        return c 
    251194     
     
    254197        color_tool.SetInstanceColor(shape_tool.GetShape(label),1,c) 
    255198        color_tool.SetInstanceColor(shape_tool.GetShape(label),2,c) 
    256         print "Color encontrado manera 2 (",c.Red(),",",c.Green() ,"," ,c.Blue() ,    ") encontrado para : " , GetLabelNom(label)  
     199        #print "Color encontrado manera 2 (",c.Red(),",",c.Green() ,"," ,c.Blue() ,    ") encontrado para : " , GetLabelNom(label)  
    257200        return c 
    258201 
  • branches/3D/openPLM/document3D/aficher.py

    r644 r649  
    2323 
    2424     
    25     
     25 
    2626    procesing_simples_shapes(my_step_importer.get_shapes_simples(),doc_file) 
    2727     
     
    3838 
    3939    composer(my_step_importer.get_shapes_arbre(),new_doc_file)          
    40     print "\n\n\nTermina saliendo BIEN y CoRrecTo\n\n\n"    
     40    print "\n\n\nTerMina saliEndO BiEN y CoRrecTo\n\n\n"    
    4141    return ok 
    4242 
  • branches/3D/openPLM/document3D/composer.py

    r645 r649  
    1515    st.GetFreeShapes(lr) 
    1616     
    17     """ 
    18     h_doc = TDocStd.Handle_TDocStd_Document() 
    19     app = XCAFApp.GetApplication().GetObject() 
    20     app.NewDocument(TCollection.TCollection_ExtendedString("MDTV-CAF"),h_doc) 
    21     doc = h_doc.GetObject() 
    22     h_shape_tool = XCAFDoc.XCAFDoc_DocumentTool().ShapeTool(doc.Main())  
    23     l_Colors = XCAFDoc.XCAFDoc_DocumentTool().ColorTool(doc.Main()) 
    24     colors = l_Colors.GetObject()               
    25     shape_tool = h_shape_tool.GetObject() 
    26     top_label = shape_tool.NewShape() 
    27     """  
     17 
    2818     
    2919     
    30     #si el root tiene hijos aue no hayan sido descompuestos tmb se agregan 
     20    #si el root tiene hijos que no hayan sido descompuestos tmb se agregan, o ya estan agregados al leer el descompuesto 
    3121 
    3222    for t in range(len(arbre)): 
     
    4030                    lr_2= TDF_LabelSequence() 
    4131                    my_step_importer.get_shapes_tool().GetFreeShapes(lr_2) 
    42                     #lo meto en el root determinado por i  , meto lr_2 value 1 por que yo no voy a descomponer cosas con 2 root?? siempre tendran uno?? revisar?? 
     32 
    4333                    for d in range(a_composer.quantity): 
    44                         new_label=st.AddComponent(lr.Value(t+1),lr_2.Value(1),a_composer.loc[d]) 
    45                         #print "\n\n" , GetLabelNom(new_label)  , "    " ,GetLabelNom(lr_2.Value(1)) 
    46                         SetLabelNom(new_label,a_composer.nom[d]) 
    47                         # 
    48                         #SetLabelNom(lr_2.Value(1),"amijo") 
    49                         #new_label=shape_tool.AddComponent(top_label, lr_2.Value(1) ,a_composer.loc[d]) 
    50                         #print "\n\n\n label nom " , nomGetLabelNom(new_label) 
    51                         #SetLabelNom(new_label,"orgasmo")    
    52                         #print "\n\nColor " , colour_chercher(lr_2.Value(1),my_step_importer.get_color_tool(),shape_tool) 
    53                 #else: son hijos normales, agregarlos.    
    54                  
    55     #new_label=shape_tool.AddComponent(top_label, lr.Value(1), st.GetLocation(lr.Value(1))) 
    56     """            
    57     mode = STEPControl_AsIs 
    58     writer = STEPCAFControl_Writer() 
    59     writer.Transfer(h_doc, mode) 
    60     writer.Write("test/CompuestoC.stp")   
    61     """ 
     34                        new_label=st.AddComponent(lr.Value(t+1),lr_2.Value(1),a_composer.locations[d]) 
     35                        SetLabelNom(new_label,a_composer.names[d]) 
     36 
    6237                        
    6338    WS = XSControl_WorkSession() 
     
    6540    for i in range(lr.Length()): 
    6641        writer.Transfer(lr.Value(i+1), STEPControl_AsIs)   
    67     status = writer.Write("test/Compuesto.stp")  
     42    status = writer.Write(settings.MEDIA_ROOT+"Compuesto.stp") 
    6843     
     44     
     45     
     46     
     47     
     48     
     49     
     50     
     51     
     52     
     53      
     54     
  • branches/3D/openPLM/document3D/decomposer.py

    r645 r649  
    1010def decomposer(shape_tool,arbre,controller,doc_file,part_numeration,objects_numeration): 
    1111 
    12     print "ENTRA" 
    13     fileName, fileExtension = os.path.splitext(doc_file.filename)  
     12 
     13 
    1414    labels_roots = TDF_LabelSequence() 
    15     shape_tool.GetFreeShapes(labels_roots)#lo hacemos aqui por que al elimiar shapes, sus referencias suben al nivel de root 
    16     # y si lo hacemos despues sus referencias tmb seria transferidas   
     15    shape_tool.GetFreeShapes(labels_roots) 
     16 
    1717     
    1818     
     
    2222 
    2323 
     24    return generate_step_decompose(doc_file,labels_roots,controller,arbre)#importante el labels root, asi solo coje los que habia antes 
     25     
     26 
     27def generate_step_decompose(doc_file,labels_roots,controller,arbre): 
     28 
     29    fileName, fileExtension = os.path.splitext(doc_file.filename)  
    2430    WS = XSControl_WorkSession() 
    2531    writer = STEPCAFControl_Writer( WS.GetHandle(), False ) 
    26  
    27  
    28     #importante, voy a eliminar tmb los shapes referenciados, es esto u problema? 
    2932    for i in range(labels_roots.Length()): 
    3033        writer.Transfer(labels_roots.Value(i+1), STEPControl_AsIs)  
    31     status = writer.Write("test/descompuesto_"+str(fileName)+".stp")  
     34    status = writer.Write(settings.MEDIA_ROOT+"descompuesto_"+str(fileName)+".stp")  
    3235      
    33     f=open("/home/linux/openPLM/branches/3D/openPLM/test/descompuesto_"+str(fileName)+".stp") 
     36    f=open(settings.MEDIA_ROOT+"descompuesto_"+str(fileName)+".stp") 
    3437    myfile = File(f) 
    3538    myfile.name="descompuesto_"+str(fileName)+".stp" 
    3639    new_doc_file=controller.add_file(myfile,False) 
     40    os.remove(settings.MEDIA_ROOT+"descompuesto_"+str(fileName)+".stp") 
    3741    for i in range(len(arbre)): 
    3842        generate_links_whit_jss(arbre[i],new_doc_file,doc_file)    
     
    4549    new_stp_to_jss_arborescense.save() 
    4650    return new_doc_file  
     51 
     52 
     53 
    4754 
    4855def diviser(shape_tool,arbre,controller,doc_file,part_numeration,objects_numeration): 
     
    5764 
    5865            if isinstance(arbre[t].children[i],node_shape): 
    59                 print "3"   
     66             
    6067                if not arbre[t].children[i].IsRoot() and not arbre[t].children[i].IsReference(): 
    6168                    a_decomposer=arbre[t].children[i] 
    6269                    WS = XSControl_WorkSession() 
    6370                    writer = STEPCAFControl_Writer( WS.GetHandle(), False ) 
    64                     writer.Transfer(a_decomposer.label_ref, STEPControl_AsIs) 
    65                     status = writer.Write("test/"+a_decomposer.nom_component+".stp")              
    66                     f=open("/home/linux/openPLM/branches/3D/openPLM/test/"+a_decomposer.nom_component+".stp") 
     71                    writer.Transfer(a_decomposer.label_reference, STEPControl_AsIs) 
     72                    status = writer.Write(settings.MEDIA_ROOT+a_decomposer.name_component+".stp")              
     73                    f=open(settings.MEDIA_ROOT+a_decomposer.name_component+".stp") 
    6774                    myfile = File(f) 
    68                     myfile.name=GetLabelNom(a_decomposer.label_ref)+".stp" 
     75                    myfile.name=GetLabelNom(a_decomposer.label_reference)+".stp" 
    6976                    new_doc_file=controller.add_file(myfile,False) 
    70  
     77                    os.remove(settings.MEDIA_ROOT+a_decomposer.name_component+".stp") 
    7178                    for m in range(a_decomposer.quantity): 
    7279                        shape_tool.RemoveComponent(a_decomposer.labels[m]) 
     
    122129 
    123130    graph=kjGraph() 
    124     fileName, fileExtension = os.path.splitext(new_doc_file.filename)  
     131 
    125132    root=[] 
    126     loc=[] 
    127133    menu_generate_objects=["var object3D = new THREE.Object3D();\n"] 
    128     nom=my_shapes_arbre.nom_component+"."+str(part_numeration[0]) 
     134    nom=my_shapes_arbre.name_component+"."+str(part_numeration[0]) 
    129135    root.append(nom) 
     136    part_numeration[0]=part_numeration[0]+1 
    130137    for i in range(len(my_shapes_arbre.children)):#para evitar entrar en el root si este tiene cantidad superior a uno 
    131         ok=parcours_recursif(my_shapes_arbre.children[i],graph,part_numeration,menu_generate_objects,objects_numeration,loc,nom) 
     138        ok=parcours_recursif(my_shapes_arbre.children[i],graph,part_numeration,objects_numeration,menu_generate_objects,[],nom,root) 
    132139     
    133140 
    134141    if ok: 
    135         new_stp_to_jss_arborescense= stp_to_jss_arborescense() 
    136         new_stp_to_jss_arborescense.stp = new_doc_file 
    137         name = new_stp_to_jss_arborescense.js.storage.get_available_name(fileName+".js") 
    138         path = os.path.join(new_stp_to_jss_arborescense.js.storage.location, name) 
    139         new_stp_to_jss_arborescense.js = name 
    140         new_stp_to_jss_arborescense.save() 
    141  
    142         try: 
    143             directory = os.path.dirname(path.encode())         
    144             if not os.path.exists(directory): 
    145                 os.makedirs(directory) 
    146                  
    147                
    148             output = open(path.encode(),"w") 
    149              
    150  
    151       
    152             output.write("function menu() {\nelement = document.createElement(\"div\");\nelement.id=\"root\";\nelement.innerHTML =\"")         
    153             generate_menu(graph,root,output)   
    154             output.write("\";\ndocument.getElementById('menu_').appendChild(element);\n}\n") 
    155  
    156              
    157              
    158             #####           Generate objects javascript 
    159             output.write(menu_generate_objects[0]) 
    160             #####           End generate objects 
    161              
    162                      
    163             #####           Generate functions javascript 
    164             generate_functions(graph,root,output) 
    165             #####           End generate functions 
    166  
    167              
    168  
    169                     
    170             output.close()  
    171             print "FIN" 
    172         except IOError as (errno, strerror): 
    173             print "I/O error({0}): {1}".format(errno, strerror) 
     142        generate_file(new_doc_file,graph,root,menu_generate_objects) 
     143         
    174144 
    175145 
  • branches/3D/openPLM/document3D/models.py

    r644 r649  
    106106 
    107107    """ 
    108     __slots__ = ("nom", "loc", "children", "quantity","labels","path","root","label_ref","ref_id","nom_component") 
    109      
    110      
    111     def __init__(self, nom,location,labels,label_ref,nom_component,root=False,path=False): 
    112         self.nom = nom 
     108    __slots__ = ("names", "locations", "children", "quantity","labels","path","root","label_reference","ref_id","name_component") 
     109     
     110     
     111    def __init__(self,label,name,location,label_reference,name_component,root,path=False): 
     112        self.labels = [label]       
     113        self.names = [name] 
     114        self.locations = [location] 
     115        self.label_reference=label_reference 
    113116        self.children=[] 
    114         self.loc = location 
    115         self.labels = labels 
    116         self.quantity=len(nom) 
     117        self.quantity=1 
     118        self.name_component=name_component 
    117119        self.path=path 
    118120        self.root=root 
    119         self.nom_component=nom_component 
    120         self.label_ref=label_ref # para meter la referencia y asi tener componentes 
    121          
     121 
     122         # para meter la referencia y asi tener componentes 
     123 
     124    def Add_reference(self,label,name,location): 
     125        self.labels.append(label)       
     126        self.names.append(name) 
     127        self.locations.append(location) 
     128        self.quantity=self.quantity+1  
     129                     
    122130    def IsReference(self): 
    123131        return self.path 
     132         
    124133    def IsRoot(self): 
    125134        return self.root 
     
    170179from celery.task import task 
    171180@task 
    172 def handle_step_file(doc_file_pk,controller): 
     181def handle_step_file(doc_file_pk,object_id,user_id): 
    173182    doc_file = DocumentFile.objects.get(pk=doc_file_pk) 
    174183    from openPLM.document3D.aficher import convertir_STP_to_WebGL 
    175          
     184    user=User.objects.get(id=user_id) 
     185    object=Document3D.objects.get(id=object_id) 
     186    controller=Document3DController(object,user)  
    176187    fileName, fileExtension = os.path.splitext(doc_file.filename) 
     188 
     189     
    177190    if fileExtension.upper() in ('.STP', '.STEP'): 
    178191        query_jss=stp_to_jss.objects.filter(stp=doc_file) 
     
    193206            return True 
    194207             
    195                          
     208                            
    196209 
    197210 
     
    205218    def handle_added_file(self, doc_file): 
    206219     
    207         handle_step_file.delay(doc_file.pk,self)         
     220        handle_step_file.delay(doc_file.pk,self.object.id,self._user.id)         
    208221             
    209222    def delete_file(self, doc_file): 
Note: See TracChangeset for help on using the changeset viewer.