Commit ee2d5403 authored by Andrey Filippov's avatar Andrey Filippov

more bug fixes

parent 5a4e5e91
...@@ -249,16 +249,16 @@ def create_file_info(freecadObjects, fname=""): ...@@ -249,16 +249,16 @@ def create_file_info(freecadObjects, fname=""):
progress_bar = Base.ProgressIndicator() progress_bar = Base.ProgressIndicator()
progress_bar.start("Generating objects%s to export to X3D ..."%(txt), len(freecadObjects)) progress_bar.start("Generating objects%s to export to X3D ..."%(txt), len(freecadObjects))
FreeCAD.Console.PrintMessage("Generating %d objects%s to export to X3D\n"%( len(freecadObjects), txt)); FreeCAD.Console.PrintMessage("Generating %d objects%s to export to X3D\n"%( len(freecadObjects), txt));
print("Generating %d objects%s to export to X3D\n"%( len(freecadObjects), txt)); print("create_file_info(): Generating %d objects%s to export to X3D\n"%( len(freecadObjects), txt));
objects = [] objects = []
pp = pprint.PrettyPrinter(indent=4) pp = pprint.PrettyPrinter(indent=4)
allSolids=[] allSolids=[]
for o in freecadObjects: for no,o in enumerate (freecadObjects):
# FreeCAD.Console.PrintMessage("Generating object # %d\n"%(no)); # FreeCAD.Console.PrintMessage("Generating object # %d\n"%(no));
# print("Generating object # %d"%(no)); print("Generating object # %d"%(no));
if hasattr(o, "Shape"): if hasattr(o, "Shape"):
shape=o.Shape shape=o.Shape
#repairing open shells #repairing open shells
...@@ -275,9 +275,12 @@ def create_file_info(freecadObjects, fname=""): ...@@ -275,9 +275,12 @@ def create_file_info(freecadObjects, fname=""):
dc = o.ViewObject.DiffuseColor dc = o.ViewObject.DiffuseColor
except AttributeError: except AttributeError:
continue continue
print("dc=",dc);
for clr in dc: # colors are one per face for clr in dc: # colors are one per face
color_set.add(clr) color_set.add(clr)
col_list = list(color_set) col_list = list(color_set)
print("col_list=",col_list);
col_dict={} # index for each color (reverse to list) col_dict={} # index for each color (reverse to list)
for i, clr in enumerate(col_list): for i, clr in enumerate(col_list):
col_dict[clr] = i col_dict[clr] = i
...@@ -644,7 +647,7 @@ def findComponents(assembly, ...@@ -644,7 +647,7 @@ def findComponents(assembly,
aname = "" aname = ""
if not assembly: # including "" string if not assembly: # including "" string
assembly = FreeCAD.activeDocument().Objects assembly = FreeCAD.activeDocument().Objects
FreeCAD.Console.PrintMessage("Using %d solids in the active document @%f"%(len(assembly), time.time()-start_time)); FreeCAD.Console.PrintMessage("Using %d solids in the active document @%f\n"%(len(assembly), time.time()-start_time));
if isinstance (assembly, (bytes,str)): if isinstance (assembly, (bytes,str)):
assembly_path = assembly assembly_path = assembly
aname,_ = os.path.splitext(os.path.basename(assembly_path)) aname,_ = os.path.splitext(os.path.basename(assembly_path))
...@@ -653,7 +656,7 @@ def findComponents(assembly, ...@@ -653,7 +656,7 @@ def findComponents(assembly,
assembly = Part.read(assembly_path) assembly = Part.read(assembly_path)
print(" got %d solids @%f"%(len(assembly.Solids), time.time()-start_time)) print(" got %d solids @%f"%(len(assembly.Solids), time.time()-start_time))
else: else:
FreeCAD.Console.PrintMessage("Using STEP file assembly %s @%f"%(assembly_path, time.time()-start_time)); FreeCAD.Console.PrintMessage("Using STEP file assembly %s @%f\n"%(assembly_path, time.time()-start_time));
FreeCAD.loadFile(assembly_path) FreeCAD.loadFile(assembly_path)
doc = FreeCAD.activeDocument() doc = FreeCAD.activeDocument()
doc.Label = aname doc.Label = aname
...@@ -662,7 +665,7 @@ def findComponents(assembly, ...@@ -662,7 +665,7 @@ def findComponents(assembly,
FreeCAD.Console.PrintMessage(" got %d solids @%f\n"%(len(assembly), time.time()-start_time)); FreeCAD.Console.PrintMessage(" got %d solids @%f\n"%(len(assembly), time.time()-start_time));
# assuming assembly is doc.Objects # assuming assembly is doc.Objects
if isinstance(assembly,Part.Shape): if isinstance(assembly,Part.Shape):
FreeCAD.Console.PrintMessage("Using provided objects @%f"%(len(assembly.Solids), time.time()-start_time)); FreeCAD.Console.PrintMessage("Using provided objects @%f\n"%(len(assembly.Solids), time.time()-start_time));
objects,solids = create_file_info_nogui(shape, aname) objects,solids = create_file_info_nogui(shape, aname)
# shape = assembly # shape = assembly
else: else:
...@@ -1144,7 +1147,8 @@ def generateAssemblyX3d(assembly_path, ...@@ -1144,7 +1147,8 @@ def generateAssemblyX3d(assembly_path,
precision_volume = PRECISION_VOLUME, precision_volume = PRECISION_VOLUME,
precision_gyration = PRECISION_GYRATION, precision_gyration = PRECISION_GYRATION,
precision_inside = PRECISION_INSIDE, precision_inside = PRECISION_INSIDE,
precision = PRECISION precision = PRECISION,
assembly_suffix = ASSEMBLY_SUFFIX
): ):
""" """
Generate X3D file for the assembly and the parts (if they are not yet converted) Generate X3D file for the assembly and the parts (if they are not yet converted)
...@@ -1159,6 +1163,8 @@ def generateAssemblyX3d(assembly_path, ...@@ -1159,6 +1163,8 @@ def generateAssemblyX3d(assembly_path,
@param precision_gyration = PRECISION_GYRATION - relative precision in radius of gyration calculations @param precision_gyration = PRECISION_GYRATION - relative precision in radius of gyration calculations
@param precision_inside = PRECISION_INSIDE - relative precision in calculations of point inside/outside of a solid @param precision_inside = PRECISION_INSIDE - relative precision in calculations of point inside/outside of a solid
@param precision = PRECISION - precision in vector calculation @param precision = PRECISION - precision in vector calculation
@param assembly_suffix = ASSEMBLY_SUFFIX - generated assembly file name suffix
@return a dictionary with 4 fields (each list value has the same number of elements): @return a dictionary with 4 fields (each list value has the same number of elements):
'solids' - a list of solids in the assembly 'solids' - a list of solids in the assembly
...@@ -1191,8 +1197,8 @@ def generateAssemblyX3d(assembly_path, ...@@ -1191,8 +1197,8 @@ def generateAssemblyX3d(assembly_path,
assName= FreeCAD.activeDocument().Objects[0].Label assName= FreeCAD.activeDocument().Objects[0].Label
FreeCAD.Console.PrintMessage("findComponents() Done, ass_name=%s\n"%(assName)); FreeCAD.Console.PrintMessage("findComponents() Done, ass_name=%s\n"%(assName));
ass_with_suffix = assName ass_with_suffix = assName
if not ass_with_suffix.endswith(ASSEMBLY_SUFFIX): if not ass_with_suffix.endswith(assembly_suffix):
ass_with_suffix = assName + ASSEMBLY_SUFFIX ass_with_suffix = assName + assembly_suffix
FreeCAD.Console.PrintMessage("ass_with_suffix=%s\n"%(ass_with_suffix)); FreeCAD.Console.PrintMessage("ass_with_suffix=%s\n"%(ass_with_suffix));
x3dFile = os.path.join(ROOT_DIR,X3D_DIR, ass_with_suffix + X3D_EXT) # currently in the same directory as parts x3dFile = os.path.join(ROOT_DIR,X3D_DIR, ass_with_suffix + X3D_EXT) # currently in the same directory as parts
x3dNode = et.Element('x3d') x3dNode = et.Element('x3d')
...@@ -1239,10 +1245,10 @@ def generateAssemblyX3d(assembly_path, ...@@ -1239,10 +1245,10 @@ def generateAssemblyX3d(assembly_path,
FreeCAD.Console.PrintMessage("Component %d does not have any matches, ignoring. Candidates: %s\n"%(i,str(components['candidates'][i]))) FreeCAD.Console.PrintMessage("Component %d does not have any matches, ignoring. Candidates: %s\n"%(i,str(components['candidates'][i])))
continue continue
part = list(transformations.keys())[0] part = list(transformations.keys())[0]
# rename part if there is the same one with ASSEMBLY_SUFFIX # rename part if there is the same one with assembly_suffix
part_name = part part_name = part
if ASSEMBLY_SUFFIX and os.path.isfile( os.path.join(ROOT_DIR, X3D_DIR, part + ASSEMBLY_SUFFIX + X3D_EXT)) : if assembly_suffix and os.path.isfile( os.path.join(ROOT_DIR, X3D_DIR, part + assembly_suffix + X3D_EXT)) :
part_name = part + ASSEMBLY_SUFFIX part_name = part + assembly_suffix
transformation = transformations[part] transformation = transformations[part]
bbox= bBoxToX3d(components['solids'][i].BoundBox) bbox= bBoxToX3d(components['solids'][i].BoundBox)
...@@ -1250,7 +1256,7 @@ def generateAssemblyX3d(assembly_path, ...@@ -1250,7 +1256,7 @@ def generateAssemblyX3d(assembly_path,
transform = matrix4ToX3D(transformation) transform = matrix4ToX3D(transformation)
rot=transform['rotation'] rot=transform['rotation']
print("%d: Adding %s, rotation = (x=%f y=%f z=%f theta=%f)"%(i,part,rot[0],rot[1],rot[2],rot[3])) print("%d: Adding %s, rotation = (x=%f y=%f z=%f theta=%f)"%(i,part,rot[0],rot[1],rot[2],rot[3]))
FreeCAD.Console.PrintMessage("%d: Adding %s, rotation = (x=%f y=%f z=%f theta=%f)"%(i,part,rot[0],rot[1],rot[2],rot[3])) FreeCAD.Console.PrintMessage("%d: Adding %s, rotation = (x=%f y=%f z=%f theta=%f)\n"%(i,part,rot[0],rot[1],rot[2],rot[3]))
if part in defined_parts: if part in defined_parts:
defined_parts[part] += 1 defined_parts[part] += 1
else: else:
...@@ -1630,7 +1636,7 @@ class X3dStepAssyDialog(QtGui.QWidget): ...@@ -1630,7 +1636,7 @@ class X3dStepAssyDialog(QtGui.QWidget):
self.setGeometry(100, 100, 300, 200) self.setGeometry(100, 100, 300, 200)
self.setWindowTitle("STEP assembly to X3D converter") self.setWindowTitle("STEP assembly to X3D converter")
FreeCAD.Console.PrintMessage("Disabling STEP compound merge in preferences/Import-Export/STEP"); FreeCAD.Console.PrintMessage("Disabling STEP compound merge in preferences/Import-Export/STEP\n");
#FIXME - uncomment when done. Merges STEP solid into a single grey object #FIXME - uncomment when done. Merges STEP solid into a single grey object
App.ParamGet("User parameter:BaseApp/Preferences/Mod/Import/hSTEP").SetBool('ReadShapeCompoundMode',False) App.ParamGet("User parameter:BaseApp/Preferences/Mod/Import/hSTEP").SetBool('ReadShapeCompoundMode',False)
#---------------------------------------------------------------------- #----------------------------------------------------------------------
...@@ -1815,7 +1821,7 @@ class X3dStepAssyDialog(QtGui.QWidget): ...@@ -1815,7 +1821,7 @@ class X3dStepAssyDialog(QtGui.QWidget):
msgBox = QtGui.QMessageBox.critical(self,"BOM not available", "BOM is available only after assembly conversion") msgBox = QtGui.QMessageBox.critical(self,"BOM not available", "BOM is available only after assembly conversion")
msgBox.exec_() msgBox.exec_()
return return
FreeCAD.Console.PrintMessage("Getting BOM...") FreeCAD.Console.PrintMessage("Getting BOM...\n")
self.preRun() self.preRun()
bom = getBOM() bom = getBOM()
try: try:
...@@ -1839,7 +1845,7 @@ class X3dStepAssyDialog(QtGui.QWidget): ...@@ -1839,7 +1845,7 @@ class X3dStepAssyDialog(QtGui.QWidget):
return return
def showOffsets(self): def showOffsets(self):
FreeCAD.Console.PrintMessage("Starting parts offsets calculation...") FreeCAD.Console.PrintMessage("Starting parts offsets calculation...\n")
self.preRun() self.preRun()
offsets = list_parts_offsets() offsets = list_parts_offsets()
...@@ -1863,10 +1869,18 @@ class X3dStepAssyDialog(QtGui.QWidget): ...@@ -1863,10 +1869,18 @@ class X3dStepAssyDialog(QtGui.QWidget):
else: else:
sys.stdout = sys.__stdout__ sys.stdout = sys.__stdout__
## try: # does not work components=generateAssemblyX3d(
components=generateAssemblyX3d(self.assembly_path) # If None - will use ActiveDocument().Objects assembly_path = self.assembly_path, # If None - will use ActiveDocument().Objects
## except: dir_list = self.step_parts_path,
## self.errorDialog(traceback.format_exc()) colorPerVertex = COLOR_PER_VERTEX,
precision_area = self.precision_area,
precision_volume = self.precision_volume,
precision_gyration = self.precision_gyration,
precision_inside = self.precision_inside,
precision = self.precision,
assembly_suffix = self.assembly_suffix
)
showFailedComponents(components) showFailedComponents(components)
sys.stdout.close() sys.stdout.close()
sys.stdout = sys.__stdout__ sys.stdout = sys.__stdout__
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment