diff --git a/src/Mod/Fem/feminout/importFenicsMesh.py b/src/Mod/Fem/feminout/importFenicsMesh.py index 9634185aa2..5ee6859b11 100644 --- a/src/Mod/Fem/feminout/importFenicsMesh.py +++ b/src/Mod/Fem/feminout/importFenicsMesh.py @@ -84,18 +84,30 @@ class WriteXDMFTaskPanel: # group elements self.form.tableGroups.setItem(ind, 2, ro(QtGui.QTableWidgetItem(fem_mesh.getGroupElementType(gind)))) # default value for not marked elements - self.form.tableGroups.setItem(ind, 3, QtGui.QTableWidgetItem(str(-1))) + self.form.tableGroups.setItem(ind, 3, QtGui.QTableWidgetItem(str(0))) # default value for marked elements - self.form.tableGroups.setItem(ind, 4, QtGui.QTableWidgetItem(str(gind))) + self.form.tableGroups.setItem(ind, 4, QtGui.QTableWidgetItem(str(1))) + + header = self.form.tableGroups.horizontalHeader() + header.setResizeMode(0, QtGui.QHeaderView.ResizeToContents) + header.setResizeMode(1, QtGui.QHeaderView.ResizeToContents) + header.setResizeMode(2, QtGui.QHeaderView.ResizeToContents) + header.setResizeMode(3, QtGui.QHeaderView.ResizeToContents) + header.setResizeMode(4, QtGui.QHeaderView.Stretch) def convert_table_to_group_dict(self): group_values_dict = {} num_rows = self.form.tableGroups.rowCount() for r in range(num_rows): - g = int(self.form.tableGroups.item(r, 0).text()) - default_value = int(self.form.tableGroups.item(r, 3).text()) - marked_value = int(self.form.tableGroups.item(r, 4).text()) + g = int(self.form.tableGroups.item(r, 0).text()) # read-only no prob + default_value = 0 + marked_value = 1 + try: + default_value = int(self.form.tableGroups.item(r, 3).text()) + marked_value = int(self.form.tableGroups.item(r, 4).text()) + except: + print("ERROR: value conversion failed in table to dict: assuming 0 for default, 1 for marked.") group_values_dict[g] = (marked_value, default_value) diff --git a/src/Mod/Fem/feminout/importToolsFem.py b/src/Mod/Fem/feminout/importToolsFem.py index 1682a9a5c7..7c14a58da7 100644 --- a/src/Mod/Fem/feminout/importToolsFem.py +++ b/src/Mod/Fem/feminout/importToolsFem.py @@ -100,7 +100,8 @@ def get_FemMeshObjectElementTypes(fem_mesh_obj, remove_zero_element_entries=True "Node": 0, "Edge": 1, "Hexa": 3, "Polygon": 2, "Polyhedron": 3, "Prism": 3, "Pyramid": 3, "Quadrangle": 2, "Tetra": 3, "Triangle": 2} - elements_list_with_zero = [(eval("fem_mesh_obj.FemMesh." + s + "Count"), s, d) for (s, d) in FreeCAD_element_names_dims.iteritems()] + eval_dict = locals() # to access local variables from eval + elements_list_with_zero = [(eval("fem_mesh_obj.FemMesh." + s + "Count", eval_dict), s, d) for (s, d) in FreeCAD_element_names_dims.items()] # ugly but necessary if remove_zero_element_entries: elements_list = [(num, s, d) for (num, s, d) in elements_list_with_zero if num > 0] diff --git a/src/Mod/Fem/feminout/readFenicsXML.py b/src/Mod/Fem/feminout/readFenicsXML.py index 78015295be..41d1bf5a0e 100644 --- a/src/Mod/Fem/feminout/readFenicsXML.py +++ b/src/Mod/Fem/feminout/readFenicsXML.py @@ -125,7 +125,7 @@ def read_fenics_mesh_xml(xmlfilename): Works only with tet4 and tri3 elements at the moment ''' if dim == 3: - for (ind, tet) in element_dict['tetra4'].iteritems(): + for (ind, tet) in list(element_dict['tetra4'].items()): v0 = nodes[tet[0]] v1 = nodes[tet[1]] v2 = nodes[tet[2]] @@ -137,7 +137,7 @@ def read_fenics_mesh_xml(xmlfilename): element_dict['tetra4'][ind] = (tet[1], tet[0], tet[2], tet[3]) if dim == 2: nz = FreeCAD.Vector(0., 0., 1.) - for (ind, tria) in element_dict['tria3'].iteritems(): + for (ind, tria) in list(element_dict['tria3'].items()): v0 = nodes[tria[0]] v1 = nodes[tria[1]] v2 = nodes[tria[2]] @@ -150,7 +150,7 @@ def read_fenics_mesh_xml(xmlfilename): element_counter = {} # TODO: remove upper level lookup - for (key, val) in Fenics_to_FreeCAD_dict.iteritems(): + for (key, val) in list(Fenics_to_FreeCAD_dict.items()): element_dict[val] = {} element_counter[key] = 0 # count every distinct element and sub element type @@ -163,7 +163,7 @@ def read_fenics_mesh_xml(xmlfilename): def invertdict(dic): invdic = {} - for (key, it) in dic.iteritems(): + for (key, it) in list(dic.items()): invdic[it] = key return invdic @@ -178,7 +178,7 @@ def read_fenics_mesh_xml(xmlfilename): 'hexahedron': ['quadrilateral', 'interval'], 'quadrilateral': ['interval']} - for (cell_index, cell) in cell_dict.iteritems(): + for (cell_index, cell) in list(cell_dict.items()): cell_lower_dims = lower_dims_dict[cell_type] element_counter[cell_type] += 1 element_dict[Fenics_to_FreeCAD_dict[cell_type]][cell] = element_counter[cell_type] @@ -190,9 +190,9 @@ def read_fenics_mesh_xml(xmlfilename): element_counter[ld]) length_counter = len(nodes) - for (key, val_dict) in element_dict.iteritems(): + for (key, val_dict) in list(element_dict.items()): # to ensure distinct indices for FreeCAD - for (vkey, it) in val_dict.iteritems(): + for (vkey, it) in list(val_dict.items()): val_dict[vkey] = it + length_counter length_counter += len(val_dict) # inverse of the dict (dict[key] = val -> dict[val] = key) @@ -205,7 +205,7 @@ def read_fenics_mesh_xml(xmlfilename): nodes = {} element_dict = {} # TODO: remove two times initialization - for val in Fenics_to_FreeCAD_dict.itervalues(): + for val in list(Fenics_to_FreeCAD_dict.values()): element_dict[val] = {} tree = ET.parse(xmlfilename) diff --git a/src/Mod/Fem/feminout/writeFenicsXDMF.py b/src/Mod/Fem/feminout/writeFenicsXDMF.py index de9b4b39a3..4aa1709395 100644 --- a/src/Mod/Fem/feminout/writeFenicsXDMF.py +++ b/src/Mod/Fem/feminout/writeFenicsXDMF.py @@ -101,7 +101,7 @@ def write_fenics_mesh_points_xdmf(fem_mesh_obj, geometrynode, encoding=ENCODING_ if encoding == ENCODING_ASCII: dataitem = ET.SubElement(geometrynode, "DataItem", Dimensions="%d %d" % (numnodes, effective_dim), Format="XML") nodes = [] - for (ind, (key, node)) in enumerate(fem_mesh_obj.FemMesh.Nodes.iteritems()): + for (ind, (key, node)) in enumerate(list(fem_mesh_obj.FemMesh.Nodes.items())): nodes.append(node) recalc_nodes_ind_dict[key] = ind @@ -282,7 +282,7 @@ def write_fenics_mesh_xdmf(fem_mesh_obj, outputfile, group_values_dict={}, encod mesh_function_attribute = ET.SubElement(mesh_function_grid, "Attribute") elem_dict = {} - (elem_mark_group, elem_mark_default) = group_values_dict.get(g, (g, -1)) + (elem_mark_group, elem_mark_default) = group_values_dict.get(g, (1, 0)) # TODO: is it better to save all groups each at once or collect all codim equal # groups to put them into one function? @@ -299,8 +299,8 @@ def write_fenics_mesh_xdmf(fem_mesh_obj, outputfile, group_values_dict={}, encod # TODO: improve cell functions support - fp = open(outputfile, "w") - fp.write('''\n\n''') + fp = open(outputfile, "wb") + fp.write(b'''\n\n''') fp.write(ET.tostring(root)) # xml core functionality does not support pretty printing # so the output file looks quite ugly diff --git a/src/Mod/Fem/feminout/writeFenicsXML.py b/src/Mod/Fem/feminout/writeFenicsXML.py index dbf598f112..a2ea4b78e1 100644 --- a/src/Mod/Fem/feminout/writeFenicsXML.py +++ b/src/Mod/Fem/feminout/writeFenicsXML.py @@ -68,7 +68,7 @@ def write_fenics_mesh_xml(fem_mesh_obj, outputfile): meshchild = ET.SubElement(root, "mesh", celltype=cellname_fenics, dim=str(dim_cell)) vertices = ET.SubElement(meshchild, "vertices", size=str(fem_mesh_obj.FemMesh.NodeCount)) - for (nodeind, fc_vec) in fem_mesh_obj.FemMesh.Nodes.iteritems(): # python2 + for (nodeind, fc_vec) in list(fem_mesh_obj.FemMesh.Nodes.items()): ET.SubElement( vertices, "vertex", index=str(nodeind - 1), # FC starts from 1, fenics starts from 0 to size-1 @@ -97,7 +97,7 @@ def write_fenics_mesh_xml(fem_mesh_obj, outputfile): ET.SubElement(meshchild, "data") - fp = open(outputfile, "w") + fp = open(outputfile, "wb") fp.write(ET.tostring(root)) # xml core functionality does not support pretty printing # so the output file looks quite ugly