forked from youen/assembly_handbook
Merge branch 'master' of https://gitea.youb.fr/youen/assembly_handbook
This commit is contained in:
commit
fa5a7ba0ab
@ -33,7 +33,17 @@ class AHB_ExportCsv:
|
|||||||
parts = []
|
parts = []
|
||||||
obj: App.DocumentObject
|
obj: App.DocumentObject
|
||||||
for obj in doc.Objects:
|
for obj in doc.Objects:
|
||||||
if obj.TypeId == 'Part::Feature':
|
if obj.TypeId in ['Part::Feature', 'App::Part']:
|
||||||
|
if obj.TypeId == 'App::Part' and ('Base_Reference' not in obj.PropertiesList or obj.Base_Reference == ''):
|
||||||
|
continue
|
||||||
|
|
||||||
|
parent = obj.Parents[0][0] if len(obj.Parents) > 0 else None
|
||||||
|
if parent is not None and parent.TypeId != 'App::Part':
|
||||||
|
parent = None
|
||||||
|
|
||||||
|
if parent is not None and 'Base_Reference' in parent.PropertiesList and parent.Base_Reference != "":
|
||||||
|
continue
|
||||||
|
|
||||||
parts.append((readProp(obj, 'Base_Layer', '').replace(',', '-') + "," + readProp(obj, 'Base_Reference', '').replace(',', '-'), obj.Label.replace(',', '-')))
|
parts.append((readProp(obj, 'Base_Layer', '').replace(',', '-') + "," + readProp(obj, 'Base_Reference', '').replace(',', '-'), obj.Label.replace(',', '-')))
|
||||||
|
|
||||||
parts.sort()
|
parts.sort()
|
||||||
|
@ -43,8 +43,9 @@ class AHB_ParseStep:
|
|||||||
if override_names:
|
if override_names:
|
||||||
object_idx = feature_idx + 1
|
object_idx = feature_idx + 1
|
||||||
else:
|
else:
|
||||||
|
fixed_name = step_parser.process_name(obj.Label)[0]
|
||||||
for idx in range(len(step_info.objects)):
|
for idx in range(len(step_info.objects)):
|
||||||
if step_info.objects[idx].name == obj.Label:
|
if step_info.objects[idx].name == fixed_name:
|
||||||
object_idx = idx
|
object_idx = idx
|
||||||
break
|
break
|
||||||
|
|
||||||
|
@ -155,11 +155,16 @@ class AHB_Render:
|
|||||||
def Activated(self):
|
def Activated(self):
|
||||||
import shutil
|
import shutil
|
||||||
from PIL import Image, ImageFilter
|
from PIL import Image, ImageFilter
|
||||||
|
import math
|
||||||
|
from pivy import coin
|
||||||
|
|
||||||
render_main = False
|
render_main = False
|
||||||
render_stages = False
|
render_stages = False
|
||||||
render_parts = True
|
render_parts = True
|
||||||
|
|
||||||
|
Gui.Selection.clearSelection()
|
||||||
|
Gui.activeDocument().activeView().setCameraType("Orthographic")
|
||||||
|
|
||||||
workbench = Gui.getWorkbench("AssemblyHandbookWorkbench")
|
workbench = Gui.getWorkbench("AssemblyHandbookWorkbench")
|
||||||
doc = App.activeDocument()
|
doc = App.activeDocument()
|
||||||
doc_file_name: str = doc.FileName
|
doc_file_name: str = doc.FileName
|
||||||
@ -213,24 +218,80 @@ class AHB_Render:
|
|||||||
|
|
||||||
if render_parts:
|
if render_parts:
|
||||||
rendered_references = []
|
rendered_references = []
|
||||||
resolution = (500, 500)
|
max_resolution = 1500
|
||||||
|
max_length = 2000
|
||||||
|
min_resolution = 250
|
||||||
shutil.rmtree(dir + "/parts", ignore_errors=True)
|
shutil.rmtree(dir + "/parts", ignore_errors=True)
|
||||||
os.makedirs(dir + "/parts", exist_ok=True)
|
os.makedirs(dir + "/parts", exist_ok=True)
|
||||||
count = 0
|
count = 0
|
||||||
|
|
||||||
for part_to_render in doc.Objects:
|
for part_to_render in doc.Objects:
|
||||||
if part_to_render.TypeId == 'Part::Feature' and 'AssemblyHandbook_Stage' in part_to_render.PropertiesList:
|
if part_to_render.TypeId in ['Part::Feature', 'App::Part']:
|
||||||
if 'Base_Reference' not in part_to_render.PropertiesList or part_to_render.Base_Reference == "" or part_to_render.Base_Reference in rendered_references:
|
if 'Base_Reference' not in part_to_render.PropertiesList or part_to_render.Base_Reference == "" or part_to_render.Base_Reference in rendered_references:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
parent = part_to_render.Parents[0][0] if len(part_to_render.Parents) > 0 else None
|
||||||
|
if parent is not None and parent.TypeId != 'App::Part':
|
||||||
|
parent = None
|
||||||
|
|
||||||
|
if parent is not None and 'Base_Reference' in parent.PropertiesList and parent.Base_Reference != "":
|
||||||
|
continue
|
||||||
|
|
||||||
|
#if not part_to_render.Label.startswith("L") and not part_to_render.Label.startswith("M") and not part_to_render.Label.startswith("T") and not part_to_render.Label.startswith("R"):
|
||||||
|
# continue
|
||||||
|
|
||||||
rendered_references.append(part_to_render.Base_Reference)
|
rendered_references.append(part_to_render.Base_Reference)
|
||||||
|
|
||||||
for part_to_hide in doc.Objects:
|
for part_to_hide in doc.Objects:
|
||||||
if part_to_hide.TypeId == 'Part::Feature':
|
if part_to_hide.TypeId == 'Part::Feature':
|
||||||
part_to_hide.ViewObject.Visibility = False
|
part_to_hide.ViewObject.Visibility = False
|
||||||
part_to_render.ViewObject.Visibility = True
|
|
||||||
|
|
||||||
|
part_to_render.ViewObject.Visibility = True
|
||||||
|
if part_to_render.TypeId == 'App::Part':
|
||||||
|
for feature in part_to_render.Group:
|
||||||
|
feature.ViewObject.Visibility = True
|
||||||
|
|
||||||
|
dimensions = [part_to_render.Shape.BoundBox.XLength, part_to_render.Shape.BoundBox.YLength, part_to_render.Shape.BoundBox.ZLength]
|
||||||
|
|
||||||
|
main_axis: int = 0;
|
||||||
|
main_length: float = part_to_render.Shape.BoundBox.XLength
|
||||||
|
if part_to_render.Shape.BoundBox.YLength > main_length:
|
||||||
|
main_axis = 1
|
||||||
|
main_length = part_to_render.Shape.BoundBox.YLength
|
||||||
|
if part_to_render.Shape.BoundBox.ZLength > main_length:
|
||||||
|
main_axis = 2
|
||||||
|
main_length = part_to_render.Shape.BoundBox.ZLength
|
||||||
|
|
||||||
|
center = coin.SbVec3f(part_to_render.Shape.BoundBox.Center)
|
||||||
|
offset = coin.SbVec3f(800, -2000, 800)
|
||||||
|
up = coin.SbVec3f(0, 0, 1)
|
||||||
|
if main_axis == 1:
|
||||||
|
offset[0], offset[1] = -offset[1], offset[0]
|
||||||
|
elif main_axis == 2:
|
||||||
|
offset[0], offset[2] = -offset[2], offset[0]
|
||||||
|
up = coin.SbVec3f(-1, 0, 0)
|
||||||
|
|
||||||
|
cam = Gui.ActiveDocument.ActiveView.getCameraNode()
|
||||||
|
cam.position = center + offset
|
||||||
|
cam.pointAt(center, up)
|
||||||
Gui.ActiveDocument.ActiveView.fitAll()
|
Gui.ActiveDocument.ActiveView.fitAll()
|
||||||
|
|
||||||
|
cross_length = 0
|
||||||
|
if main_axis == 0:
|
||||||
|
cross_length = max(dimensions[1] * 0.5, dimensions[2])
|
||||||
|
elif main_axis == 1:
|
||||||
|
cross_length = max(dimensions[0] * 0.5, dimensions[2])
|
||||||
|
elif main_axis == 2:
|
||||||
|
cross_length = max(dimensions[0], dimensions[1] * 0.5)
|
||||||
|
cross_length = max(cross_length, main_length * 0.25 + cross_length * 0.8)
|
||||||
|
|
||||||
|
main_length_pixels = max(min_resolution, int(math.sqrt(min(1.0, main_length / max_length)) * max_resolution))
|
||||||
|
cross_length_pixels = int(cross_length * main_length_pixels / main_length)
|
||||||
|
|
||||||
|
cam.scaleHeight(0.05 + 0.95 * cross_length_pixels / main_length_pixels)
|
||||||
|
|
||||||
|
resolution = (main_length_pixels, cross_length_pixels)
|
||||||
|
|
||||||
part_filename = dir + "/parts/" + part_to_render.Base_Reference.upper().replace(' ', '-') + ".png"
|
part_filename = dir + "/parts/" + part_to_render.Base_Reference.upper().replace(' ', '-') + ".png"
|
||||||
self.render(resolution, part_filename)
|
self.render(resolution, part_filename)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user