FEM: in out modules, Replace print with Console.Print* calls
This commit is contained in:
committed by
Bernd Hahnebach
parent
80270c7bbf
commit
a5843cc7fd
@@ -32,18 +32,23 @@ __url__ = "http://www.freecadweb.org"
|
||||
|
||||
# Make mesh of pn junction in TetGen format
|
||||
import FreeCAD
|
||||
from FreeCAD import Console
|
||||
import Mesh
|
||||
|
||||
App = FreeCAD # shortcut
|
||||
if FreeCAD.GuiUp:
|
||||
import FreeCADGui
|
||||
Gui = FreeCADGui # shortcut
|
||||
|
||||
## \addtogroup FEM
|
||||
# @{
|
||||
|
||||
|
||||
def exportMeshToTetGenPoly(meshToExport, filePath, beVerbose=1):
|
||||
"""Export mesh to TetGen *.poly file format"""
|
||||
# ********** Part 1 - write node list to output file
|
||||
if beVerbose == 1:
|
||||
FreeCAD.Console.PrintMessage("\nExport of mesh to TetGen file ...")
|
||||
Console.PrintMessage("\nExport of mesh to TetGen file ...")
|
||||
(allVertices, allFacets) = meshToExport.Topology
|
||||
f = open(filePath, "w")
|
||||
f.write("# This file was generated from FreeCAD geometry\n")
|
||||
@@ -94,7 +99,7 @@ def exportMeshToTetGenPoly(meshToExport, filePath, beVerbose=1):
|
||||
EdgeKeys = EdgeFacets.keys()
|
||||
# disconnectedEdges = len(EdgeKeys)
|
||||
if beVerbose == 1:
|
||||
FreeCAD.Console.PrintMessage(
|
||||
Console.PrintMessage(
|
||||
"\nBoundaryMarker:" + repr(BoundaryMarker) + " " + repr(len(EdgeFacets))
|
||||
)
|
||||
searchForPair = 1
|
||||
@@ -146,7 +151,7 @@ def exportMeshToTetGenPoly(meshToExport, filePath, beVerbose=1):
|
||||
searchForPair = 0
|
||||
# End of main loop
|
||||
if beVerbose == 1:
|
||||
FreeCAD.Console.PrintMessage(
|
||||
Console.PrintMessage(
|
||||
"\nNew BoundaryMarker:" + repr(BoundaryMarker) + " " + repr(len(EdgeFacets))
|
||||
)
|
||||
|
||||
@@ -185,7 +190,7 @@ def createMesh():
|
||||
# ======================== Script beginning... ========================
|
||||
beVerbose = 1
|
||||
if beVerbose == 1:
|
||||
FreeCAD.Console.PrintMessage("\n\n\n\n\n\n\n\nScript starts...")
|
||||
Console.PrintMessage("\n\n\n\n\n\n\n\nScript starts...")
|
||||
# Geometry definition
|
||||
# Define objects names
|
||||
PyDocumentName = "pnJunction"
|
||||
@@ -199,7 +204,7 @@ def createMesh():
|
||||
|
||||
# Init objects
|
||||
if beVerbose == 1:
|
||||
FreeCAD.Console.PrintMessage("\nInit Objects...")
|
||||
Console.PrintMessage("\nInit Objects...")
|
||||
# closeDocument after restart of macro. Needs any ActiveDocument.
|
||||
# App.closeDocument(App.ActiveDocument.Label)
|
||||
AppPyDoc = App.newDocument(PyDocumentName)
|
||||
@@ -235,13 +240,13 @@ def createMesh():
|
||||
]
|
||||
if beVerbose == 1:
|
||||
if len(BoxList) != len(BoxMeshList):
|
||||
FreeCAD.Console.PrintMessage(
|
||||
Console.PrintMessage(
|
||||
"\n ERROR! Input len() of BoxList and BoxMeshList is not the same! "
|
||||
)
|
||||
|
||||
# Set sizes in nanometers
|
||||
if beVerbose == 1:
|
||||
FreeCAD.Console.PrintMessage("\nSet sizes...")
|
||||
Console.PrintMessage("\nSet sizes...")
|
||||
tessellationTollerance = 0.05
|
||||
ModelWidth = 300
|
||||
BulkHeight = 300
|
||||
@@ -303,7 +308,7 @@ def createMesh():
|
||||
|
||||
# Unite
|
||||
if beVerbose == 1:
|
||||
FreeCAD.Console.PrintMessage("\nFuse objects...")
|
||||
Console.PrintMessage("\nFuse objects...")
|
||||
fuseShape = BoxList[0].Shape
|
||||
for index in range(1, len(BoxList), 1):
|
||||
fuseShape = fuseShape.fuse(BoxList[index].Shape)
|
||||
@@ -342,6 +347,6 @@ def createMesh():
|
||||
Gui.SendMsgToActiveView("ViewFit")
|
||||
|
||||
if beVerbose == 1:
|
||||
FreeCAD.Console.PrintMessage("\nScript finished without errors.")
|
||||
Console.PrintMessage("\nScript finished without errors.")
|
||||
|
||||
## @}
|
||||
|
||||
@@ -29,6 +29,7 @@ __url__ = "http://www.freecadweb.org"
|
||||
# \brief FreeCAD Calculix DAT reader for FEM workbench
|
||||
|
||||
import FreeCAD
|
||||
from FreeCAD import Console
|
||||
import os
|
||||
|
||||
|
||||
@@ -71,7 +72,6 @@ def import_dat(
|
||||
Analysis=None
|
||||
):
|
||||
r = readResult(filename)
|
||||
# print("Results {}".format(r))
|
||||
return r
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ def import_dat(
|
||||
def readResult(
|
||||
dat_input
|
||||
):
|
||||
FreeCAD.Console.PrintMessage("Read ccx results from dat file: {}\n".format(dat_input))
|
||||
Console.PrintMessage("Read ccx results from dat file: {}\n".format(dat_input))
|
||||
dat_file = pyopen(dat_input, "r")
|
||||
eigenvalue_output_section_found = False
|
||||
mode_reading = False
|
||||
|
||||
@@ -31,6 +31,7 @@ __url__ = "http://www.freecadweb.org"
|
||||
# \brief FreeCAD Calculix FRD Reader for FEM workbench
|
||||
|
||||
import FreeCAD
|
||||
from FreeCAD import Console
|
||||
import os
|
||||
|
||||
|
||||
@@ -88,7 +89,7 @@ def importFrd(
|
||||
nodenumbers_for_compacted_mesh = []
|
||||
|
||||
number_of_increments = len(m["Results"])
|
||||
FreeCAD.Console.PrintLog(
|
||||
Console.PrintLog(
|
||||
"Increments: " + str(number_of_increments) + "\n"
|
||||
)
|
||||
if len(m["Results"]) > 0:
|
||||
@@ -175,7 +176,7 @@ def importFrd(
|
||||
"or if CalculiX returned no results because "
|
||||
"of nonpositive jacobian determinant in at least one element.\n"
|
||||
)
|
||||
FreeCAD.Console.PrintMessage(error_message)
|
||||
Console.PrintMessage(error_message)
|
||||
if analysis:
|
||||
analysis_object.addObject(result_mesh_object)
|
||||
|
||||
@@ -186,7 +187,7 @@ def importFrd(
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
else:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Problem on frd file import. No nodes found in frd file.\n"
|
||||
)
|
||||
return res_obj
|
||||
@@ -197,14 +198,14 @@ def importFrd(
|
||||
def read_frd_result(
|
||||
frd_input
|
||||
):
|
||||
FreeCAD.Console.PrintMessage(
|
||||
Console.PrintMessage(
|
||||
"Read ccx results from frd file: {}\n"
|
||||
.format(frd_input)
|
||||
)
|
||||
inout_nodes = []
|
||||
inout_nodes_file = frd_input.rsplit(".", 1)[0] + "_inout_nodes.txt"
|
||||
if os.path.exists(inout_nodes_file):
|
||||
FreeCAD.Console.PrintMessage(
|
||||
Console.PrintMessage(
|
||||
"Read special 1DFlow nodes data form: {}\n".format(inout_nodes_file)
|
||||
)
|
||||
f = pyopen(inout_nodes_file, "r")
|
||||
@@ -213,7 +214,7 @@ def read_frd_result(
|
||||
a = line.split(",")
|
||||
inout_nodes.append(a)
|
||||
f.close()
|
||||
FreeCAD.Console.PrintMessage("{}\n".format(inout_nodes))
|
||||
Console.PrintMessage("{}\n".format(inout_nodes))
|
||||
frd_file = pyopen(frd_input, "r")
|
||||
nodes = {}
|
||||
elements_hexa8 = {}
|
||||
@@ -370,7 +371,6 @@ def read_frd_result(
|
||||
nd8, nd5, nd6, nd7, nd4, nd1, nd2, nd3, nd20, nd17,
|
||||
nd18, nd19, nd12, nd9, nd10, nd11, nd16, nd13, nd14, nd15
|
||||
)
|
||||
# print(elements_hexa20[elem])
|
||||
elif elemType == 5 and input_continues is False:
|
||||
# first line
|
||||
# C3D15 Calculix --> penta15 FreeCAD
|
||||
@@ -719,11 +719,11 @@ def read_frd_result(
|
||||
if not inout_nodes:
|
||||
if results:
|
||||
if "mflow" in results[0] or "npressure" in results[0]:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"We have mflow or npressure, but no inout_nodes file.\n"
|
||||
)
|
||||
if not nodes:
|
||||
FreeCAD.Console.PrintError("FEM: No nodes found in Frd file.\n")
|
||||
Console.PrintError("FEM: No nodes found in Frd file.\n")
|
||||
|
||||
return {
|
||||
"Nodes": nodes,
|
||||
|
||||
@@ -31,6 +31,7 @@ __url__ = "http://www.freecadweb.org"
|
||||
import os
|
||||
|
||||
import FreeCAD
|
||||
from FreeCAD import Console
|
||||
from . import importToolsFem
|
||||
from . import readFenicsXML
|
||||
from . import writeFenicsXML
|
||||
@@ -122,7 +123,7 @@ if FreeCAD.GuiUp:
|
||||
default_value = int(self.form.tableGroups.item(r, 3).text())
|
||||
marked_value = int(self.form.tableGroups.item(r, 4).text())
|
||||
except ValueError:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"ERROR: value conversion failed "
|
||||
"in table to dict: assuming 0 for default, "
|
||||
"1 for marked.\n"
|
||||
@@ -165,22 +166,22 @@ def export(objectslist, fileString, group_values_dict_nogui=None):
|
||||
of (marked_value (default=1), default_value (default=0))
|
||||
"""
|
||||
if len(objectslist) != 1:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"This exporter can only export one object.\n")
|
||||
return
|
||||
obj = objectslist[0]
|
||||
if not obj.isDerivedFrom("Fem::FemMeshObject"):
|
||||
FreeCAD.Console.PrintError("No FEM mesh object selected.\n")
|
||||
Console.PrintError("No FEM mesh object selected.\n")
|
||||
return
|
||||
|
||||
if fileString != "":
|
||||
fileName, fileExtension = os.path.splitext(fileString)
|
||||
if fileExtension.lower() == ".xml":
|
||||
FreeCAD.Console.PrintWarning(
|
||||
Console.PrintWarning(
|
||||
"XML is not designed to save higher order elements.\n")
|
||||
FreeCAD.Console.PrintWarning(
|
||||
Console.PrintWarning(
|
||||
"Reducing order for second order mesh.\n")
|
||||
FreeCAD.Console.PrintWarning("Tri6 -> Tri3, Tet10 -> Tet4, etc.\n")
|
||||
Console.PrintWarning("Tri6 -> Tri3, Tet10 -> Tet4, etc.\n")
|
||||
writeFenicsXML.write_fenics_mesh_xml(obj, fileString)
|
||||
elif fileExtension.lower() == ".xdmf":
|
||||
mesh_groups = importToolsFem.get_FemMeshObjectMeshGroups(obj)
|
||||
|
||||
@@ -30,6 +30,7 @@ __date__ = "04/08/2016"
|
||||
# \brief FreeCAD INP file reader for FEM workbench
|
||||
|
||||
import FreeCAD
|
||||
from FreeCAD import Console
|
||||
import os
|
||||
|
||||
|
||||
@@ -211,7 +212,7 @@ def read_inp(file_name):
|
||||
elif line[:5].upper() == "*STEP":
|
||||
model_definition = False
|
||||
if error_seg3 is True: # to print "not supported"
|
||||
FreeCAD.Console.PrintError("Error: seg3 (3-node beam element type) not supported, yet.\n")
|
||||
Console.PrintError("Error: seg3 (3-node beam element type) not supported, yet.\n")
|
||||
f.close()
|
||||
|
||||
# switch from the CalculiX node numbering to the FreeCAD node numbering
|
||||
|
||||
@@ -29,6 +29,7 @@ __url__ = "http://www.freecadweb.org"
|
||||
# \brief FreeCAD FEM import tools
|
||||
|
||||
import FreeCAD
|
||||
from FreeCAD import Console
|
||||
|
||||
|
||||
def get_FemMeshObjectMeshGroups(
|
||||
@@ -69,7 +70,7 @@ def get_FemMeshObjectOrder(
|
||||
else:
|
||||
presumable_order = [el - 1 for el in edges_length_set]
|
||||
else:
|
||||
FreeCAD.Console.PrintMessage(
|
||||
Console.PrintMessage(
|
||||
"Found no edges in mesh: Element order determination does not work without them.\n"
|
||||
)
|
||||
|
||||
@@ -212,7 +213,7 @@ def make_femmesh(
|
||||
for i in elms_seg3:
|
||||
e = elms_seg3[i]
|
||||
mesh.addEdge([e[0], e[1], e[2]], i)
|
||||
FreeCAD.Console.PrintLog(
|
||||
Console.PrintLog(
|
||||
"imported mesh: {} nodes, {} HEXA8, {} PENTA6, {} TETRA4, {} TETRA10, {} PENTA15"
|
||||
.format(
|
||||
len(nds),
|
||||
@@ -223,7 +224,7 @@ def make_femmesh(
|
||||
len(elms_penta15)
|
||||
)
|
||||
)
|
||||
FreeCAD.Console.PrintLog(
|
||||
Console.PrintLog(
|
||||
"imported mesh: {} HEXA20, {} TRIA3, {} TRIA6, {} QUAD4, {} QUAD8, {} SEG2, {} SEG3"
|
||||
.format(
|
||||
len(elms_hexa20),
|
||||
@@ -236,9 +237,9 @@ def make_femmesh(
|
||||
)
|
||||
)
|
||||
else:
|
||||
FreeCAD.Console.PrintError("No Elements found!\n")
|
||||
Console.PrintError("No Elements found!\n")
|
||||
else:
|
||||
FreeCAD.Console.PrintError("No Nodes found!\n")
|
||||
Console.PrintError("No Nodes found!\n")
|
||||
return mesh
|
||||
|
||||
|
||||
@@ -412,7 +413,7 @@ def fill_femresult_mechanical(
|
||||
if len(Peeq) > 0:
|
||||
if len(Peeq.values()) != len(disp.values()):
|
||||
# how is this possible? An example is needed!
|
||||
FreeCAD.Console.PrintError("PEEQ seams to have exptra nodes.\n")
|
||||
Console.PrintError("PEEQ seams to have exptra nodes.\n")
|
||||
Pe = []
|
||||
Pe_extra_nodes = list(Peeq.values())
|
||||
nodes = len(disp.values())
|
||||
@@ -439,7 +440,7 @@ def fill_femresult_mechanical(
|
||||
nodes = len(disp.values())
|
||||
for i in range(nodes):
|
||||
# how is this possible? An example is needed!
|
||||
FreeCAD.Console.PrintError("Temperature seams to have exptra nodes.\n")
|
||||
Console.PrintError("Temperature seams to have exptra nodes.\n")
|
||||
Temp_value = Temp_extra_nodes[i]
|
||||
Temp.append(Temp_value)
|
||||
res_obj.Temperature = list(map((lambda x: x), Temp))
|
||||
|
||||
@@ -32,6 +32,7 @@ __url__ = "http://www.freecadweb.org"
|
||||
|
||||
import os
|
||||
import FreeCAD
|
||||
from FreeCAD import Console
|
||||
import Fem
|
||||
|
||||
|
||||
@@ -71,26 +72,26 @@ def export(
|
||||
):
|
||||
"called when freecad exports an object to vtk"
|
||||
if len(objectslist) > 1: # the case of no selected obj is caught by FreeCAD already
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"This exporter can only export one object at once\n"
|
||||
)
|
||||
return
|
||||
|
||||
obj = objectslist[0]
|
||||
if obj.isDerivedFrom("Fem::FemPostPipeline"):
|
||||
FreeCAD.Console.PrintError(
|
||||
"Export of a VTK post object to vtk is not yet implemented !\n"
|
||||
Console.PrintError(
|
||||
"Export of a VTK post object to vtk is not yet implemented!\n"
|
||||
)
|
||||
return
|
||||
elif obj.isDerivedFrom("Fem::FemMeshObject"):
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Use export to FEM mesh formats to export a FEM mesh object to vtk!\n"
|
||||
)
|
||||
return
|
||||
elif obj.isDerivedFrom("Fem::FemResultObject"):
|
||||
Fem.writeResult(filename, obj)
|
||||
else:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Selected object is not supported by export to VTK.\n"
|
||||
)
|
||||
return
|
||||
@@ -119,7 +120,7 @@ def importVtk(
|
||||
# FreeCAD result object
|
||||
importVtkFCResult(filename, object_name)
|
||||
else:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Error, wrong parameter in VTK import pref: {}\n"
|
||||
.format(object_type)
|
||||
)
|
||||
|
||||
@@ -32,13 +32,14 @@ import json
|
||||
import os
|
||||
|
||||
import FreeCAD
|
||||
from FreeCAD import Console
|
||||
from . import importToolsFem
|
||||
|
||||
has_yaml = True
|
||||
try:
|
||||
import yaml
|
||||
except ImportError:
|
||||
FreeCAD.Console.PrintMessage(
|
||||
Console.PrintMessage(
|
||||
"No YAML available (import yaml failure), "
|
||||
"yaml import/export won't work\n"
|
||||
)
|
||||
@@ -88,13 +89,13 @@ def insert(
|
||||
def export(objectslist, fileString):
|
||||
"called when freecad exports a file"
|
||||
if len(objectslist) != 1:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"This exporter can only "
|
||||
"export one object.\n")
|
||||
return
|
||||
obj = objectslist[0]
|
||||
if not obj.isDerivedFrom("Fem::FemMeshObject"):
|
||||
FreeCAD.Console.PrintError("No FEM mesh object selected.\n")
|
||||
Console.PrintError("No FEM mesh object selected.\n")
|
||||
return
|
||||
|
||||
write(fileString, obj.FemMesh)
|
||||
@@ -162,13 +163,13 @@ def read(
|
||||
raw_mesh_data = yaml.load(fp)
|
||||
fp.close()
|
||||
else:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Unknown extension, "
|
||||
"please select other importer.\n")
|
||||
|
||||
FreeCAD.Console.PrintMessage("Converting indices to integer numbers ...")
|
||||
Console.PrintMessage("Converting indices to integer numbers ...")
|
||||
mesh_data = convert_raw_data_to_mesh_data(raw_mesh_data)
|
||||
FreeCAD.Console.PrintMessage("OK\n")
|
||||
Console.PrintMessage("OK\n")
|
||||
|
||||
return importToolsFem.make_femmesh(mesh_data)
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@ __url__ = "http://www.freecadweb.org"
|
||||
|
||||
import os
|
||||
import FreeCAD
|
||||
from FreeCAD import Console
|
||||
|
||||
# ************************************************************************************************
|
||||
# ********* generic FreeCAD import and export methods ********************************************
|
||||
@@ -78,11 +79,11 @@ def export(
|
||||
):
|
||||
"called when freecad exports a file"
|
||||
if len(objectslist) != 1:
|
||||
FreeCAD.Console.PrintError("This exporter can only export one object.\n")
|
||||
Console.PrintError("This exporter can only export one object.\n")
|
||||
return
|
||||
obj = objectslist[0]
|
||||
if not obj.isDerivedFrom("Fem::FemMeshObject"):
|
||||
FreeCAD.Console.PrintError("No FEM mesh object selected.\n")
|
||||
Console.PrintError("No FEM mesh object selected.\n")
|
||||
return
|
||||
femnodes_mesh = obj.FemMesh.Nodes
|
||||
import femmesh.meshtools as FemMeshTools
|
||||
@@ -179,7 +180,7 @@ def read_z88_mesh(
|
||||
kflag = int(mesh_info[4])
|
||||
# for non rotational elements ist --> kflag = 0 --> cartesian, kflag = 1 polar coordinates
|
||||
if kflag:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"KFLAG = 1, Rotational coordinates not supported at the moment\n"
|
||||
)
|
||||
return {}
|
||||
@@ -188,15 +189,15 @@ def read_z88_mesh(
|
||||
elemts_first_line = nodes_last_line + 1
|
||||
elements_last_line = elemts_first_line - 1 + elements_count * 2
|
||||
|
||||
FreeCAD.Console.PrintLog(nodes_count)
|
||||
Console.PrintLog(nodes_count)
|
||||
Console.PrintLog("\n")
|
||||
Console.PrintLog(elements_count)
|
||||
FreeCAD.Console.PrintLog("\n")
|
||||
FreeCAD.Console.PrintLog(elements_count)
|
||||
FreeCAD.Console.PrintLog("\n")
|
||||
FreeCAD.Console.PrintLog(nodes_last_line)
|
||||
FreeCAD.Console.PrintLog("\n")
|
||||
FreeCAD.Console.PrintLog(elemts_first_line)
|
||||
FreeCAD.Console.PrintLog("\n")
|
||||
FreeCAD.Console.PrintLog(elements_last_line)
|
||||
Console.PrintLog(nodes_last_line)
|
||||
Console.PrintLog("\n")
|
||||
Console.PrintLog(elemts_first_line)
|
||||
Console.PrintLog("\n")
|
||||
Console.PrintLog(elements_last_line)
|
||||
|
||||
z88_mesh_file.seek(0) # go back to the beginning of the file
|
||||
for no, line in enumerate(z88_mesh_file):
|
||||
@@ -226,55 +227,55 @@ def read_z88_mesh(
|
||||
# not supported elements
|
||||
if z88_element_type == 8:
|
||||
# torus8
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Z88 Element No. 8, torus8\n"
|
||||
)
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Rotational elements are not supported at the moment\n"
|
||||
)
|
||||
return {}
|
||||
elif z88_element_type == 12:
|
||||
# torus12
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Z88 Element No. 12, torus12\n"
|
||||
)
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Rotational elements are not supported at the moment\n"
|
||||
)
|
||||
return {}
|
||||
elif z88_element_type == 15:
|
||||
# torus6
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Z88 Element No. 15, torus6\n"
|
||||
)
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Rotational elements are not supported at the moment\n"
|
||||
)
|
||||
return {}
|
||||
elif z88_element_type == 19:
|
||||
# platte16
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Z88 Element No. 19, platte16\n"
|
||||
)
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Not supported at the moment\n"
|
||||
)
|
||||
return {}
|
||||
elif z88_element_type == 21:
|
||||
# schale16, mixture made from hexa8 and hexa20 (thickness is linear)
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Z88 Element No. 21, schale16\n"
|
||||
)
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Not supported at the moment\n"
|
||||
)
|
||||
return {}
|
||||
elif z88_element_type == 22:
|
||||
# schale12, mixtrue made from prism6 and prism15 (thickness is linear)
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Z88 Element No. 22, schale12\n"
|
||||
)
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Not supported at the moment\n"
|
||||
)
|
||||
return {}
|
||||
@@ -392,13 +393,13 @@ def read_z88_mesh(
|
||||
# unknown elements
|
||||
# some examples have -1 for some teaching reasons to show some other stuff
|
||||
else:
|
||||
FreeCAD.Console.PrintError("Unknown element\n")
|
||||
Console.PrintError("Unknown element\n")
|
||||
return {}
|
||||
|
||||
for n in nodes:
|
||||
FreeCAD.Console.PrintLog(str(n) + " " + str(nodes[n]) + "\n")
|
||||
Console.PrintLog(str(n) + " " + str(nodes[n]) + "\n")
|
||||
for e in elements_tria6:
|
||||
FreeCAD.Console.PrintLog(str(e) + " " + str(elements_tria6[e]) + "\n")
|
||||
Console.PrintLog(str(e) + " " + str(elements_tria6[e]) + "\n")
|
||||
FreeCAD.Console.PrintLog("\n")
|
||||
|
||||
z88_mesh_file.close()
|
||||
@@ -429,7 +430,7 @@ def write(
|
||||
fem_mesh: a FemMesh"""
|
||||
|
||||
if not fem_mesh.isDerivedFrom("Fem::FemMesh"):
|
||||
FreeCAD.Console.PrintError("Not a FemMesh was given as parameter.\n")
|
||||
Console.PrintError("Not a FemMesh was given as parameter.\n")
|
||||
return
|
||||
femnodes_mesh = fem_mesh.Nodes
|
||||
import femmesh.meshtools as FemMeshTools
|
||||
@@ -461,7 +462,7 @@ def write_z88_mesh_to_file(
|
||||
):
|
||||
node_dof = 6 # schalenelemente
|
||||
else:
|
||||
FreeCAD.Console.PrintError("Error: wrong z88_element_type.\n")
|
||||
Console.PrintError("Error: wrong z88_element_type.\n")
|
||||
return
|
||||
node_count = len(femnodes_mesh)
|
||||
element_count = len(femelement_table)
|
||||
@@ -545,7 +546,7 @@ def write_z88_mesh_to_file(
|
||||
)
|
||||
)
|
||||
else:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Writing of Z88 elementtype {0} not supported.\n".format(z88_element_type)
|
||||
)
|
||||
# TODO support schale12 (made from prism15) and schale16 (made from hexa20)
|
||||
@@ -559,14 +560,14 @@ def get_z88_element_type(
|
||||
):
|
||||
import femmesh.meshtools as FemMeshTools
|
||||
if not femmesh:
|
||||
FreeCAD.Console.PrintMessage("Error: No femmesh!\n")
|
||||
Console.PrintError("Error: No femmesh!")
|
||||
if not femelement_table:
|
||||
FreeCAD.Console.PrintMessage("We need to get the femelement_table first!\n")
|
||||
Console.PrintError("We need to get the femelement_table first!")
|
||||
femelement_table = FemMeshTools.get_femelement_table(femmesh)
|
||||
# in some cases lowest key in femelement_table is not [1]
|
||||
for elem in sorted(femelement_table):
|
||||
elem_length = len(femelement_table[elem])
|
||||
FreeCAD.Console.PrintLog("node count of first element: " + str(elem_length) + "\n")
|
||||
Console.PrintLog("node count of first element: " + str(elem_length) + "\n")
|
||||
break # break after the first elem
|
||||
if FemMeshTools.is_solid_femmesh(femmesh):
|
||||
if femmesh.TetraCount == femmesh.VolumeCount:
|
||||
@@ -575,43 +576,43 @@ def get_z88_element_type(
|
||||
elif elem_length == 10:
|
||||
return 16
|
||||
else:
|
||||
FreeCAD.Console.PrintMessage("Tetra with neither 4 nor 10 nodes.\n")
|
||||
Console.PrintMessage("Tetra with neither 4 nor 10 nodes.\n")
|
||||
elif femmesh.HexaCount == femmesh.VolumeCount:
|
||||
if elem_length == 8:
|
||||
return 1
|
||||
elif elem_length == 20:
|
||||
return 10
|
||||
else:
|
||||
FreeCAD.Console.PrintMessage("Hexa with neither 8 nor 20 nodes.\n")
|
||||
Console.PrintError("Hexa with neither 8 nor 20 nodes.\n")
|
||||
return 0
|
||||
else:
|
||||
FreeCAD.Console.PrintMessage("no tetra, no hexa or Mixed Volume Elements.\n")
|
||||
Console.PrintError("no tetra, no hexa or Mixed Volume Elements.\n")
|
||||
elif FemMeshTools.is_face_femmesh(femmesh):
|
||||
if femmesh.TriangleCount == femmesh.FaceCount:
|
||||
if elem_length == 3:
|
||||
FreeCAD.Console.PrintMessage("tria3mesh, not supported by Z88.\n")
|
||||
Console.PrintError("tria3mesh, not supported by Z88.\n")
|
||||
return 0
|
||||
elif elem_length == 6:
|
||||
return 24
|
||||
else:
|
||||
FreeCAD.Console.PrintMessage("Tria with neither 3 nor 6 nodes.\n")
|
||||
Console.PrintError("Tria with neither 3 nor 6 nodes.\n")
|
||||
return 0
|
||||
elif femmesh.QuadrangleCount == femmesh.FaceCount:
|
||||
if elem_length == 4:
|
||||
FreeCAD.Console.PrintMessage("quad4mesh, not supported by Z88.\n")
|
||||
Console.PrintError("quad4mesh, not supported by Z88.\n")
|
||||
return 0
|
||||
elif elem_length == 8:
|
||||
return 23
|
||||
else:
|
||||
FreeCAD.Console.PrintMessage("Quad with neither 4 nor 8 nodes.\n")
|
||||
Console.PrintError("Quad with neither 4 nor 8 nodes.\n")
|
||||
return 0
|
||||
else:
|
||||
FreeCAD.Console.PrintMessage("no tria, no quad\n")
|
||||
Console.PrintError("no tria, no quad\n")
|
||||
return 0
|
||||
elif FemMeshTools.is_edge_femmesh(femmesh):
|
||||
FreeCAD.Console.PrintMessage("Edge femmesh will be exported as 3D truss element nr 4.\n")
|
||||
Console.PrintMessage("Edge femmesh will be exported as 3D truss element nr 4.\n")
|
||||
return 4
|
||||
else:
|
||||
FreeCAD.Console.PrintMessage("Neither edge nor face nor solid femmesh.\n")
|
||||
Console.PrintError("Neither edge nor face nor solid femmesh.\n")
|
||||
return 0
|
||||
return 0
|
||||
|
||||
@@ -29,6 +29,7 @@ __url__ = "http://www.freecadweb.org"
|
||||
# \brief FreeCAD Z88 Disp Reader for FEM workbench
|
||||
|
||||
import FreeCAD
|
||||
from FreeCAD import Console
|
||||
import os
|
||||
|
||||
|
||||
@@ -99,7 +100,7 @@ def import_z88_disp(
|
||||
)
|
||||
result_mesh_object.FemMesh = femmesh
|
||||
else:
|
||||
FreeCAD.Console.PrintError("Z88 mesh file z88i1.txt not found!")
|
||||
Console.PrintError("Z88 mesh file z88i1.txt not found!")
|
||||
|
||||
# create result obj
|
||||
for result_set in disp_read["Results"]:
|
||||
@@ -118,7 +119,7 @@ def import_z88_disp(
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
else:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Problem on Z88 result file import. No nodes found in Z88 result file.\n"
|
||||
)
|
||||
return res_obj
|
||||
@@ -145,7 +146,6 @@ def read_z88_disp(
|
||||
|
||||
if lno >= 6:
|
||||
# disp line
|
||||
# print(linelist)
|
||||
node_no = int(linelist[0])
|
||||
mode_disp_x = float(linelist[1])
|
||||
mode_disp_y = float(linelist[2])
|
||||
@@ -160,7 +160,7 @@ def read_z88_disp(
|
||||
results.append(mode_results)
|
||||
|
||||
for r in results[0]["disp"]:
|
||||
FreeCAD.Console.PrintLog("{} --> {}\n".format(r, results[0]["disp"][r]))
|
||||
Console.PrintLog("{} --> {}\n".format(r, results[0]["disp"][r]))
|
||||
|
||||
z88_disp_file.close()
|
||||
return {"Nodes": nodes, "Results": results}
|
||||
|
||||
@@ -28,12 +28,12 @@ __url__ = "http://www.freecadweb.org"
|
||||
# \ingroup FEM
|
||||
# \brief FreeCAD Fenics Mesh XDMF reader for FEM workbench
|
||||
|
||||
import FreeCAD
|
||||
from FreeCAD import Console
|
||||
|
||||
|
||||
def read_fenics_mesh_xdmf(xdmffilename):
|
||||
|
||||
FreeCAD.Console.PrintMessage("Not operational, yet\n")
|
||||
Console.PrintMessage("Not operational, yet\n")
|
||||
|
||||
return {
|
||||
"Nodes": {},
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
from __future__ import print_function
|
||||
|
||||
__title__ = "FreeCAD Fenics XML mesh reader"
|
||||
__author__ = "Johannes Hartung"
|
||||
@@ -31,6 +30,7 @@ __url__ = "http://www.freecadweb.org"
|
||||
|
||||
|
||||
import FreeCAD
|
||||
from FreeCAD import Console
|
||||
from xml.etree import ElementTree as ET
|
||||
import itertools
|
||||
|
||||
@@ -58,8 +58,8 @@ def read_fenics_mesh_xml(xmlfilename):
|
||||
|
||||
vertex_size = 0
|
||||
|
||||
print("Mesh dimension: %d" % (dim,))
|
||||
print("Mesh cell type: %s" % (cell_type,))
|
||||
Console.PrintLog("Mesh dimension: %d\n" % (dim,))
|
||||
Console.PrintLog("Mesh cell type: %s\n" % (cell_type,))
|
||||
|
||||
# every cell type contains a dict with key=dimension and value=number
|
||||
|
||||
@@ -77,10 +77,10 @@ def read_fenics_mesh_xml(xmlfilename):
|
||||
cell_dict = {}
|
||||
|
||||
if find_vertices is None:
|
||||
print("No vertices found!")
|
||||
Console.PrintWarning("No vertices found!\n")
|
||||
else:
|
||||
vertex_size = int(find_vertices.attrib.get("size"))
|
||||
print("Reading %d vertices" % (vertex_size,))
|
||||
Console.PrintLog("Reading %d vertices\n" % (vertex_size,))
|
||||
|
||||
for vertex in find_vertices:
|
||||
ind = int(vertex.get("index"))
|
||||
@@ -94,18 +94,18 @@ def read_fenics_mesh_xml(xmlfilename):
|
||||
# increase node index by one, since fenics starts at 0, FreeCAD at 1
|
||||
# print("%d %f %f %f" % (ind, node_x, node_y, node_z))
|
||||
else:
|
||||
print("found strange vertex tag: %s" % (vertex.tag,))
|
||||
Console.PrintWarning("found strange vertex tag: %s\n" % (vertex.tag,))
|
||||
|
||||
if find_cells is None:
|
||||
print("No cells found!")
|
||||
Console.PrintWarning("No cells found!\n")
|
||||
else:
|
||||
print("Reading %d cells" % (int(find_cells.attrib.get("size")),))
|
||||
Console.PrintLog("Reading %d cells\n" % (int(find_cells.attrib.get("size")),))
|
||||
for cell in find_cells:
|
||||
ind = int(cell.get("index"))
|
||||
|
||||
if cell.tag.lower() != cell_type.lower():
|
||||
print(
|
||||
"Strange mismatch between cell type {} and cell tag {}"
|
||||
Console.PrintWarning(
|
||||
"Strange mismatch between cell type {} and cell tag {}\n"
|
||||
.format(cell_type, cell.tag.lower())
|
||||
)
|
||||
num_vertices = cells_parts_dim[cell_type][0]
|
||||
@@ -232,23 +232,23 @@ def read_fenics_mesh_xml(xmlfilename):
|
||||
root = tree.getroot()
|
||||
|
||||
if root.tag.lower() != "dolfin":
|
||||
print("Strange root tag, should be dolfin!")
|
||||
Console.PrintWarning("Strange root tag, should be dolfin!\n")
|
||||
|
||||
find_mesh = root.find("mesh")
|
||||
if find_mesh is not None: # these are consistency checks of the XML structure
|
||||
print("Mesh found")
|
||||
Console.PrintMessage("Mesh found\n")
|
||||
(nodes, cells_dict, cell_type, dim) = read_mesh_block(find_mesh)
|
||||
element_dict = generate_lower_dimensional_structures(nodes, cells_dict, cell_type, dim)
|
||||
print("Show min max element dict")
|
||||
Console.PrintMessage("Show min max element dict")
|
||||
for (elm, numbers) in list(element_dict.items()):
|
||||
lst = sorted(list(numbers.items()), key=lambda x: x[0])
|
||||
if lst != []:
|
||||
print(elm, " min: ", lst[0], " max: ", lst[-1])
|
||||
Console.PrintWarning(elm, " min: ", lst[0], " max: ", lst[-1], "\n")
|
||||
else:
|
||||
print("No mesh found")
|
||||
Console.PrintError("No mesh found")
|
||||
|
||||
if root.find("data") is not None:
|
||||
print("Internal mesh data found")
|
||||
Console.PrintLog("Internal mesh data found\n")
|
||||
|
||||
return {
|
||||
"Nodes": nodes,
|
||||
|
||||
@@ -28,6 +28,7 @@ __url__ = "http://www.freecadweb.org"
|
||||
# \ingroup FEM
|
||||
# \brief FreeCAD Fenics Mesh XDMF writer for FEM workbench
|
||||
|
||||
from FreeCAD import Console
|
||||
from .importToolsFem import \
|
||||
get_FemMeshObjectDimension,\
|
||||
get_FemMeshObjectElementTypes,\
|
||||
@@ -168,7 +169,10 @@ def write_fenics_mesh_codim_xdmf(
|
||||
fc_topo = fem_mesh_obj.FemMesh.Nodes
|
||||
else:
|
||||
fc_topo = []
|
||||
print("Dimension of mesh incompatible with export XDMF function: %d" % (dim_topo,))
|
||||
Console.PrintError(
|
||||
"Dimension of mesh incompatible with export XDMF function: %d\n"
|
||||
% (dim_topo,)
|
||||
)
|
||||
|
||||
nodeindices = [(
|
||||
nodes_dict[ind] for ind in fem_mesh_obj.FemMesh.getElementNodes(fc_topo_ind)
|
||||
@@ -271,16 +275,16 @@ def write_fenics_mesh_xdmf(
|
||||
"Prism": "unknown", "Pyramid": "unknown",
|
||||
}
|
||||
|
||||
print("Converting " + fem_mesh_obj.Label + " to fenics XDMF File")
|
||||
print("Dimension of mesh: %d" % (get_FemMeshObjectDimension(fem_mesh_obj),))
|
||||
Console.PrintMessage("Converting " + fem_mesh_obj.Label + " to fenics XDMF File\n")
|
||||
Console.PrintMessage("Dimension of mesh: %d\n" % (get_FemMeshObjectDimension(fem_mesh_obj),))
|
||||
|
||||
elements_in_mesh = get_FemMeshObjectElementTypes(fem_mesh_obj)
|
||||
print("Elements appearing in mesh: %s" % (str(elements_in_mesh),))
|
||||
Console.PrintMessage("Elements appearing in mesh: %s\n" % (str(elements_in_mesh),))
|
||||
celltype_in_mesh = get_MaxDimElementFromList(elements_in_mesh)
|
||||
(num_cells, cellname_fc, dim_cell) = celltype_in_mesh
|
||||
cellname_fenics = FreeCAD_to_Fenics_dict[cellname_fc]
|
||||
print(
|
||||
"Celltype in mesh -> {} and its Fenics dolfin name: {}"
|
||||
Console.PrintMessage(
|
||||
"Celltype in mesh -> {} and its Fenics dolfin name: {}\n"
|
||||
.format(celltype_in_mesh, cellname_fenics)
|
||||
)
|
||||
|
||||
@@ -313,15 +317,17 @@ def write_fenics_mesh_xdmf(
|
||||
gmshgroups = get_FemMeshObjectMeshGroups(fem_mesh_obj)
|
||||
|
||||
if gmshgroups is not ():
|
||||
print("found mesh groups")
|
||||
Console.PrintMessage("found mesh groups\n")
|
||||
|
||||
for g in gmshgroups:
|
||||
mesh_function_type = fem_mesh.getGroupElementType(g)
|
||||
mesh_function_codim = dim_cell - FreeCAD_Group_Dimensions[mesh_function_type]
|
||||
mesh_function_name = fem_mesh.getGroupName(g)
|
||||
|
||||
print("group id: %d (label: %s) with element type %s and codim %d"
|
||||
% (g, mesh_function_name, mesh_function_type, mesh_function_codim))
|
||||
Console.PrintMessage(
|
||||
"group id: %d (label: %s) with element type %s and codim %d\n"
|
||||
% (g, mesh_function_name, mesh_function_type, mesh_function_codim)
|
||||
)
|
||||
|
||||
mesh_function_grid = ET.SubElement(
|
||||
domain, "Grid",
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
# * USA *
|
||||
# * *
|
||||
# ***************************************************************************
|
||||
from __future__ import print_function
|
||||
|
||||
__title__ = "FreeCAD Fenics XML mesh writer"
|
||||
__author__ = "Johannes Hartung"
|
||||
@@ -30,6 +29,7 @@ __url__ = "http://www.freecadweb.org"
|
||||
# \brief FreeCAD Fenics Mesh XML writer for FEM workbench
|
||||
|
||||
|
||||
from FreeCAD import Console
|
||||
from .importToolsFem import get_FemMeshObjectDimension
|
||||
from .importToolsFem import get_FemMeshObjectElementTypes
|
||||
from .importToolsFem import get_MaxDimElementFromList
|
||||
@@ -68,17 +68,18 @@ def write_fenics_mesh_xml(fem_mesh_obj, outputfile):
|
||||
"hexahedron": 8
|
||||
}
|
||||
|
||||
print("Converting " + fem_mesh_obj.Label + " to fenics XML File")
|
||||
print("Dimension of mesh: %d" % (get_FemMeshObjectDimension(fem_mesh_obj),))
|
||||
Console.Message("Converting " + fem_mesh_obj.Label + " to fenics XML File\n")
|
||||
Console.Message("Dimension of mesh: %d\n" % (get_FemMeshObjectDimension(fem_mesh_obj),))
|
||||
|
||||
elements_in_mesh = get_FemMeshObjectElementTypes(fem_mesh_obj)
|
||||
print("Elements appearing in mesh: %s" % (str(elements_in_mesh),))
|
||||
Console.Message("Elements appearing in mesh: %s" % (str(elements_in_mesh),))
|
||||
celltype_in_mesh = get_MaxDimElementFromList(elements_in_mesh)
|
||||
(num_cells, cellname_fc, dim_cell) = celltype_in_mesh
|
||||
cellname_fenics = FreeCAD_to_Fenics_dict[cellname_fc]
|
||||
num_verts_cell = XML_Number_of_Nodes_dict[cellname_fenics]
|
||||
print(
|
||||
"Celltype in mesh -> %s and its Fenics name: %s" % (str(celltype_in_mesh), cellname_fenics)
|
||||
Console.Message(
|
||||
"Celltype in mesh -> %s and its Fenics name: %s\n"
|
||||
% (str(celltype_in_mesh), cellname_fenics)
|
||||
)
|
||||
|
||||
root = ET.Element("dolfin", dolfin="http://fenicsproject.org")
|
||||
|
||||
@@ -31,6 +31,7 @@ import sys
|
||||
import subprocess
|
||||
|
||||
import FreeCAD
|
||||
from FreeCAD import Console
|
||||
import Fem
|
||||
from FreeCAD import Units
|
||||
from . import meshtools
|
||||
@@ -73,7 +74,7 @@ class GmshTools():
|
||||
elif self.order == "2nd":
|
||||
self.order = "2"
|
||||
else:
|
||||
print("Error in order")
|
||||
Console.PrintError("Error in order\n")
|
||||
|
||||
# dimension
|
||||
self.dimension = self.mesh_obj.ElementDimension
|
||||
@@ -160,15 +161,15 @@ class GmshTools():
|
||||
return error
|
||||
|
||||
def start_logs(self):
|
||||
print("\nGmsh FEM mesh run is being started.")
|
||||
print(" Part to mesh: Name --> {}, Label --> {}, ShapeType --> {}".format(
|
||||
Console.PrintLog("\nGmsh FEM mesh run is being started.\n")
|
||||
Console.PrintLog(" Part to mesh: Name --> {}, Label --> {}, ShapeType --> {}\n".format(
|
||||
self.part_obj.Name,
|
||||
self.part_obj.Label,
|
||||
self.part_obj.Shape.ShapeType
|
||||
))
|
||||
print(" CharacteristicLengthMax: {}".format(self.clmax))
|
||||
print(" CharacteristicLengthMin: {}".format(self.clmin))
|
||||
print(" ElementOrder: {}".format(self.order))
|
||||
Console.PrintLog(" CharacteristicLengthMax: {}\n".format(self.clmax))
|
||||
Console.PrintLog(" CharacteristicLengthMin: {}\n".format(self.clmin))
|
||||
Console.PrintLog(" ElementOrder: {}\n".format(self.order))
|
||||
|
||||
def get_dimension(self):
|
||||
# Dimension
|
||||
@@ -188,18 +189,18 @@ class GmshTools():
|
||||
self.dimension = "1"
|
||||
elif shty == "Vertex":
|
||||
# print("Found: " + shty)
|
||||
FreeCAD.Console.PrintError("You can not mesh a Vertex.\n")
|
||||
Console.PrintError("You can not mesh a Vertex.\n")
|
||||
self.dimension = "0"
|
||||
elif shty == "Compound":
|
||||
# print(" Found a " + shty)
|
||||
FreeCAD.Console.PrintLog(
|
||||
Console.PrintLog(
|
||||
" Found a Compound. Since it could contain"
|
||||
"any kind of shape dimension 3 is used.\n"
|
||||
)
|
||||
self.dimension = "3" # dimension 3 works for 2D and 1d shapes as well
|
||||
else:
|
||||
self.dimension = "0"
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Could not retrieve Dimension from shape type. Please choose dimension."
|
||||
)
|
||||
elif self.dimension == "3D":
|
||||
@@ -209,8 +210,8 @@ class GmshTools():
|
||||
elif self.dimension == "1D":
|
||||
self.dimension = "1"
|
||||
else:
|
||||
print("Error in dimension")
|
||||
print(" ElementDimension: " + self.dimension)
|
||||
Console.PrintError("Error in dimension\n")
|
||||
Console.PrintMessage(" ElementDimension: " + self.dimension + "\n")
|
||||
|
||||
def get_tmp_file_paths(self, param_working_dir=None, create=False):
|
||||
self.working_dir = ""
|
||||
@@ -219,7 +220,7 @@ class GmshTools():
|
||||
self.working_dir = param_working_dir
|
||||
if femutils.check_working_dir(self.working_dir) is not True:
|
||||
if create is True:
|
||||
FreeCAD.Console.PrintMessage(
|
||||
Console.PrintMessage(
|
||||
"Dir given as parameter \'{}\' doesn't exist, "
|
||||
"but parameter to create it is set to True. "
|
||||
"Dir will be created.\n".format(self.working_dir)
|
||||
@@ -227,13 +228,13 @@ class GmshTools():
|
||||
from os import mkdir
|
||||
mkdir(param_working_dir)
|
||||
else:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Dir given as parameter \'{}\' doesn't exist "
|
||||
"and create parameter is set to False.\n"
|
||||
.format(self.working_dir)
|
||||
)
|
||||
self.working_dir = femutils.get_pref_working_dir(self.mesh_obj)
|
||||
FreeCAD.Console.PrintMessage(
|
||||
Console.PrintMessage(
|
||||
"Dir \'{}\' will be used instead.\n"
|
||||
.format(self.working_dir)
|
||||
)
|
||||
@@ -242,12 +243,12 @@ class GmshTools():
|
||||
|
||||
# check working_dir exist, if not use a tmp dir and inform the user
|
||||
if femutils.check_working_dir(self.working_dir) is not True:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"Dir \'{}\' doesn't exist or cannot be created.\n"
|
||||
.format(self.working_dir)
|
||||
)
|
||||
self.working_dir = femutils.get_temp_dir(self.mesh_obj)
|
||||
FreeCAD.Console.PrintMessage(
|
||||
Console.PrintMessage(
|
||||
"Dir \'{}\' will be used instead.\n"
|
||||
.format(self.working_dir)
|
||||
)
|
||||
@@ -259,9 +260,9 @@ class GmshTools():
|
||||
self.temp_file_geometry = join(self.working_dir, _geometry_name + ".brep") # geometry file
|
||||
self.temp_file_mesh = join(self.working_dir, self.mesh_name + ".unv") # mesh file
|
||||
self.temp_file_geo = join(self.working_dir, "shape2mesh.geo") # Gmsh input file
|
||||
print(" " + self.temp_file_geometry)
|
||||
print(" " + self.temp_file_mesh)
|
||||
print(" " + self.temp_file_geo)
|
||||
Console.PrintMessage(" " + self.temp_file_geometry + "\n")
|
||||
Console.PrintMessage(" " + self.temp_file_mesh + "\n")
|
||||
Console.PrintMessage(" " + self.temp_file_geo + "\n")
|
||||
|
||||
def get_gmsh_command(self):
|
||||
from platform import system
|
||||
@@ -288,7 +289,7 @@ class GmshTools():
|
||||
"Please install Gmsh or set path to binary "
|
||||
"in FEM preferences tab Gmsh.\n"
|
||||
)
|
||||
FreeCAD.Console.PrintError(error_message)
|
||||
Console.PrintError(error_message)
|
||||
raise Exception(error_message)
|
||||
self.gmsh_bin = gmsh_path
|
||||
else:
|
||||
@@ -296,7 +297,7 @@ class GmshTools():
|
||||
"No standard location implemented for your operating system. "
|
||||
"Set GMHS binary path in FEM preferences.\n"
|
||||
)
|
||||
FreeCAD.Console.PrintError(error_message)
|
||||
Console.PrintError(error_message)
|
||||
raise Exception(error_message)
|
||||
else:
|
||||
if not self.gmsh_bin:
|
||||
@@ -310,7 +311,7 @@ class GmshTools():
|
||||
self.gmsh_bin = FreeCAD.getHomePath() + "bin/gmsh.exe"
|
||||
else:
|
||||
self.gmsh_bin = "gmsh"
|
||||
print(" " + self.gmsh_bin)
|
||||
Console.PrintMessage(" " + self.gmsh_bin + "\n")
|
||||
|
||||
def get_group_data(self):
|
||||
# TODO: solids, faces, edges and vertexes don't seem to work together in one group,
|
||||
@@ -321,21 +322,21 @@ class GmshTools():
|
||||
# print(" No mesh group objects.")
|
||||
pass
|
||||
else:
|
||||
print(" Mesh group objects, we need to get the elements.")
|
||||
Console.PrintMessage(" Mesh group objects, we need to get the elements.\n")
|
||||
for mg in self.mesh_obj.MeshGroupList:
|
||||
new_group_elements = meshtools.get_mesh_group_elements(mg, self.part_obj)
|
||||
for ge in new_group_elements:
|
||||
if ge not in self.group_elements:
|
||||
self.group_elements[ge] = new_group_elements[ge]
|
||||
else:
|
||||
FreeCAD.Console.PrintError(" A group with this name exists already.\n")
|
||||
Console.PrintError(" A group with this name exists already.\n")
|
||||
|
||||
# group meshing for analysis
|
||||
analysis_group_meshing = FreeCAD.ParamGet(
|
||||
"User parameter:BaseApp/Preferences/Mod/Fem/General"
|
||||
).GetBool("AnalysisGroupMeshing", False)
|
||||
if self.analysis and analysis_group_meshing:
|
||||
print(" Group meshing for analysis.")
|
||||
Console.PrintMessage(" Group meshing for analysis.\n")
|
||||
self.group_nodes_export = True
|
||||
new_group_elements = meshtools.get_analysis_group_elements(
|
||||
self.analysis,
|
||||
@@ -345,12 +346,12 @@ class GmshTools():
|
||||
if ge not in self.group_elements:
|
||||
self.group_elements[ge] = new_group_elements[ge]
|
||||
else:
|
||||
FreeCAD.Console.PrintError(" A group with this name exists already.\n")
|
||||
Console.PrintError(" A group with this name exists already.\n")
|
||||
else:
|
||||
print(" No Group meshing for analysis.")
|
||||
Console.PrintMessage(" No Group meshing for analysis.\n")
|
||||
|
||||
if self.group_elements:
|
||||
print(" {}".format(self.group_elements))
|
||||
Console.PrintMessage(" {}\n".format(self.group_elements))
|
||||
|
||||
def get_region_data(self):
|
||||
# mesh regions
|
||||
@@ -358,7 +359,7 @@ class GmshTools():
|
||||
# print(" No mesh regions.")
|
||||
pass
|
||||
else:
|
||||
print(" Mesh regions, we need to get the elements.")
|
||||
Console.PrintMessage(' Mesh regions, we need to get the elements.\n')
|
||||
# by the use of MeshRegion object and a BooleanSplitCompound
|
||||
# there could be problems with node numbers see
|
||||
# http://forum.freecadweb.org/viewtopic.php?f=18&t=18780&start=40#p149467
|
||||
@@ -377,7 +378,7 @@ class GmshTools():
|
||||
"It is strongly recommended to extract the shape to mesh "
|
||||
"from the Compound and use this one."
|
||||
)
|
||||
FreeCAD.Console.PrintError(error_message + "\n")
|
||||
Console.PrintError(error_message + "\n")
|
||||
# TODO: no gui popup because FreeCAD will be in a endless output loop
|
||||
# as long as the pop up is on --> maybe find a better solution for
|
||||
# either of both --> thus the pop up is in task panel
|
||||
@@ -394,7 +395,7 @@ class GmshTools():
|
||||
# if not try to find the element in the shape to mesh
|
||||
search_ele_in_shape_to_mesh = False
|
||||
if not self.part_obj.Shape.isSame(sub[0].Shape):
|
||||
FreeCAD.Console.PrintLog(
|
||||
Console.PrintLog(
|
||||
" One element of the meshregion {} is "
|
||||
"not an element of the Part to mesh.\n"
|
||||
"But we are going to try to find it in "
|
||||
@@ -416,7 +417,7 @@ class GmshTools():
|
||||
if found_element:
|
||||
elems = found_element
|
||||
else:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"One element of the meshregion {} could not be found "
|
||||
"in the Part to mesh. It will be ignored.\n"
|
||||
.format(mr_obj.Name)
|
||||
@@ -427,19 +428,19 @@ class GmshTools():
|
||||
mr_obj.CharacteristicLength
|
||||
).Value
|
||||
else:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"The element {} of the meshregion {} has "
|
||||
"been added to another mesh region.\n"
|
||||
.format(elems, mr_obj.Name)
|
||||
)
|
||||
else:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"The meshregion: {} is not used to create the mesh "
|
||||
"because the reference list is empty.\n"
|
||||
.format(mr_obj.Name)
|
||||
)
|
||||
else:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"The meshregion: {} is not used to create the "
|
||||
"mesh because the CharacteristicLength is 0.0 mm.\n"
|
||||
.format(mr_obj.Name)
|
||||
@@ -449,8 +450,8 @@ class GmshTools():
|
||||
ele_shape = meshtools.get_element(self.part_obj, eleml)
|
||||
ele_vertexes = meshtools.get_vertexes_by_element(self.part_obj.Shape, ele_shape)
|
||||
self.ele_node_map[eleml] = ele_vertexes
|
||||
print(" {}".format(self.ele_length_map))
|
||||
print(" {}".format(self.ele_node_map))
|
||||
Console.PrintMessage(" {}\n".format(self.ele_length_map))
|
||||
Console.PrintMessage(" {}\n".format(self.ele_node_map))
|
||||
|
||||
def get_boundary_layer_data(self):
|
||||
# mesh boundary layer
|
||||
@@ -462,7 +463,7 @@ class GmshTools():
|
||||
# print(" No mesh boundary layer setting document object.")
|
||||
pass
|
||||
else:
|
||||
print(" Mesh boundary layers, we need to get the elements.")
|
||||
Console.PrintMessage(" Mesh boundary layers, we need to get the elements.\n")
|
||||
if self.part_obj.Shape.ShapeType == "Compound":
|
||||
# see http://forum.freecadweb.org/viewtopic.php?f=18&t=18780&start=40#p149467 and
|
||||
# http://forum.freecadweb.org/viewtopic.php?f=18&t=18780&p=149520#p149520
|
||||
@@ -471,7 +472,7 @@ class GmshTools():
|
||||
"It is strongly recommended to extract the shape to mesh "
|
||||
"from the Compound and use this one."
|
||||
)
|
||||
FreeCAD.Console.PrintError(err + "\n")
|
||||
Console.PrintError(err + "\n")
|
||||
for mr_obj in self.mesh_obj.MeshBoundaryLayerList:
|
||||
if mr_obj.MinimumThickness and Units.Quantity(mr_obj.MinimumThickness).Value > 0:
|
||||
if mr_obj.References:
|
||||
@@ -483,7 +484,7 @@ class GmshTools():
|
||||
# if not try to find the element in the shape to mesh
|
||||
search_ele_in_shape_to_mesh = False
|
||||
if not self.part_obj.Shape.isSame(sub[0].Shape):
|
||||
FreeCAD.Console.PrintLog(
|
||||
Console.PrintLog(
|
||||
" One element of the mesh boundary layer {} is "
|
||||
"not an element of the Part to mesh.\n"
|
||||
"But we are going to try to find it in "
|
||||
@@ -505,7 +506,7 @@ class GmshTools():
|
||||
if found_element: # also
|
||||
elems = found_element
|
||||
else:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"One element of the mesh boundary layer {} could "
|
||||
"not be found in the Part to mesh. "
|
||||
"It will be ignored.\n"
|
||||
@@ -518,7 +519,7 @@ class GmshTools():
|
||||
belem_list.append(elems)
|
||||
self.bl_boundary_list.append(elems)
|
||||
else:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"The element {} of the mesh boundary "
|
||||
"layer {} has been added "
|
||||
"to another mesh boundary layer.\n"
|
||||
@@ -550,23 +551,23 @@ class GmshTools():
|
||||
elif self.dimension == "3":
|
||||
setting["FacesList"] = belem_list
|
||||
else:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"boundary layer is only supported for 2D and 3D mesh"
|
||||
)
|
||||
self.bl_setting_list.append(setting)
|
||||
else:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"The mesh boundary layer: {} is not used to create "
|
||||
"the mesh because the reference list is empty.\n"
|
||||
.format(mr_obj.Name)
|
||||
)
|
||||
else:
|
||||
FreeCAD.Console.PrintError(
|
||||
Console.PrintError(
|
||||
"The mesh boundary layer: {} is not used to create "
|
||||
"the mesh because the min thickness is 0.0 mm.\n"
|
||||
.format(mr_obj.Name)
|
||||
)
|
||||
print(" {}".format(self.bl_setting_list))
|
||||
Console.PrintMessage(" {}\n".format(self.bl_setting_list))
|
||||
|
||||
def write_groups(self, geo):
|
||||
if self.group_elements:
|
||||
@@ -612,7 +613,7 @@ class GmshTools():
|
||||
# currently single body is supported
|
||||
if len(self.bl_setting_list):
|
||||
geo.write("// boundary layer setting\n")
|
||||
print(" Start to write boundary layer setup")
|
||||
Console.PrintMessage(" Start to write boundary layer setup\n")
|
||||
field_number = 1
|
||||
for item in self.bl_setting_list:
|
||||
prefix = "Field[" + str(field_number) + "]"
|
||||
@@ -629,13 +630,13 @@ class GmshTools():
|
||||
else:
|
||||
line = prefix + "." + str(k) + " = " + str(v) + ";\n"
|
||||
geo.write(line)
|
||||
print(line)
|
||||
Console.PrintMessage("{}\n".format(line))
|
||||
geo.write("BoundaryLayer Field = " + str(field_number) + ";\n")
|
||||
geo.write("// end of this boundary layer setup \n")
|
||||
field_number += 1
|
||||
geo.write("\n")
|
||||
geo.flush()
|
||||
print(" finished in boundary layer setup")
|
||||
Console.PrintMessage(" finished in boundary layer setup\n")
|
||||
else:
|
||||
# print(" no boundary layer setup is found for this mesh")
|
||||
geo.write("// no boundary layer settings for this mesh\n")
|
||||
@@ -811,7 +812,7 @@ class GmshTools():
|
||||
# print(error)
|
||||
except:
|
||||
error = "Error executing: {}\n".format(" ".join(comandlist))
|
||||
FreeCAD.Console.PrintError(error)
|
||||
Console.PrintError(error)
|
||||
self.error = True
|
||||
return error
|
||||
|
||||
@@ -819,9 +820,9 @@ class GmshTools():
|
||||
if not self.error:
|
||||
fem_mesh = Fem.read(self.temp_file_mesh)
|
||||
self.mesh_obj.FemMesh = fem_mesh
|
||||
FreeCAD.Console.PrintMessage(" The Part should have a pretty new FEM mesh!\n")
|
||||
Console.PrintMessage(" The Part should have a pretty new FEM mesh!\n")
|
||||
else:
|
||||
FreeCAD.Console.PrintError("No mesh was created.\n")
|
||||
Console.PrintError("No mesh was created.\n")
|
||||
|
||||
## @}
|
||||
|
||||
|
||||
@@ -31,8 +31,8 @@ import os.path
|
||||
import subprocess
|
||||
import tempfile
|
||||
|
||||
import FreeCAD
|
||||
from FreeCAD import Units
|
||||
from FreeCAD import Console
|
||||
import Fem
|
||||
import femtools.femutils as femutils
|
||||
import femmesh.gmshtools as gmshtools
|
||||
@@ -125,7 +125,7 @@ class Writer(object):
|
||||
groups.extend(self._builder.getBoundaryNames())
|
||||
self._exportToUnv(groups, mesh, unvPath)
|
||||
if self.testmode:
|
||||
FreeCAD.Console.PrintMessage("We are in testmode ElmerGrid may not be installed.\n")
|
||||
Console.PrintMessage("We are in testmode ElmerGrid may not be installed.\n")
|
||||
else:
|
||||
binary = settings.get_binary("ElmerGrid")
|
||||
if binary is None:
|
||||
@@ -165,7 +165,7 @@ class Writer(object):
|
||||
tools.write_part_file()
|
||||
tools.write_geo()
|
||||
if self.testmode:
|
||||
FreeCAD.Console.PrintMessage("We are in testmode, Gmsh may not be installed.\n")
|
||||
Console.PrintMessage("We are in testmode, Gmsh may not be installed.\n")
|
||||
import shutil
|
||||
shutil.copyfile(geoPath, os.path.join(self.directory, "group_mesh.geo"))
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user