Changeset 601 in main for branches


Ignore:
Timestamp:
12/21/11 08:42:22 (9 years ago)
Author:
agalech
Message:

commentaires,optimisation et propreté dans le code

Location:
branches/3D/openPLM/document3D
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/3D/openPLM/document3D/Documentacion 3D

    r592 r601  
    11Cuando hay un nfallo en la conversion, guardar un login y el fichero, para asi poder solucionarlo. 
     2 
     3 
     4Cuando se modifique phytonOCC se podra incluir el mesh de pythonn y no el propio y el new_step_importer 
     5 
     6el problema de la precision, solo afecta a las elipses cilindros y esferas, no podemos ponerlo bajo siempre por que da malos resultados  
  • branches/3D/openPLM/document3D/aficher.py

    r599 r601  
    11 
    2 from openPLM.document3D.STP_converter_JSS import * 
     2from openPLM.document3D.STP_converter_WebGL import * 
    33from openPLM.document3D.models import * 
    4 #from OCC.MSH.Mesh import QuickTriangleMesh 
    5 from openPLM.document3D.nuevomesh import * 
     4from openPLM.document3D.Mesh import * 
    65from kjbuckets import kjGraph 
    7 # si sale mal de mes3js borrar el new_stp_js para que no se muestre    
    8 #91.0020.07:1.60 
    9 #91.0020.07:1.60 
    10  
     6from OCC.TopLoc import TopLoc_Location 
     7   
     8 
     9import time 
    1110 
    1211        
    13 def convertir_STP_to_JSS(doc_file): 
    14  
    15  
    16      
     12def convertir_STP_to_WebGL(doc_file): 
     13 
    1714 
    1815    my_step_importer = NEW_STEP_Import(doc_file.file.path.encode())   #simple 
    1916     
    20      
    21     if not my_step_importer.read_file(): 
    22         return False 
    23  
    24      
    25     my_shape = my_step_importer.get_shapes_avec_nom() 
    26     
     17    my_step_importer.read_file() 
     18 
     19 
     20 
     21    fileName, fileExtension = os.path.splitext(doc_file.filename)  
     22    my_shapes_arbre = my_step_importer.get_shapes_arbre() 
     23    my_shapes_simples = my_step_importer.get_shapes_simples() 
     24     
     25    init_time = time.time() 
     26     
     27    for i in range(len(my_shapes_simples)): 
     28            new_stp_jss= stp_to_jss() 
     29            new_stp_jss.stp = doc_file 
     30            new_stp_jss.save() 
     31            print "processing mesh " ,my_shapes_simples[i].nom ,   " " , i+1 , "/" ,len(my_shapes_simples) 
     32            my_mesh = mesh_shape(my_shapes_simples[i].shape) 
     33  
     34            name = new_stp_jss.js.storage.get_available_name(fileName+".js") 
     35            path = os.path.join(new_stp_jss.js.storage.location, name) 
     36             
     37            if(not mesh_to_3js(my_mesh,path.encode(),"_"+str(i))): 
     38                new_stp_jss.delete() 
     39                print "Error generating fichier .JS for shape : " ,my_shapes_simples[i].nom  
     40                return False     
     41                #exception 
     42            else: 
     43 
     44                new_stp_jss.js = name 
     45                new_stp_jss.save() 
     46                 
     47    print '\n\nFinisehd computation of all shapes in %fs'%(time.time()-init_time) 
    2748 
    2849 
    2950    ###     Remplir my_shape avec information sur vertex, faces et graph avec l' arbre de nom de parts, root avec nom de parts roots. 
    3051    graph=kjGraph() 
    31     fileName, fileExtension = os.path.splitext(doc_file.filename) 
     52 
    3253    root=[] 
    3354    part_numeration=[] 
    3455    part_numeration.append(0) 
    35     ok=parcours_recursif(my_shape,fileName,doc_file,graph,part_numeration,root) 
     56    objects_numeration=[] 
     57    objects_numeration.append(0) 
     58    menu_generate_objects=[] 
     59    menu_generate_objects.append("var object3D = new THREE.Object3D();\n") 
     60    for i in range(len(my_shapes_arbre)): 
     61        loc=[] 
     62        nom=my_shapes_arbre[i].nom+"."+str(part_numeration[0]) 
     63        root.append(nom) 
     64        ok=parcours_recursif(my_shapes_arbre[i],graph,part_numeration,menu_generate_objects,objects_numeration,loc,nom,True) 
     65 
    3666    ### 
    37  
     67     
    3868     
    3969 
     
    6393             
    6494            #####           Generate objects javascript 
    65             generate_objects(graph,root,output) 
     95            ###generate_objects(graph,root,output) 
     96            output.write(menu_generate_objects[0]) 
    6697            #####           End generate objects 
    6798             
     
    84115  
    85116                    
    86 def generate_objects(graph,root,output,nom=''): 
     117 
     118             
     119def generate_functions(graph,root,output,nom=''): 
     120 
    87121 
    88122    if not nom=='': #nom = '' only in first interaction 
    89123        root=graph.neighbors(nom) 
    90  
    91  
    92     for i in range(len(root)): 
    93   
    94          
    95         feuille=graph.neighbors(root[i]) 
    96         if not len(feuille)==0:  
    97             part_name, part_id = os.path.splitext(root[i]) 
    98             part_id=part_id.replace(".","") 
    99             output.write("var part%s=new THREE.Object3D();\n"%part_id) 
    100             generate_objects(graph,'',output,root[i]) 
    101         else: 
    102             if str(root[i]).count(".") == 0: # para evitar generar objetos de instances arbresnom que no tienen hijos se puede dar el caso de shape sin informacion que no van a generar hijos 
    103                 output.write("var object%s=new THREE.Mesh( new _%s(), new THREE.MeshNormalMaterial({opacity:0.5,shading:THREE.SmoothShading}) );\n"%(root[i],root[i]))   
    104              
    105 def generate_functions(graph,root,output,nom=''): 
    106  
    107  
    108     if not nom=='': #nom = '' only in first interaction 
    109         root=graph.neighbors(nom) 
    110  
    111  
    112124 
    113125    for i in range(len(root)): 
     
    171183   
    172184#el grafo para las partes tiene el nombre .id correlativa, para las hojas es directamente un ID             
    173 def parcours_recursif(my_shape,fileName,doc_file,graph,part_numeration,root,old_name=''): 
    174      
    175     for i in range(len(my_shape)): 
    176    
    177          
    178          
    179         if  isinstance(my_shape[i],arbre_nom_shapes): 
    180             nom=my_shape[i].nom 
     185def parcours_recursif(my_shapes_arbre,graph,part_numeration,menu_generate_objects,objects_numeration,loc,old_name,root=False): 
     186     
     187     
     188    if  isinstance(my_shapes_arbre,node_shape): 
     189        loc.append(my_shapes_arbre.loc)  
     190 
     191        if not root: 
     192            nom=my_shapes_arbre.nom 
    181193            nom=nom+"."+str(part_numeration[0]) 
    182             part_numeration[0]=part_numeration[0]+1 
    183             if not old_name == '': 
    184                 graph.add(old_name,nom) 
    185             else:  #nom=root 
    186                 root.append(nom)   
    187             parcours_recursif(my_shape[i].children,fileName,doc_file,graph,part_numeration,root,nom) 
    188              
    189              
    190  
     194            graph.add(old_name,nom) 
    191195        else: 
    192             new_stp_jss= stp_to_jss() 
    193             new_stp_jss.stp = doc_file 
    194             new_stp_jss.save() 
    195             print "procesamos el mesh ",old_name  
    196             my_mesh = mesh_shape(my_shape[i]) 
    197             name = new_stp_jss.js.storage.get_available_name(fileName+".js") 
    198             path = os.path.join(new_stp_jss.js.storage.location, name) 
    199             if(not mesh_to_3js(my_mesh,path.encode(),"_"+str(new_stp_jss.id))): 
    200                 new_stp_jss.delete() 
    201  
    202                 return False     
    203                 #exception 
    204             else: 
    205                 graph.add(old_name,new_stp_jss.id) 
    206                 new_stp_jss.js = name 
    207                 new_stp_jss.save() 
    208  
    209              
    210              
    211              
     196            nom=old_name 
     197             
     198        menu_generate_objects[0]+="var part%s=new THREE.Object3D();\n"%part_numeration[0] 
     199        part_numeration[0]=part_numeration[0]+1 
     200         
     201        for i in range(len(my_shapes_arbre.children)): 
     202         
     203            parcours_recursif(my_shapes_arbre.children[i],graph,part_numeration,menu_generate_objects,objects_numeration,loc[:],nom) 
     204             
     205             
     206             
     207    else: #is instance of feuille_nom_shapes 
     208        menu_generate_objects[0]+="var object%s=new THREE.Mesh( new _%s(), new THREE.MeshNormalMaterial({opacity:0.5,shading:THREE.SmoothShading}) );\n"%(objects_numeration[0],my_shapes_arbre.reference) 
     209        #menu_generate_objects[0]+="var object%s=new THREE.Mesh( new _%s(), new THREE.MeshBasicMaterial({opacity:0.5}) );\n"%(objects_numeration[0],my_shapes_arbre.reference) 
     210        menu_generate_objects[0]+="object3D.add(object%s);\n"%objects_numeration[0] 
     211            #hacer las translaciones 
     212        if isinstance(my_shapes_arbre.loc,TopLoc_Location):      
     213            loc.append(my_shapes_arbre.loc)  
     214         
     215         
     216         
     217        if len(loc)>0: 
     218            transformation=gp_Trsf() 
     219            gp=gp_XYZ() 
     220            for g in range(len(loc)): 
     221                if g==0: 
     222                    transformation=loc[g].Transformation() 
     223                else: 
     224                    transformation.Multiply(loc[g].Transformation()) 
     225                     
     226            a ,b =transformation.GetRotation(gp) 
     227            t=transformation.TranslationPart() 
     228            if a:         
     229                menu_generate_objects[0]+="object%s.matrix.setRotationAxis(new THREE.Vector3( %s, %s, %s ), %s);\n"%(objects_numeration[0],gp.X(),gp.Y(),gp.Z(),b) 
     230                 
     231            menu_generate_objects[0]+="object%s.matrix.setPosition(new THREE.Vector3( %s, %s, %s ));\n"%(objects_numeration[0],t.X(),t.Y(),t.Z()) 
     232            menu_generate_objects[0]+="object%s.matrixAutoUpdate = false;\n"%objects_numeration[0] 
     233             
     234             
     235        graph.add(old_name,objects_numeration[0]) 
     236        objects_numeration[0]=objects_numeration[0]+1 
     237                   
    212238    return True          
    213239 
     
    216242def mesh_shape(shape): 
    217243    """ Take a topods_shape instance, returns the tesselated object""" 
     244    ''' Connect a ode.Trimesh to this body. The mesh is generated from the MSH subpackage. vertices lits 
     245    and faces indices are passed to the trimesh. 
     246    The default mesh precision is divided by the quality factor: 
     247    - if quality_factor>1, the mesh will be more precise, i.e. more triangles (more precision, but also 
     248    more memory consumption and time for the mesher, 
     249    - if quality_factor<1, the mesh will be less precise. 
     250    By default, this argument is set to 1 : the default precision of the mesher is used. 
     251    ''' 
     252    quality_factor=1 
    218253    a_mesh = QuickTriangleMesh(DISPLAY_LIST=True) 
    219254    a_mesh.set_shape(shape) 
    220     # define precision for the mesh 
    221     a_mesh.set_precision(a_mesh.get_precision()/2.) 
    222     # then compute the mesh 
     255    a_mesh.set_precision(a_mesh.get_precision()/quality_factor) 
    223256    a_mesh.compute() 
    224257    return a_mesh        
    225258 
    226     return True 
    227259 
    228260 
  • branches/3D/openPLM/document3D/models.py

    r599 r601  
    33from openPLM.plmapp.models import * 
    44from openPLM.plmapp.controllers import DocumentController 
    5  
     5from OCC.TopLoc import TopLoc_Location 
    66from django.db.models import get_model 
    77# Create your models here. 
     8 
    89 
    910 
     
    2829 
    2930 
    30  
    31 media3Djs = DocumentStorage(location=settings.MEDIA_ROOT+"3D/")     
     31#storage for fichiers .js that were representing the geometries of the file step 
     32media3Djs = DocumentStorage(location=settings.MEDIA_ROOT+"3D/") 
     33#storage for fichier .js that were representing the arborescence of the file step     
    3234media3Djs_navigabilite = DocumentStorage(location=settings.MEDIA_ROOT+"3D/navigabilite") 
    3335 
    3436 
     37#Link between file step and his navigabilitie   1 for 1 
    3538class stp_to_jss_navigabilite(models.Model): 
    3639 
     
    3841    stp = models.ForeignKey(DocumentFile)  
    3942     
    40           
     43#Link between file step and his geometries   1 for *          
    4144class stp_to_jss(models.Model): 
    4245 
     
    4447    stp = models.ForeignKey(DocumentFile)     
    4548 
    46 class arbre_nom_shapes(): 
     49class simple_shape(): 
     50    def __init__(self, nom,shape): 
     51        self.nom = nom 
     52        self.shape = shape 
     53#Representation d un node dans l arborescence du fichier step 
     54#nom: nom du composant 
     55#children: list d'enfants 
     56#loc: garde la localisation du composan (si le composant n'est pas une reference a autre composant, la localisation va etre la matrix Identity) 
     57class node_shape(): 
    4758    nom='' 
    4859    children=[] 
    49     def __init__(self, nom): 
     60    loc=TopLoc_Location() 
     61    def __init__(self, nom,location=''): 
    5062        self.nom = nom 
    5163        self.children=[] 
    52      
    53 #restricciones fichero:si no se genera el jss , o si el jss generado es demasiado grande 
     64        self.loc = location 
     65#Representation d une feuille dans l arborescence du fichier step qui contient information geometric 
     66#nom: nom du composant 
     67#loc: garde la localisation du composan (si le composant n est pas une reference a autre composant, la localisation va etre la matrix Identity) 
     68#ref: pendent la generation de fichiers step nous allons remplir un vecteur de toutes differentes geometrie ,il indique l indice dans le vecteur qui correspond a la geometrie   
     69class feuille_nom_shapes(): 
     70    nom='' 
     71    loc=TopLoc_Location() 
     72    reference='' 
     73    def __init__(self, nom,location,ref): 
     74        self.nom = nom 
     75        self.loc = location 
     76        self.reference=ref 
     77         
     78         
     79 
    5480class Document3DController(DocumentController): 
    5581 
    5682    def handle_added_file(self, doc_file): 
    57         from openPLM.document3D.aficher import convertir_STP_to_JSS 
     83        from openPLM.document3D.aficher import convertir_STP_to_WebGL 
    5884         
    5985        fileName, fileExtension = os.path.splitext(doc_file.filename) 
    60         if fileExtension.upper()== '.STP':  
     86        if fileExtension.upper()== '.STP' or fileExtension.upper()=='.STEP':  
     87            #delete old jss file (only neccesary in case of check-in -> handle) 
     88            eliminer_associes(doc_file) 
     89            ok=convertir_STP_to_WebGL(doc_file) 
    6190             
    62              
    63  
    64             #delete old jss file (only neccesary in case of check-in -> handle) 
    65             multi_jss=stp_to_jss.objects.filter(stp=doc_file) 
    66             count=multi_jss.count() 
    67             for i in range(count):   
    68                 os.remove(settings.MEDIA_ROOT+"3D/"+multi_jss[count-i-1].js.name) 
    69                 print "Deleting .jss associes:" , (settings.MEDIA_ROOT+"3D/"+multi_jss[count-i-1].js.name) 
    70                 multi_jss[count-i-1].delete() 
    71  
    72             #delete old jss_navigabilite file 
    73             multi_jss=stp_to_jss_navigabilite.objects.filter(stp=doc_file) 
    74             count=multi_jss.count() 
    75             for i in range(count):   
    76                 os.remove(settings.MEDIA_ROOT+"3D/navigabilite/"+multi_jss[count-i-1].js.name) 
    77                 print "Deleting navigabilite .jss associe:" , (settings.MEDIA_ROOT+"3D/navigabilite/"+multi_jss[count-i-1].js.name) 
    78                 multi_jss[count-i-1].delete() 
    79             # end delteting 
    80              
    81             if not convertir_STP_to_JSS(doc_file): 
     91            if not ok: 
     92                #effacer touts les fichiers generes 
     93                eliminer_associes(doc_file) 
     94                print "Error: It was not possible to generate a sight 3D of the file." 
    8295                return False             
    8396 
     
    88101         
    89102        fileName, fileExtension = os.path.splitext(doc_file.filename) 
    90         if fileExtension.upper()== '.STP':  
    91          
    92             multi_jss=stp_to_jss.objects.filter(stp=doc_file) 
    93             count=multi_jss.count() 
    94             print "vamos a eliminar : " , count 
    95             for i in range(count): 
    96                 if not multi_jss[count-i-1].js.name =="": 
    97                     os.remove(settings.MEDIA_ROOT+"3D/"+multi_jss[count-i-1].js.name) 
    98                     #os.remove(settings.MEDIA_ROOT+"3D/"+multi_jss[i].js.name) 
    99                     print "Deleting .jss associes :" , (settings.MEDIA_ROOT+"3D/"+multi_jss[count-i-1].js.name) 
    100                 multi_jss[count-i-1].delete() 
    101                  
    102             multi_jss=stp_to_jss_navigabilite.objects.filter(stp=doc_file) 
    103             count=multi_jss.count() 
    104             for i in range(count): 
    105                 os.remove(settings.MEDIA_ROOT+"3D/navigabilite/"+multi_jss[count-i-1].js.name) 
    106                 print "Deleting .jss associes :" , (settings.MEDIA_ROOT+"3D/navigabilite/"+multi_jss[count-i-1].js.name) 
    107                 multi_jss[count-i-1].delete() 
    108  
    109  
     103        if fileExtension.upper()== '.STP' or fileExtension.upper()=='.STEP': 
     104          
     105            eliminer_associes(doc_file) 
    110106            super(Document3DController, self).delete_file(doc_file) 
    111              
    112  
    113  
    114              
     107     
    115108        else: 
    116109         
     
    118111 
    119112 
    120 class Arbre: 
     113#elimine les fichiers .jss associes a un fichier step 
     114def eliminer_associes(doc_file): 
     115             
     116    multi_jss=stp_to_jss.objects.filter(stp=doc_file) 
     117    count=multi_jss.count() 
     118    for i in range(count): 
     119        if not multi_jss[count-i-1].js.name=="":   
     120            os.remove(settings.MEDIA_ROOT+"3D/"+multi_jss[count-i-1].js.name) 
     121        print "Deleting geometry .jss associes:" , (settings.MEDIA_ROOT+"3D/"+multi_jss[count-i-1].js.name) 
     122        multi_jss[count-i-1].delete() 
    121123 
    122   def __init__(self, datos,): 
    123     self.datos  
    124     self.nom = nom 
    125     self.hijos  = [] 
    126124 
     125    multi_jss=stp_to_jss_navigabilite.objects.filter(stp=doc_file) 
     126    count=multi_jss.count() 
     127    for i in range(count): 
     128        if not multi_jss[count-i-1].js.name=="":   
     129            os.remove(settings.MEDIA_ROOT+"3D/navigabilite/"+multi_jss[count-i-1].js.name) 
     130        print "Deleting navigabilite .jss associe:" , (settings.MEDIA_ROOT+"3D/navigabilite/"+multi_jss[count-i-1].js.name) 
     131        multi_jss[count-i-1].delete() 
    127132             
    128133 
  • branches/3D/openPLM/document3D/templates/Display3D.htm

    r600 r601  
    233233                <script type="text/javascript"> 
    234234                 
    235                     var camera, scene, renderer, object3D; 
     235                    var camera, scene, renderer;//object3D; 
    236236                    var geometry ; 
    237237                    var container; 
     
    309309                                 
    310310                                scene = new THREE.Scene(); 
    311                 object3D = new THREE.Object3D(); 
     311                //object3D = new THREE.Object3D(); 
    312312 
    313313                                //object3D.overdraw = true; 
     
    321321                                 
    322322                                    
    323                                 {% for item in multi_image3D %} 
    324                 object{{item.id}}.overdraw = true; 
    325                 object3D.add(object{{item.id}}); 
    326                 {% endfor %} 
     323                                //{% for item in multi_image3D %} 
     324                //object{{item.id}}.overdraw = true; 
     325                //object3D.add(object{{item.id}}); 
     326                //{% endfor %} 
    327327                 
    328328 
     
    357357                 
    358358                menu(); 
     359                //alert(object6.rotation.x+" "+object6.rotation.y+" "+object6.rotation.z);  
     360                //object3D.rotation.y+=1.5707963267948966; 
    359361 
    360362                        } 
     
    446448 
    447449 
    448                                  object3D.rotation.z = (targetXRotation - object3D.rotation.z) * 0.2; 
     450                                 object3D.rotation.y = (targetXRotation - object3D.rotation.y) * 0.2; 
    449451                                 object3D.rotation.x = (targetYRotation - object3D.rotation.x) * 0.2; 
    450452                                //object3D.rotation.y += ( targetRotation - object3D.rotation.y ) * 0.02; 
  • branches/3D/openPLM/document3D/views.py

    r597 r601  
    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 
     51            if multi_image.count()>0: 
     52                menu_navigabilite=stp_to_jss_navigabilite.objects.filter(stp=image)[0].js.name 
     53            else:     
     54                menu_navigabilite="" 
    5255 
    53             #ctx.update({'current_page':'3D','select_stp_form': form,'images_3D':options["Display"].js.name}) 
    5456            ctx.update({'current_page':'3D','select_stp_form': form, 'multi_image3D' : multi_image ,'menu_navigabilite' : menu_navigabilite, })     
    5557            return r2r('Display3D.htm', ctx, request) 
Note: See TracChangeset for help on using the changeset viewer.