From 1f8c2e8f2c1e8ffd53326f17c8fd3332124ce861 Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 7 Jan 2014 21:13:41 +0100 Subject: [PATCH 1/3] + Fix target name --- src/Mod/Web/App/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Web/App/CMakeLists.txt b/src/Mod/Web/App/CMakeLists.txt index d81a29721..aaebdde25 100644 --- a/src/Mod/Web/App/CMakeLists.txt +++ b/src/Mod/Web/App/CMakeLists.txt @@ -59,7 +59,7 @@ elseif(MINGW) else(MSVC) set_target_properties(Web PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Mod/Web) set_target_properties(Web PROPERTIES PREFIX "") - set_target_properties(Fem PROPERTIES INSTALL_RPATH ${INSTALL_RPATH}) + set_target_properties(Web PROPERTIES INSTALL_RPATH ${INSTALL_RPATH}) endif(MSVC) install(TARGETS Web DESTINATION lib) From 7d06fc013609382afa8429b13d74b4827191de22 Mon Sep 17 00:00:00 2001 From: jriegel Date: Mon, 6 Jan 2014 13:17:19 +0100 Subject: [PATCH 2/3] further implement SimpleReader --- src/Mod/Import/App/SCL/SimpleReader.py | 72 ++++++++++++++++++++------ 1 file changed, 57 insertions(+), 15 deletions(-) diff --git a/src/Mod/Import/App/SCL/SimpleReader.py b/src/Mod/Import/App/SCL/SimpleReader.py index bdcb7228d..d2193f38c 100644 --- a/src/Mod/Import/App/SCL/SimpleReader.py +++ b/src/Mod/Import/App/SCL/SimpleReader.py @@ -62,6 +62,9 @@ class SimpleParser: self._p21loader = Part21.Part21Parser("gasket1.p21") self.schemaModule = None self.schemaClasses = None + self.instanceMape = {} + for i in self._p21loader._instances_definition.keys(): + print i,self._p21loader._instances_definition[i][0],self._p21loader._instances_definition[i][1] def instaciate(self): """Instaciate the python classe from the enteties""" @@ -77,26 +80,65 @@ class SimpleParser: if self.schemaModule: self.schemaClasses = dict(inspect.getmembers(self.schemaModule)) - for number_of_ancestor in self._p21loader._number_of_ancestors.keys(): - for entity_definition_id in self._p21loader._number_of_ancestors[number_of_ancestor]: - #print entity_definition_id,':',self._p21loader._instances_definition[entity_definition_id] - self.create_entity_instance(entity_definition_id) + for i in self._p21loader._instances_definition.keys(): + #print i + if not self.instanceMape.has_key(i): + self._create_entity_instance(i) + #for number_of_ancestor in self._p21loader._number_of_ancestors.keys(): + # for entity_definition_id in self._p21loader._number_of_ancestors[number_of_ancestor]: + # print entity_definition_id,':',self._p21loader._instances_definition[entity_definition_id] + # self._create_entity_instance(entity_definition_id) - def create_entity_instance(self, instance_id): - instance_definition = self._p21loader._instances_definition[instance_id] - print "Instance definition to process",instance_definition - # first find class name - class_name = instance_definition[0].lower() - print "Class name:%s"%class_name + def _create_entity_instance(self, instance_id): + if self._p21loader._instances_definition.has_key(instance_id): + instance_definition = self._p21loader._instances_definition[instance_id] + print "Instance definition to process",instance_definition + # first find class name + class_name = instance_definition[0].lower() + #print "Class name:%s"%class_name - if not class_name=='': - object_ = self.schemaClasses[class_name] - # then attributes - print object_.__doc__ - #instance_attributes = instance_definition[1] + if not class_name=='': + classDef = self.schemaClasses[class_name] + # then attributes + #print object_.__doc__ + instance_attributes = instance_definition[1] + self._transformAttributes(instance_attributes) + print 'Attribute list after transform: ',instance_attributes + + self.instanceMape[instance_id] = int(41) # dummy instance to test + else: + print '############################# lost entity: ',instance_id + self.instanceMape[instance_id] = int(41) # dummy #print "instance_attributes:",instance_attributes #a = object_(*instance_attributes) + def _transformAttributes(self,attrList): + n = 0 + for i in attrList: + if isinstance(i,list): + self._transformAttributes(i) + elif isinstance(i,str): + if i == '': + print 'empty string' + elif i[0] == '#': + key = int(i[1:]) + print 'Item: ',int(i[1:]) + if self.instanceMape.has_key(key): + attrList[n] = self.instanceMape[key] + else: + self._create_entity_instance(key) + if not self.instanceMape.has_key(key): + raise NameError("Needed instance not instanciated: ",key) + elif i[0] == '$': + print 'Dollar' + elif i[0] == "'": + print 'Dopelstring: ',i[1:-1] + else: + print 'String: ',i + else: + raise NameError("Unknown attribute type") + n = n+1 + if __name__ == "__main__": sys.path.append('..') # path where config_control_design.py is found parser = SimpleParser("gasket1.p21") # simple test file From 50492a5f5f796ea783b87e8d4cb497fcb5340c02 Mon Sep 17 00:00:00 2001 From: jriegel Date: Tue, 7 Jan 2014 23:29:37 +0100 Subject: [PATCH 3/3] STEP parser writes GraphViz files --- src/Mod/Import/App/SCL/Part21.py | 20 +++++------ src/Mod/Import/App/SCL/SimpleReader.py | 48 +++++++++++++++++++------- 2 files changed, 45 insertions(+), 23 deletions(-) diff --git a/src/Mod/Import/App/SCL/Part21.py b/src/Mod/Import/App/SCL/Part21.py index 0f40d290b..7825a725b 100644 --- a/src/Mod/Import/App/SCL/Part21.py +++ b/src/Mod/Import/App/SCL/Part21.py @@ -23,7 +23,7 @@ # ARE DISCLAIMED. # IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF @@ -54,7 +54,7 @@ class Model: # each time an instance is added to the model, count is incremented self._instances = {} self._number_of_instances = 0 - + def add_instance(self, instance): ''' Adds an instance to the model @@ -88,7 +88,7 @@ class Part21EntityInstance: self._attributes_definition = attributes print self._entity_name print self._attributes_definition - + class Part21Parser: """ @@ -114,11 +114,11 @@ class Part21Parser: for item in self._number_of_ancestors.keys(): if len(self._number_of_ancestors[item])==0: del self._number_of_ancestors[item] - + def get_schema_name(self): return self._schema_name print schema_name - + def get_number_of_instances(self): return len(self._instances_definition.keys()) @@ -132,8 +132,8 @@ class Part21Parser: break # there may be a multline definition. In this case, we read lines untill we found # a ; - #while (not line.endswith(";\r\n")): #its a multiline - # line = line.replace("\r\n","") + fp.readline() + while (line.find(';') == -1): #its a multiline + line = line.replace("\n","").replace("\r","") + fp.readline() # parse line match_instance_definition = INSTANCE_DEFINITION_RE.search(line) # id,name,attrs if match_instance_definition: @@ -179,14 +179,14 @@ class Part21Population(object): self._aggregate_scope = [] self._aggr_scope = False self.create_entity_instances() - + def create_entity_instances(self): """ Starts entity instances creation """ for number_of_ancestor in self._part21_loader._number_of_ancestors.keys(): for entity_definition_id in self._part21_loader._number_of_ancestors[number_of_ancestor]: self.create_entity_instance(entity_definition_id) - + def create_entity_instance(self, instance_id): instance_definition = self._part21_loader._instances_definition[instance_id] print "Instance definition to process",instance_definition @@ -199,7 +199,7 @@ class Part21Population(object): instance_attributes = instance_definition[1] print "instance_attributes:",instance_attributes a = object_(*instance_attributes) - + if __name__ == "__main__": import time import sys diff --git a/src/Mod/Import/App/SCL/SimpleReader.py b/src/Mod/Import/App/SCL/SimpleReader.py index d2193f38c..75a718ba1 100644 --- a/src/Mod/Import/App/SCL/SimpleReader.py +++ b/src/Mod/Import/App/SCL/SimpleReader.py @@ -1,5 +1,4 @@ # Copyright (c) 2014, Juergen Riegel (FreeCAD@juergen-riegel.net) -# Copyright (c) 2011, Thomas Paviot (tpaviot@gmail.com) # All rights reserved. # This file is part of the StepClassLibrary (SCL). @@ -42,8 +41,7 @@ import Part21,sys __title__="Simple Part21 STEP reader" -__author__ = "Juergen Riegel, Thomas Paviot" -__url__ = "http://www.freecadweb.org" +__author__ = "Juergen Riegel" __version__ = "0.1 (Jan 2014)" @@ -60,11 +58,35 @@ class SimpleParser: import time import sys self._p21loader = Part21.Part21Parser("gasket1.p21") + self._p21loader._number_of_ancestors = {} # not needed, save memory self.schemaModule = None self.schemaClasses = None self.instanceMape = {} + #for i in self._p21loader._instances_definition.keys(): + # print i,self._p21loader._instances_definition[i][0],self._p21loader._instances_definition[i][1] + + def _writeGraphVizEdge(self,num,attrList,file): + for i in attrList: + if isinstance(i,list): + self._writeGraphVizEdge(num,i,file) + elif isinstance(i,str): + if not i == '' and i[0] == '#': + key = int(i[1:]) + file.write(' '+`num`+' -> '+`key`+'\n') + + + def writeGraphViz(self,fileName): + print "Writing GraphViz file %s..."%fileName, + gvFile = open(fileName,'w') + + gvFile.write('digraph G {\n node [fontname=Verdana,fontsize=12]\n node [style=filled]\n node [fillcolor="#EEEEEE"]\n node [color="#EEEEEE"]\n edge [color="#31CEF0"]\n') for i in self._p21loader._instances_definition.keys(): - print i,self._p21loader._instances_definition[i][0],self._p21loader._instances_definition[i][1] + entityStr = '#'+`i` + nameStr = self._p21loader._instances_definition[i][0].lower() + sttrStr = `self._p21loader._instances_definition[i][1]`.replace('"','').replace("'",'') + gvFile.write(' '+`i`+' [label="'+entityStr+'\n'+nameStr+'\n'+sttrStr+'"]\n') + self._writeGraphVizEdge( i,self._p21loader._instances_definition[i][1],gvFile) + gvFile.write('}\n') def instaciate(self): """Instaciate the python classe from the enteties""" @@ -84,15 +106,11 @@ class SimpleParser: #print i if not self.instanceMape.has_key(i): self._create_entity_instance(i) - #for number_of_ancestor in self._p21loader._number_of_ancestors.keys(): - # for entity_definition_id in self._p21loader._number_of_ancestors[number_of_ancestor]: - # print entity_definition_id,':',self._p21loader._instances_definition[entity_definition_id] - # self._create_entity_instance(entity_definition_id) def _create_entity_instance(self, instance_id): if self._p21loader._instances_definition.has_key(instance_id): instance_definition = self._p21loader._instances_definition[instance_id] - print "Instance definition to process",instance_definition + #print "Instance definition to process",instance_definition # first find class name class_name = instance_definition[0].lower() #print "Class name:%s"%class_name @@ -105,7 +123,7 @@ class SimpleParser: self._transformAttributes(instance_attributes) print 'Attribute list after transform: ',instance_attributes - self.instanceMape[instance_id] = int(41) # dummy instance to test + self.instanceMape[instance_id] = str('dummy#:'+str(instance_id)) # dummy instance to test else: print '############################# lost entity: ',instance_id self.instanceMape[instance_id] = int(41) # dummy @@ -122,15 +140,18 @@ class SimpleParser: print 'empty string' elif i[0] == '#': key = int(i[1:]) - print 'Item: ',int(i[1:]) + #print 'Item: ',int(i[1:]) if self.instanceMape.has_key(key): attrList[n] = self.instanceMape[key] else: self._create_entity_instance(key) if not self.instanceMape.has_key(key): raise NameError("Needed instance not instanciated: ",key) + else: + attrList[n] = self.instanceMape[key] elif i[0] == '$': - print 'Dollar' + #print 'Dollar' + pass elif i[0] == "'": print 'Dopelstring: ',i[1:-1] else: @@ -142,4 +163,5 @@ class SimpleParser: if __name__ == "__main__": sys.path.append('..') # path where config_control_design.py is found parser = SimpleParser("gasket1.p21") # simple test file - parser.instaciate() + #parser.instaciate() + parser.writeGraphViz('TestGrap.gv')