Changeset 874 in main for branches


Ignore:
Timestamp:
03/09/12 15:16:52 (8 years ago)
Author:
agalech
Message:

Compose decompose v5.0

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

Legend:

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

    r867 r874  
    55from OCC.gp import * 
    66from openPLM.plmapp.controllers.part import PartController 
    7 from django.db.models import Q 
    87from openPLM.document3D.models import *  
    98    
     
    138137def read_ArbreFile(doc_file,user=None): 
    139138 
     139  
    140140    try:      
    141141        new_ArbreFile=ArbreFile.objects.get(stp=doc_file) 
     
    153153def add_child_GeometryFiles(user,doc_file,files_to_add): 
    154154 
    155     controller=DocumentController(doc_file.document,user) 
    156     part=controller.get_attached_parts() 
     155    stp_related ,list_loc=get_step_related(user,doc_file) 
     156    for stp in stp_related:  
     157        files_to_add+=list(GeometryFile.objects.filter(stp=stp)) 
     158        add_child_GeometryFiles(user,stp,files_to_add) 
     159                         
     160                             
     161                             
     162def add_child_ArbreFile(user,doc_file,product): 
     163 
     164 
     165    stp_related,list_loc=get_step_related(user,doc_file) 
     166 
     167    for i,stp in enumerate(stp_related):     
     168        try: 
     169            new_ArbreFile=ArbreFile.objects.get(stp=stp) 
     170            new_product=generate_product(json.loads(new_ArbreFile.file.read()))                                                       
     171            product.links.append(Link(new_product))                            
     172            for location in list_loc[i]: 
     173                product.links[-1].add_occurrence(location.name,Matrix_rotation(location.Transforms())) 
     174            add_child_ArbreFile(user,stp,new_product)                        
     175        except: 
     176            pass 
     177 
     178                                 
     179 
     180def get_step_related(user,doc_file,locations=None): 
     181    stp_related=[] 
     182    list_loc=[] 
     183    Doc3D=Document3D.objects.get(id=doc_file.document.id) 
     184    part=Doc3D.PartDecompose 
     185     
    157186    if part: 
    158         part=part[0] 
    159         part_parent=part.part 
    160         list_link=ParentChildLink.objects.filter(parent=part_parent) 
     187        list_link=ParentChildLink.objects.filter(parent=part) 
    161188        for i in range(len(list_link)): 
    162             link=Location_link.objects.filter(link=list_link[i]) 
    163             if link:  
     189            locations=list(Location_link.objects.filter(link=list_link[i])) 
     190            if locations:  
    164191                part_child=list_link[i].child 
    165192                part_controller=PartController(part_child,user) 
    166193                list_doc=part_controller.get_attached_documents() 
     194                 
    167195                for Doc_Part_Link in list_doc: 
    168                     if Doc_Part_Link.document.type=="Document3D":# y si hay mas de uno ?? tratar el caso 
    169                         #y si esta descompuesto? 
    170                         STP_file=Doc_Part_Link.document.files.filter(Q(filename__iendswith=".stp") | Q(filename__iendswith=".step")) 
     196                    if Doc_Part_Link.document.type=="Document3D": 
     197                        STP_file=Doc_Part_Link.document.files.filter(is_stp) 
    171198                        if STP_file.exists(): 
    172                             print "\n\nEncuentra un hijo\n\n" 
    173                             to_add=GeometryFile.objects.filter(stp=STP_file[0]) 
    174                             for t in range(len(to_add)): 
    175                                 files_to_add.append(to_add[t])  
    176                             add_child_GeometryFiles(user,STP_file[0],files_to_add) 
    177                              
    178                              
    179 def add_child_ArbreFile(user,doc_file,product): 
    180  
    181      
    182     controller=Document3DController(doc_file.document,user) 
    183     #puede estar unido a mas de una parte? 
    184     part=controller.get_attached_parts() 
    185     if part: 
    186         part=controller.get_attached_parts()[0] 
    187         part_parent=part.part 
    188         list_link=ParentChildLink.objects.filter(parent=part_parent) 
    189         for i in range(len(list_link)): 
    190             list_loc=Location_link.objects.filter(link=list_link[i]) 
    191             if len(list_loc)>0:  
    192                 part_child=list_link[i].child 
    193                 part_controller=PartController(part_child,user) 
    194                 list_doc=part_controller.get_attached_documents() 
    195                 for Doc_Part_Link in list_doc: 
    196                     if Doc_Part_Link.document.type=="Document3D":# y si hay mas de uno ?? tratar el caso 
    197                         STP_file=Doc_Part_Link.document.files.filter(Q(filename__iendswith=".stp") | Q(filename__iendswith=".step")) 
    198                         if STP_file.exists(): 
    199                             try: 
    200                                 new_ArbreFile=ArbreFile.objects.get(stp=STP_file[0]) 
    201                                 new_product=generate_product(json.loads(new_ArbreFile.file.read()))                                                       
    202                                 product.links.append(Link(new_product))                             
    203                                 for location in list_loc: 
    204                                     product.links[-1].add_occurrence(location.name,Matrix_rotation(location.Transforms())) 
    205                                 add_child_ArbreFile(user,STP_file[0],new_product)                        
    206                             except: 
    207                                 pass 
    208     else: 
    209         pass 
    210                                  
    211                                  
    212  
     199                            stp_related.append(STP_file[0]) 
     200                            list_loc.append(locations) 
     201                        else: 
     202                            raise Document3D_link_Error 
     203                             
     204                        break 
     205 
     206    return stp_related , list_loc 
     207                             
    213208                                                        
    214209def generate_product(arbre):     
  • branches/3D/openPLM/document3D/decomposer.py

    r867 r874  
    99import os, os.path 
    1010import openPLM.plmapp.models as models 
    11 #from openPLM.document3D.step_reader import *  
    1211from openPLM.plmapp.controllers import get_controller 
    1312 
     
    5453 
    5554 
    56 def is_decomposable(DocumentController): 
    57  
    58  
    59     STP_file=DocumentController.files.filter(Q(filename__iendswith=".stp") | Q(filename__iendswith=".step")) 
     55def is_decomposable(Document3D): 
     56 
     57     
     58    STP_file=Document3D.files.filter(is_stp) 
    6059    if STP_file.exists() and elements_decomposable(STP_file[0]) and STP_file[0].checkout_valid and not STP_file[0].locked: 
    6160        return STP_file[0]       
     
    154153     
    155154 
    156 def already_decompose(ctrl_part): 
    157  
    158     list_link=ParentChildLink.objects.filter(parent=ctrl_part) 
    159     for link in list_link: 
    160         if Location_link.objects.filter(link=link):  
    161             return True 
    162     return False 
     155 
    163156 
    164157     
     
    190183        raise ValueError("Native file has a standard related locked file.")  
    191184    
    192     
    193     #file=name 
    194     """     
    195         new_GeometryFile.file = new_GeometryFile.file.storage.get_available_name(fileName+".geo") 
    196         new_GeometryFile.stp = new_doc_file 
    197         new_GeometryFile.index = index_reference[0] 
    198         new_GeometryFile.save()  
    199         to_delete.append(new_GeometryFile.file.path)  
    200     """     
    201      
    202           
     185              
    203186    new_doc_file.filename=new_name 
    204187    new_doc_file.size=f.size 
    205     new_doc_file.file=f 
     188    new_doc_file.file=name 
    206189    new_doc_file.document=Doc_controller.object 
    207190    new_doc_file.save() 
    208191    to_delete.append(new_doc_file.file.path)        
    209192    os.chmod(new_doc_file.file.path, 0400) 
    210     os.remove(path.encode()) 
     193 
    211194    Doc_controller._save_histo("File added", "file : %s" % new_doc_file.filename) 
    212195 
  • branches/3D/openPLM/document3D/models.py

    r867 r874  
    55#from openPLM.plmapp.filehandlers import HandlersManager 
    66from OCC.gp import * 
    7  
     7from django.db.models import Q 
    88 
    99 
     
    5656    controller=Document3DController(object,user)  
    5757 
    58     #solo si ha tenido exito los borra, sino deja los viejos 
     58 
    5959    delete_GeometryFiles(doc_file) 
    6060 
     
    6464    write_ArbreFile(product_arbre,doc_file) 
    6565     
    66     #y si fallo?       
    67     print "\n\n\nTerMina saliEndO BiEN y CoRrecTo\n\n\n"          
     66    
    6867    return True 
    6968             
     
    7170 
    7271 
    73      
     72is_stp=Q(filename__iendswith=".stp") | Q(filename__iendswith=".step")  
     73 
     74    
    7475class Document3DController(DocumentController): 
    7576 
     
    8081 
    8182        fileName, fileExtension = os.path.splitext(doc_file.filename) 
     83        if self.object.files.filter(is_stp).exclude(id=doc_file.id): 
     84            self.delete_file(doc_file) 
     85            raise ValueError("Only one step documentfile allowed for each document3D")                         
    8286        if fileExtension.upper() in ('.STP', '.STEP'): 
    8387            handle_step_file(doc_file.pk,self.object.id,self._user.id) 
     
    107111        delete_ArbreFile(doc_file)           
    108112        doc_file.deprecated=True 
     113        doc_file.save() 
    109114        self._save_histo("File deprecated", "file : %s" % doc_file.filename)            
    110115      
     
    149154        if os.path.exists(filename) and os.path.isfile(filename): 
    150155            os.remove(filename) 
    151 """                         
    152 class Document_decompose_Error(Exception):   
    153     def __init__(self, index_error): 
    154         self.index_error=index_error 
    155  
     156             
     157             
     158class Document3D_link_Error(Exception): 
    156159    def __unicode__(self): 
    157         return u"Columns reference, type, revision are not unique for index : %s"%self.index_error 
    158 """         
     160        return u"Did not find a file stp associated with the link" 
     161         
     162               
    159163class Document3D_decomposer_Error(Exception): 
    160164    def __init__(self, to_delete=None):   
  • branches/3D/openPLM/document3D/tests/views.py

    r867 r874  
    325325 
    326326 
    327 class more_3dTest(CommonViewTest): 
    328  
    329     def setUp(self): 
    330         super(view_3dTest, self).setUp() 
    331         self.document = Document3DController.create('doc1', 'Document3D', 
    332                 'a', self.user, self.DATA) 
    333  
    334     def update_time(self,data): 
    335         data.update({u'last_modif_time': [u'%s-%s-%s %s:%s:%s'%(self.document.mtime.year,self.document.mtime.month,self.document.mtime.day,self.document.mtime.hour,self.document.mtime.minute,self.document.mtime.second)], 
    336            u'last_modif_microseconds' : [u'%s'%self.document.mtime.microsecond] 
    337            }) 
     327  
    338328 
    339329 
  • branches/3D/openPLM/document3D/views.py

    r867 r874  
    1919from openPLM.plmapp.controllers import get_controller 
    2020import openPLM.plmapp.forms as forms 
    21  
    2221from django.conf import settings 
    2322 
     
    8281        javascript_arborescense=False 
    8382    else: 
     83 
    8484 
    8585        GeometryFiles=list(GeometryFile.objects.filter(stp=doc_file))   
     
    149149        list_doc=part_controller.get_attached_documents() 
    150150        for Doc_Part_Link in list_doc: 
    151             controller=DocumentController(Doc_Part_Link.document,request.user) 
    152             if is_decomposable(controller):        
    153                 is_children_decomposable[index]=True 
    154                      
     151            try: 
     152                Doc3D=Document3D.objects.get(id=Doc_Part_Link.document_id) 
     153            #controller=DocumentController(Doc_Part_Link.document,request.user) 
     154                if not Doc3D.PartDecompose and is_decomposable(Doc3D):        
     155                    is_children_decomposable[index]=True 
     156            except: 
     157                pass         
    155158        index+=1 
    156159              
     
    162165 
    163166    decompose_valid=[] 
    164     if not already_decompose(obj):      
     167    if not Document3D.objects.filter(PartDecompose=obj.object):      
    165168        list_doc=obj.get_attached_documents() 
    166169        for Doc_Part_Link in list_doc: 
    167             controller=DocumentController(Doc_Part_Link.document,request.user) 
    168             file_stp =is_decomposable(controller) 
    169             if file_stp:              
    170                 decompose_valid.append((Doc_Part_Link.document,file_stp))  
     170            try: 
     171                Doc3D=Document3D.objects.get(id=Doc_Part_Link.document_id) 
     172                if not Doc3D.PartDecompose:  
     173                    file_stp =is_decomposable(Doc3D) 
     174                    if file_stp:              
     175                        decompose_valid.append((Doc_Part_Link.document,file_stp)) 
     176            except: 
     177                pass   
    171178 
    172179                             
     
    198205    obj, ctx = get_generic_data(request, obj_type, obj_ref, obj_revi)                      
    199206 
    200     stp_file=DocumentFile.objects.get(id=stp_id)   
     207    stp_file=DocumentFile.objects.get(id=stp_id) 
     208     
     209     
     210    doc_linked_to_part=obj.get_attached_documents().values_list("document_id", flat=True)      
     211    if not stp_file.document_id in doc_linked_to_part: 
     212        raise ValueError("Not allowed operation.The Document and the Part are not linked") 
     213    if Document3D.objects.filter(PartDecompose=obj.object): 
     214        raise ValueError("Not allowed operation.This Part already forms a part of another decomposition")     
     215    try:     
     216        doc3D=Document3D.objects.get(id=stp_file.document_id)         
     217    except Document3D.DoesNotExist: 
     218        raise ValueError("Not allowed operation.The document is not a subtype of document3D")      
     219              
     220    if doc3D.PartDecompose:# y si el documento no es 3D 
     221        raise ValueError("Not allowed operation.This Document already forms a part of another decomposition")                  
     222         
     223              
    201224    if request.method == 'POST': 
    202225     
     
    210233        form_Doc_Part_attributes = [] 
    211234        last_time_modification=Form_save_time_last_modification(request.POST) 
    212  
     235        #comprobar que la parte no ha sido descompuesta con anterioridad 
     236         
     237 
     238         
     239         
    213240        if last_time_modification.is_valid(): 
    214  
    215241            old_modification_data_time=last_time_modification.cleaned_data['last_modif_time'] 
    216242            old_modification_data_microsecond=last_time_modification.cleaned_data['last_modif_microseconds'] 
     
    247273                            ctrl=ctrl(stp_file.document,obj._user) 
    248274                            ctrl.deprecate_file(stp_file) 
     275                            Doc3D=Document3D.objects.get(id=ctrl.object.id) 
     276                            Doc3D.PartDecompose=obj.object 
     277                            Doc3D.save() 
    249278                            return HttpResponseRedirect(obj.plmobject_url+"BOM-child/")                                                       
    250279                        finally: 
Note: See TracChangeset for help on using the changeset viewer.