FEM: issue #0003038 Fenics mesh import/export: removed lxml dependency
This commit is contained in:
@@ -31,7 +31,7 @@ __url__ = "http://www.freecadweb.org"
|
||||
|
||||
|
||||
import FreeCAD
|
||||
from lxml import etree # parsing xml files and exporting
|
||||
from xml.etree import ElementTree as ET
|
||||
import itertools
|
||||
|
||||
|
||||
@@ -208,7 +208,7 @@ def read_fenics_mesh_xml(xmlfilename):
|
||||
for val in Fenics_to_FreeCAD_dict.itervalues():
|
||||
element_dict[val] = {}
|
||||
|
||||
tree = etree.parse(xmlfilename)
|
||||
tree = ET.parse(xmlfilename)
|
||||
root = tree.getroot()
|
||||
|
||||
if root.tag.lower() != "dolfin":
|
||||
|
||||
@@ -30,7 +30,7 @@ __url__ = "http://www.freecadweb.org"
|
||||
# \brief FreeCAD Fenics Mesh XDMF writer for FEM workbench
|
||||
|
||||
from importToolsFem import get_FemMeshObjectDimension, get_FemMeshObjectElementTypes, get_MaxDimElementFromList, get_FemMeshObjectOrder
|
||||
from lxml import etree # parsing xml files and exporting
|
||||
from xml.etree import ElementTree as ET # parsing xml files and exporting
|
||||
import numpy as np
|
||||
|
||||
ENCODING_ASCII = 'ASCII'
|
||||
@@ -83,7 +83,7 @@ def write_fenics_mesh_points_xdmf(fem_mesh_obj, geometrynode, encoding=ENCODING_
|
||||
recalc_nodes_ind_dict = {}
|
||||
|
||||
if encoding == ENCODING_ASCII:
|
||||
dataitem = etree.SubElement(geometrynode, "DataItem", Dimensions="%d %d" % (numnodes, 3), Format="XML")
|
||||
dataitem = ET.SubElement(geometrynode, "DataItem", Dimensions="%d %d" % (numnodes, 3), Format="XML")
|
||||
nodes = []
|
||||
for (ind, (key, node)) in enumerate(fem_mesh_obj.FemMesh.Nodes.iteritems()):
|
||||
nodes.append(node)
|
||||
@@ -133,7 +133,7 @@ def write_fenics_mesh_volumes_xdmf(fem_mesh_obj, topologynode, rd, encoding=ENCO
|
||||
# write nodeindices into dict to access them later
|
||||
|
||||
if encoding == ENCODING_ASCII:
|
||||
dataitem = etree.SubElement(topologynode, "DataItem", NumberType="UInt", Dimensions="%d %d" % (num_cells, nodes_per_element), Format="XML")
|
||||
dataitem = ET.SubElement(topologynode, "DataItem", NumberType="UInt", Dimensions="%d %d" % (num_cells, nodes_per_element), Format="XML")
|
||||
dataitem.text = numpy_array_to_str(tuples_to_numpy(nodeindices))
|
||||
elif encoding == ENCODING_HDF5:
|
||||
pass
|
||||
@@ -147,7 +147,7 @@ def write_fenics_mesh_cellfunctions(fem_mesh_obj, mycellvalues, attributenode, e
|
||||
(num_cells, name_cell, dim_cell) = get_MaxDimElementFromList(get_FemMeshObjectElementTypes(fem_mesh_obj))
|
||||
|
||||
if encoding == ENCODING_ASCII:
|
||||
dataitem = etree.SubElement(attributenode, "DataItem", Dimensions="%d %d" % (num_cells, 1), Format="XML")
|
||||
dataitem = ET.SubElement(attributenode, "DataItem", Dimensions="%d %d" % (num_cells, 1), Format="XML")
|
||||
dataitem.text = numpy_array_to_str(np.random.random((num_cells, 1)))
|
||||
elif encoding == ENCODING_HDF5:
|
||||
pass
|
||||
@@ -180,11 +180,11 @@ def write_fenics_mesh_xdmf(fem_mesh_obj, outputfile, encoding=ENCODING_ASCII):
|
||||
cellname_fenics = FreeCAD_to_Fenics_dict[cellname_fc]
|
||||
print("Celltype in mesh -> %s and its Fenics dolfin name: %s" % (str(celltype_in_mesh), cellname_fenics))
|
||||
|
||||
root = etree.Element("Xdmf", version="3.0")
|
||||
domain = etree.SubElement(root, "Domain")
|
||||
grid = etree.SubElement(domain, "Grid", Name="mesh", GridType="Uniform")
|
||||
topology = etree.SubElement(grid, "Topology")
|
||||
geometry = etree.SubElement(grid, "Geometry")
|
||||
root = ET.Element("Xdmf", version="3.0")
|
||||
domain = ET.SubElement(root, "Domain")
|
||||
grid = ET.SubElement(domain, "Grid", Name="mesh", GridType="Uniform")
|
||||
topology = ET.SubElement(grid, "Topology")
|
||||
geometry = ET.SubElement(grid, "Geometry")
|
||||
|
||||
# attribute = etree.SubElement(grid, "Attribute") # for cell functions
|
||||
|
||||
@@ -196,5 +196,7 @@ def write_fenics_mesh_xdmf(fem_mesh_obj, outputfile, encoding=ENCODING_ASCII):
|
||||
|
||||
fp = open(outputfile, "w")
|
||||
fp.write('''<?xml version="1.0"?>\n<!DOCTYPE Xdmf SYSTEM "Xdmf.dtd" []>\n''')
|
||||
fp.write(etree.tostring(root, pretty_print=True))
|
||||
fp.write(ET.tostring(root))
|
||||
# xml core functionality does not support pretty printing
|
||||
# so the output file looks quite ugly
|
||||
fp.close()
|
||||
|
||||
@@ -31,7 +31,7 @@ __url__ = "http://www.freecadweb.org"
|
||||
|
||||
|
||||
from importToolsFem import get_FemMeshObjectDimension, get_FemMeshObjectElementTypes, get_MaxDimElementFromList
|
||||
from lxml import etree # parsing xml files and exporting
|
||||
from xml.etree import ElementTree as ET # parsing xml files and exporting
|
||||
|
||||
|
||||
def write_fenics_mesh_xml(fem_mesh_obj, outputfile):
|
||||
@@ -64,17 +64,17 @@ def write_fenics_mesh_xml(fem_mesh_obj, outputfile):
|
||||
cellname_fenics = FreeCAD_to_Fenics_dict[cellname_fc]
|
||||
print("Celltype in mesh -> %s and its Fenics name: %s" % (str(celltype_in_mesh), cellname_fenics))
|
||||
|
||||
root = etree.Element("dolfin", dolfin="http://fenicsproject.org")
|
||||
meshchild = etree.SubElement(root, "mesh", celltype=cellname_fenics, dim=str(dim_cell))
|
||||
vertices = etree.SubElement(meshchild, "vertices", size=str(fem_mesh_obj.FemMesh.NodeCount))
|
||||
root = ET.Element("dolfin", dolfin="http://fenicsproject.org")
|
||||
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
|
||||
etree.SubElement(
|
||||
ET.SubElement(
|
||||
vertices, "vertex", index=str(nodeind - 1),
|
||||
# FC starts from 1, fenics starts from 0 to size-1
|
||||
x=str(fc_vec[0]), y=str(fc_vec[1]), z=str(fc_vec[2]))
|
||||
|
||||
cells = etree.SubElement(meshchild, "cells", size=str(num_cells))
|
||||
cells = ET.SubElement(meshchild, "cells", size=str(num_cells))
|
||||
if dim_cell == 3:
|
||||
fc_cells = fem_mesh_obj.FemMesh.Volumes
|
||||
elif dim_cell == 2:
|
||||
@@ -93,10 +93,12 @@ def write_fenics_mesh_xml(fem_mesh_obj, outputfile):
|
||||
cell_args["v" + str(vi)] = str(ni - 1)
|
||||
# generate as many v entries in dict as nodes are listed in cell (works only for first order elements)
|
||||
|
||||
etree.SubElement(cells, cellname_fenics, index=str(fen_ind), **cell_args)
|
||||
ET.SubElement(cells, cellname_fenics, index=str(fen_ind), **cell_args)
|
||||
|
||||
etree.SubElement(meshchild, "data")
|
||||
ET.SubElement(meshchild, "data")
|
||||
|
||||
fp = open(outputfile, "w") # TODO: what about pyopen?
|
||||
fp.write(etree.tostring(root, pretty_print=True))
|
||||
fp = open(outputfile, "w")
|
||||
fp.write(ET.tostring(root))
|
||||
# xml core functionality does not support pretty printing
|
||||
# so the output file looks quite ugly
|
||||
fp.close()
|
||||
|
||||
Reference in New Issue
Block a user