[Om...] Posted November 8 Share Posted November 8 Hi Community, I’m currently looking for a solution to create a mesh from a multi-scan file, ideally with a fast and efficient workflow for separating and analyzing each part. The method I’m using now involves separating the volume into individual parts, creating a mesh for each one, and then analyzing in ZEISS Inspect. I’ve tried a few approaches: Separating the volume and generate stages. Splitting the components into new parts. Using the clipboard . However, there are some drawbacks with these methods. For example, the first and third options are time-consuming when creating meshes for each part in serial production. The second approach requires analyzing each part separately, which also slows down the process. In summary, I’m looking for a way to generate a mesh from the raw data and then split it into separate meshes efficiently. (a way to seperate the volume with mesh and not to seperate and then create the mesh for each seperated part) Does anyone have suggestions for improving our workflow to save time, especially when working with files containing multiple parts (sometimes 8 or more)? Thanks in advance for any advice! Link to comment Share on other sites More sharing options...
[Na...] Posted November 11 Share Posted November 11 Hello Omar, I think it's this function (improved with Inspect 2025): https://techguide.zeiss.com/en/zeiss-inspect-2025/article/cmd_sys_extract_volume_areas_automatically.html But I'll move the thread to the experts at the X-Ray forum 😉 Nanno Link to comment Share on other sites More sharing options...
[DW...] Posted November 11 Share Posted November 11 Do you care about keeping track of what part is where in the scan? For example, do you need to maintain traceability or do you just want to automatically separate the polygonised volume? Link to comment Share on other sites More sharing options...
[Om...] Posted November 12 Author Share Posted November 12 Hello, no, I don’t. We have badges for each part so we can read and identify the parts. As you mentioned, I want to automatically separate the polygonized volume. (The Extract Volume Areas Automatically function is only applicable to volumes and not meshes, that’s the problem.) Link to comment Share on other sites More sharing options...
[DW...] Posted November 12 Share Posted November 12 # -*- coding: utf-8 -*- import gom ###### changes # check if user selected points # if multiple patches have been selected, use the smallest one to define min number of points ###### # dialogue to define if part based or stage based project # will also ask to select a part to define the default number of points for one part # should ask if only surfaces or also cavities should be kept RESULT=gom.script.sys.execute_user_defined_dialog (content='<dialog>' \ ' <title>Separation v3</title>' \ ' <style></style>' \ ' <control id="OkCancel"/>' \ ' <position>automatic</position>' \ ' <embedding>always_toplevel</embedding>' \ ' <sizemode>automatic</sizemode>' \ ' <size height="400" width="563"/>' \ ' <content columns="2" rows="5">' \ ' <widget type="display::text" row="0" columnspan="2" rowspan="1" column="0">' \ ' <name>text</name>' \ ' <tooltip></tooltip>' \ ' <text><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">' \ '<html><head><meta name="qrichtext" content="1" /><style type="text/css">' \ 'p, li { white-space: pre-wrap; }' \ '</style></head><body style=" ">' \ '<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Requirement:</p>' \ '<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">There has to be only one part in this project, containing only one mesh!</li>' \ '<li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">(optional) \tA CAD can be used to align the individual parts.<br />\tThis CAD has to be within the part.<br />\tAll parts have to be of the same type.</li></ul></body></html></text>' \ ' <wordwrap>false</wordwrap>' \ ' </widget>' \ ' <widget type="separator" row="1" columnspan="2" rowspan="1" column="0">' \ ' <name>separator</name>' \ ' <tooltip></tooltip>' \ ' <title></title>' \ ' </widget>' \ ' <widget type="label" row="2" columnspan="1" rowspan="1" column="0">' \ ' <name>label</name>' \ ' <tooltip></tooltip>' \ ' <text>Devide mesh into multiple</text>' \ ' <word_wrap>false</word_wrap>' \ ' </widget>' \ ' <widget type="input::radiobutton" row="2" columnspan="1" rowspan="1" column="1">' \ ' <name>PartOrStage</name>' \ ' <tooltip></tooltip>' \ ' <items>' \ ' <item description="Parts" state="1"/>' \ ' <item description="Stages" state="2"/>' \ ' </items>' \ ' <default>1</default>' \ ' </widget>' \ ' <widget type="label" row="3" columnspan="1" rowspan="1" column="0">' \ ' <name>label_1</name>' \ ' <tooltip></tooltip>' \ ' <text>Keep</text>' \ ' <word_wrap>false</word_wrap>' \ ' </widget>' \ ' <widget type="input::radiobutton" row="3" columnspan="1" rowspan="1" column="1">' \ ' <name>SurfaceOrAll</name>' \ ' <tooltip></tooltip>' \ ' <items>' \ ' <item description="Only outer surface" state="1"/>' \ ' <item description="Outer surface and cavities" state="2"/>' \ ' </items>' \ ' <default>1</default>' \ ' </widget>' \ ' <widget type="spacer::horizontal" row="4" columnspan="1" rowspan="1" column="0">' \ ' <name>spacer</name>' \ ' <tooltip></tooltip>' \ ' <minimum_size>0</minimum_size>' \ ' <maximum_size>-1</maximum_size>' \ ' </widget>' \ ' <widget type="input::checkbox" row="4" columnspan="1" rowspan="1" column="1">' \ ' <name>CAD</name>' \ ' <tooltip></tooltip>' \ ' <value>false</value>' \ ' <title>use CAD for alignment</title>' \ ' </widget>' \ ' </content>' \ '</dialog>') typePartOrStage = int(RESULT.PartOrStage) typeSurfaceOrAll = int(RESULT.SurfaceOrAll) CADavailable = int(RESULT.CAD) #check if points were selected while gom.app.num_selected_visible_points == 0: RESULT=gom.script.sys.execute_user_defined_dialog (content='<dialog>' \ ' <title>Message</title>' \ ' <style></style>' \ ' <control id="OkCancel"/>' \ ' <position>automatic</position>' \ ' <embedding>always_toplevel</embedding>' \ ' <sizemode>automatic</sizemode>' \ ' <size height="157" width="536"/>' \ ' <content columns="1" rows="1">' \ ' <widget type="display::text" row="0" columnspan="1" rowspan="1" column="0">' \ ' <name>text</name>' \ ' <tooltip></tooltip>' \ ' <text><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">' \ '<html><head><meta name="qrichtext" content="1" /><style type="text/css">' \ 'p, li { white-space: pre-wrap; }' \ '</style></head><body style=" ">' \ '<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Please select the reference part using the &quot;Select patch&quot; function.</p>' \ '<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you have multiple parts of differnt types please select the smallest one.</p></body></html></text>' \ ' <wordwrap>false</wordwrap>' \ ' </widget>' \ ' </content>' \ '</dialog>') #rename original Part to "Part" gom.script.sys.edit_properties ( data=[gom.app.project.parts[0]], elem_name='Part') # set Original Alignment as initial alignment try: gom.script.manage_alignment.define_original_alignment_as_initial_alignment (part=gom.app.project.parts[0]) except: pass # loop to find smallest selected patch n = 1 PatchNPoints = [] while 1: try: # all selected points at the moment OriginalNPoints = gom.app.num_selected_visible_points # touch point MCAD_ELEMENT=gom.script.primitive.create_touch_point_disc_on_selection ( clearance=1000.0, keep_point_selection=True, name='Point ' +str(n), normal={'direction': gom.Vec3d (0.0, 0.0, 1.0), 'point': gom.Vec3d (0.0, 0.0, 0.0), 'type': 'projected'}, point={'point': gom.Vec3d (0.0, 0.0, 0.0)}, properties=gom.Binary ('eAHFmF2IXOUZx3+b2HWzmqYbrUop9bBJ2zU62U2MNk5WE/NhoyQadI0SMIfZnbO7ozsfmZnNZm3TnFw1FwXxwuqloAUhIIhIFRG9KahIFMQPFC9EoRcVlNxYCibl/7znnXNm92SzSqVnWPY9c973+fg//+fjzFi9Wjh408Zj7N1z++499zLWLFXarWJxz0xUjWrtA816I2q2K1ELd/XQy+p++llN/2rg1+tefGga+P09+4P76pPtuVIzCjaPbLol2FtvT1aOBZvcuTOn+7jRzrs/XefOuyu5zbuuBd6qnTndwy+ByyEuU6FFgxlKzBPSosKjRBw/eOb0Cn4BXAbx7q5d+6lTJuLQBi/pGjOph58CP4G4RZUSM8zw5kNfb9GTvcDgEvpCqlSoUUlOhlSYJGSWGi0iZoiYoE1EmaETsu1y4BKIx6lTZ4bDz0uPgRH3abkZuBpid7hKaIIrTFGjSkSNNiFNIo4wS8VWZUrHlyXc45cKn6BOtSP4bzsk5mdAr+HRpmn+TTH0sYy7xIUnpiff1GkqhnEWB6ehwWyCwxujyzL1KmBVl6ktpqkzxxdPLi2gJz4l60ZBUc74Kn9KTJl9TUrml1tHeF8VrQp1ajxg8doAXAHxlHmxkXsY5+EkqvcSMUlk52tMELHPuCX8shQXZAPGtEFgTZdN0lrqSKzTZJ53XlrawYQpG4GfQ6wkGDeyhdxImZBxSkzwCCFHLQUqjBubHvvdsgQPAWtzBSvv5G2K0pc1ifTB8igdtD0y5sj1MvU3Lo8MA2Wdu/6dJH36/9Ttr12jPetBKOa4JqTlrtwp88+nl+WQh30xUjUEuUvex7774a44B7JXH58ZDeX6QK7uBnWLjSfcp99Kv3fdQ7nLsl/RlMMHqFtCthl5UtJ3AdsN2F5uyqr/PuvnVnz19dKot5hIypBypv62DPVVokyd2SQiT41JTl9H+Tfbt8X65sJUVU04ZiVtlkZC2Ig5BqZ/jGBc2I45C4TqV836ibK5RsTLf5YdF63aPmpZhvksnKJpENUo8/eCxN2tngnxmMW4SJE7rMJvtvW+Tj7vpGRtRN9qvVDaLmshYvDJfwhmJa4skY40CMTTC79hiOhZf2Jhqqs1Na2MNwlR+XY69r+bF5LUhk0PSuJasIaqddIuzm8/+cxvdZ+XC93aqkmTPrFdulQq+iHembHIt/E1pkGtXsVHax8k5bRCF5790yv6fitoX1ds5FXNdqmUybswobcagshQNjo82is7AudTLF+7Tz3Q2fnBt9K1vLHC+5Vly6TJbnPOStqVVkHSKnBH8vTxJ6RFY8nuxOti0gVcvRB1562ZudkhT0MnO4Hnv1pzraSMOBy7LPK8bSRpH1pKpMX37Ouy1KO+eKBJ+vBdwLqLim7xCBUaNKzMhUwTUeqQ0IemxZEPs0o1AAmWB1+QpoRu7LDpJA9kP0Kcm89KWWx60mF93LMoOmTd6Kn1C8MS5YuhHyPSkcnjczclG7PCTyRZ0QsuIjmkkeR8OrQsHDj+ulHabwAxptMzDnSdWzym7P2LbBgHDifVYsxVjniE7k+hc7/0qvuU2ESsvz8enx+QLj9GLYWkWoACWuaj/bLJDxVplbyf+7mTMkXL60PAwSQL9v2P7T/x8ievSm4eiXzLOv+fpSO/thcuXUk8yjRtqsxwG1o7YmstPmgkDSyvdHcrgxxJBlGdcpoGCawOi+rKwbbt28QgwyZHrJu3BhzYSkmkHf78MBO0aDHIbfSzisA+DW4gsKoX8AcC5qz96UzBXq7EPfUe7dTQV2DOhtUG2wg43pE0ynDGAtkz3OWl0qvMPEFml6zzFU9yI+t/8rjIFuOcdKQ7Ug+LZGe2bebTqKHoRpCAbEfxOC3Und1TyPS4IuuYYKTzJyu692YtaVlvFGO1T1NkkynL/oJ1lQZFRmhwLOe5pLZtlyaAC+2SR5OGyoV2iCseOb9H/o4zlfFLOKxjMvNxnNJbw4zFuoyGe9Ut7R3peu7ZkD4vGKoO+Wbyv7wI5aM2Q2i+deNjIfMuW7RXZ2mVj8Kv24qCfe9835L7vNvzPAlpDPKeLoyA55LztrbIm+Wycb35K24PWf6pV2jCcPOUz0+912siVMcWe5V317HessdbIGuGDdn/P8L5MfixEO6uCDd/74qw3mqHe7NrEzDUqbCqeYNcb/zV2o8E6j76IUe1ddJ4qsl76YgoNo79WvkK5O7FLlU9d5d2gOfeU1/5FbB6QT902aI3QnFn4mZ1Fz89LB509APDDuutvkepSuuHqOzM/vkt2U6avlP6mT5/Zr/i/db5rQP/Winp/pUp74eKkLJ1BKGntx3Vkha7v8laLhykLf2hi7jvv0wG3oQBNEI='), radius=1000.0) # deselect from touch point gom.script.selection3d.deselect_patch ( coordinate=gom.app.project.actual_elements['Point ' +str(n)].center_coordinate, target=gom.app.project.parts[0].actual) # points of patch = all selected points at n-1 - all selected points at n PatchNPoints.append(OriginalNPoints - gom.app.num_selected_visible_points) n = n+1 except: break # reference amount of points. Patches with less points will not be taken as a part. setnpoints = 0.75 * min(PatchNPoints) # delete alignment and constructed elements gom.script.cad.delete_element ( elements=gom.ElementSelection ({'category': ['key', 'elements', 'part', gom.app.project.parts[0], 'explorer_category', 'actual']}), with_measuring_principle=True) gom.script.cad.delete_element ( elements=gom.ElementSelection ({'category': ['key', 'elements', 'part', gom.app.project.parts[0], 'explorer_category', 'alignment']}), with_measuring_principle=True) gom.script.selection3d.deselect_all () #Number of points that will be used as a part. Everything below is not a part and will be deleted. #setnpoints = 200000 # copy part and create part-source gom.script.sys.copy_to_clipboard (elements=[gom.app.project.parts[0].actual]) gom.script.sys.paste_from_clipboard (destination=[gom.app.project.parts[0].actual]) gom.script.part.create_new_part (name='Part_source') gom.script.part.add_elements_to_part ( elements=[gom.app.project.clipboard.actual_elements[0]], import_mode='new_elements', part=gom.app.project.parts['Part_source']) # create original alignment as initial alignment for part-source gom.script.manage_alignment.define_original_alignment_as_initial_alignment (part=gom.app.project.parts['Part_source']) n = 1 while 1: try: # set Part-source explicit gom.script.cad.show_element_exclusively (elements=gom.ElementSelection ({'category': ['key', 'elements', 'part', gom.app.project.parts['Part_source']]})) # select only patches with enough points to be a part gom.script.selection3d.select_patches_by_size ( elements=[gom.app.project.parts['Part_source'].actual], max_points=setnpoints) gom.script.selection3d.invert_selection () # create touch point MCAD_ELEMENT=gom.script.primitive.create_touch_point_disc_on_selection ( clearance=1000.0, name='Point 1', normal={'direction': gom.Vec3d (0.0, 0.0, 1.0), 'point': gom.Vec3d (0.0, 0.0, 0.0), 'type': 'projected'}, point={'point': gom.Vec3d (0.0, 0.0, 0.0)}, properties=gom.Binary ('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'), radius=1000.0) # patch select based on touch point position gom.script.selection3d.select_patch ( coordinate=gom.app.project.actual_elements['Point 1'].center_coordinate, target=gom.app.project.parts['Part_source'].actual) ################################### # if everything, including cavities, should be used if typeSurfaceOrAll == 2: MCAD_ELEMENT=gom.script.primitive.create_touch_point_disc_on_selection ( clearance=1000.0, keep_point_selection=True, name='Point Xp', normal={'direction': gom.Vec3d (1.0, 0.0, 0.0), 'point': gom.Vec3d (0.0, 0.0, 0.0), 'type': 'projected'}, point=gom.app.project.actual_elements['Point 1'], properties=gom.Binary ('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'), radius=1000.0) MCAD_ELEMENT=gom.script.primitive.create_touch_point_disc_on_selection ( clearance=1000.0, keep_point_selection=True, name='Point Xn', normal={'direction': gom.Vec3d (-1.0, 0.0, 0.0), 'inverted': True, 'point': gom.Vec3d (0.0, 0.0, 0.0), 'type': 'projected'}, point=gom.app.project.actual_elements['Point 1'], properties=gom.Binary ('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'), radius=1000.0) MCAD_ELEMENT=gom.script.primitive.create_touch_point_disc_on_selection ( clearance=1000.0, keep_point_selection=True, name='Point Yp', normal={'direction': gom.Vec3d (0.0, 1.0, 0.0), 'point': gom.Vec3d (0.0, 0.0, 0.0), 'type': 'projected'}, point=gom.app.project.actual_elements['Point 1'], properties=gom.Binary ('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'), radius=1000.0) MCAD_ELEMENT=gom.script.primitive.create_touch_point_disc_on_selection ( clearance=1000.0, keep_point_selection=True, name='Point Yn', normal={'direction': gom.Vec3d (0.0, -1.0, 0.0), 'inverted': True, 'point': gom.Vec3d (0.0, 0.0, 0.0), 'type': 'projected'}, point=gom.app.project.actual_elements['Point 1'], properties=gom.Binary ('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'), radius=1000.0) MCAD_ELEMENT=gom.script.primitive.create_touch_point_disc_on_selection ( clearance=1000.0, keep_point_selection=True, name='Point Zp', normal={'direction': gom.Vec3d (0.0, 0.0, 1.0), 'point': gom.Vec3d (0.0, 0.0, 0.0), 'type': 'projected'}, point=gom.app.project.actual_elements['Point 1'], properties=gom.Binary ('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'), radius=1000.0) MCAD_ELEMENT=gom.script.primitive.create_touch_point_disc_on_selection ( clearance=500.0, name='Point Zn', normal={'direction': gom.Vec3d (0.0, 0.0, -1.0), 'inverted': True, 'point': gom.Vec3d (0.0, 0.0, 0.0), 'type': 'projected'}, point=gom.app.project.actual_elements['Point 1'], properties=gom.Binary ('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'), radius=1000.0) # calculate position and height(z) and width (x + y) of the selection box and select inside the box dimx = gom.app.project.actual_elements['Point Xp'].center_coordinate.x - gom.app.project.actual_elements['Point Xn'].center_coordinate.x dimy = gom.app.project.actual_elements['Point Yp'].center_coordinate.y - gom.app.project.actual_elements['Point Yn'].center_coordinate.y dimz = gom.app.project.actual_elements['Point Zp'].center_coordinate.z - gom.app.project.actual_elements['Point Zn'].center_coordinate.z centerX = gom.app.project.actual_elements['Point Xn'].center_coordinate.x + dimx /2 centerY = gom.app.project.actual_elements['Point Yn'].center_coordinate.y + dimy /2 centerZ = gom.app.project.actual_elements['Point Zn'].center_coordinate.z + dimz /2 gom.script.selection3d.select_inside_cube ( center={'point': gom.Vec3d (centerX, centerY, centerZ)}, csys=gom.app.project.nominal_elements['system_global_coordinate_system'], height=dimz+0.2, length=dimx+0.2, width=dimy+0.2) # copy selected patch and create new part "part n" gom.script.cad.copy_selected_points (select_points_in_copy=True) gom.script.part.create_new_part (name='Part '+ str(n)) gom.script.part.add_elements_to_part ( elements=gom.ElementSelection ({'category': ['key', 'elements', 'is_element_in_clipboard', 'True', 'explorer_category', 'actual', 'object_family', 'mesh']}), import_mode='new_elements', part=gom.app.project.parts['Part '+ str(n)]) # set Part_source explicit and delete Part1 Patch from it gom.script.cad.show_element_exclusively (elements=gom.ElementSelection ({'category': ['key', 'elements', 'part', gom.app.project.parts['Part_source']]})) gom.script.selection3d.deselect_all () gom.script.selection3d.select_patch ( coordinate=gom.app.project.actual_elements['Point 1'].center_coordinate, target=gom.app.project.parts['Part_source'].actual) gom.script.cad.delete_selected_3d_area (reset_deviation_values=True) n = n +1 gom.script.cad.delete_element ( elements=gom.ElementSelection ({'category': ['key', 'elements', 'part', gom.app.project.parts['Part_source'], 'explorer_category', 'actual']}), with_measuring_principle=True) except: break gom.script.cad.delete_element ( elements=gom.ElementSelection ({'category': ['key', 'elements', 'part', gom.app.project.parts['Part_source']]}), with_measuring_principle=True) # ### align to CAD and cut out mor precise #setnpoints = 100000 n=1 if CADavailable == 1: while 1: try: # create copy of CAD gom.script.sys.copy_to_clipboard (elements=[gom.app.project.parts['Part'].nominal]) gom.script.sys.paste_from_clipboard (destination=[gom.app.project.parts['Part'].nominal]) # add CAD to part n gom.script.part.add_elements_to_part ( elements=[gom.app.project.clipboard.nominal_elements[0]], import_mode='new_elements', part=gom.app.project.parts['Part ' + str(n)]) # create prealignment try: CAD_ALIGNMENT=gom.script.alignment.create_prealignment ( computation_mode='normal', compute_additional_bestfit=True, name_expression='Prealignment', parent_alignment=gom.app.project.parts['Part ' + str(n)].original_alignment, part=gom.app.project.parts['Part ' + str(n)]) except: try: CAD_ALIGNMENT=gom.script.alignment.create_prealignment ( computation_mode='enhanced', compute_additional_bestfit=True, name_expression='Prealignment', parent_alignment=gom.app.project.parts['Part ' + str(n)].original_alignment, part=gom.app.project.parts['Part ' + str(n)]) except: try: CAD_ALIGNMENT=gom.script.alignment.create_prealignment ( computation_mode='advanced', compute_additional_bestfit=True, name_expression='Prealignment', parent_alignment=gom.app.project.parts['Part ' + str(n)].original_alignment, part=gom.app.project.parts['Part ' + str(n)]) except: break # further cutting out is only neccessary if cavities should be kept if typeSurfaceOrAll == 2: # set mesh from part n exclusive gom.script.cad.show_element_exclusively (elements=[gom.app.project.parts['Part ' + str(n)].actual]) # select only patches with enough points to be a part gom.script.selection3d.select_patches_by_size ( elements=[gom.app.project.parts['Part ' + str(n)].actual], max_points=setnpoints) gom.script.selection3d.invert_selection () # create touch point MCAD_ELEMENT=gom.script.primitive.create_touch_point_disc_on_selection ( clearance=1000.0, name='Point 1', normal={'direction': gom.Vec3d (0.0, 0.0, 1.0), 'point': gom.Vec3d (0.0, 0.0, 0.0), 'type': 'projected'}, point={'point': gom.Vec3d (0.0, 0.0, 0.0)}, properties=gom.Binary ('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'), radius=1000.0) # patch select based on touch point position gom.script.selection3d.select_patch ( coordinate=gom.app.project.actual_elements['Point 1'].center_coordinate, target=gom.app.project.parts['Part ' + str(n)].actual) # if everything, including cavities, should be used MCAD_ELEMENT=gom.script.primitive.create_touch_point_disc_on_selection ( clearance=1000.0, keep_point_selection=True, name='Point Xp', normal={'direction': gom.Vec3d (1.0, 0.0, 0.0), 'point': gom.Vec3d (0.0, 0.0, 0.0), 'type': 'projected'}, point=gom.app.project.actual_elements['Point 1'], properties=gom.Binary ('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'), radius=1000.0) MCAD_ELEMENT=gom.script.primitive.create_touch_point_disc_on_selection ( clearance=1000.0, keep_point_selection=True, name='Point Xn', normal={'direction': gom.Vec3d (-1.0, 0.0, 0.0), 'inverted': True, 'point': gom.Vec3d (0.0, 0.0, 0.0), 'type': 'projected'}, point=gom.app.project.actual_elements['Point 1'], properties=gom.Binary ('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'), radius=1000.0) MCAD_ELEMENT=gom.script.primitive.create_touch_point_disc_on_selection ( clearance=1000.0, keep_point_selection=True, name='Point Yp', normal={'direction': gom.Vec3d (0.0, 1.0, 0.0), 'point': gom.Vec3d (0.0, 0.0, 0.0), 'type': 'projected'}, point=gom.app.project.actual_elements['Point 1'], properties=gom.Binary ('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'), radius=1000.0) MCAD_ELEMENT=gom.script.primitive.create_touch_point_disc_on_selection ( clearance=1000.0, keep_point_selection=True, name='Point Yn', normal={'direction': gom.Vec3d (0.0, -1.0, 0.0), 'inverted': True, 'point': gom.Vec3d (0.0, 0.0, 0.0), 'type': 'projected'}, point=gom.app.project.actual_elements['Point 1'], properties=gom.Binary ('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'), radius=1000.0) MCAD_ELEMENT=gom.script.primitive.create_touch_point_disc_on_selection ( clearance=1000.0, keep_point_selection=True, name='Point Zp', normal={'direction': gom.Vec3d (0.0, 0.0, 1.0), 'point': gom.Vec3d (0.0, 0.0, 0.0), 'type': 'projected'}, point=gom.app.project.actual_elements['Point 1'], properties=gom.Binary ('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'), radius=1000.0) MCAD_ELEMENT=gom.script.primitive.create_touch_point_disc_on_selection ( clearance=1000.0, name='Point Zn', normal={'direction': gom.Vec3d (0.0, 0.0, -1.0), 'inverted': True, 'point': gom.Vec3d (0.0, 0.0, 0.0), 'type': 'projected'}, point=gom.app.project.actual_elements['Point 1'], properties=gom.Binary ('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'), radius=1000.0) # calculate position and height(z) and width (x + y) of the selection box and select inside the box dimx = gom.app.project.actual_elements['Point Xp'].center_coordinate.x - gom.app.project.actual_elements['Point Xn'].center_coordinate.x dimy = gom.app.project.actual_elements['Point Yp'].center_coordinate.y - gom.app.project.actual_elements['Point Yn'].center_coordinate.y dimz = gom.app.project.actual_elements['Point Zp'].center_coordinate.z - gom.app.project.actual_elements['Point Zn'].center_coordinate.z centerX = gom.app.project.actual_elements['Point Xn'].center_coordinate.x + dimx /2 centerY = gom.app.project.actual_elements['Point Yn'].center_coordinate.y + dimy /2 centerZ = gom.app.project.actual_elements['Point Zn'].center_coordinate.z + dimz /2 gom.script.selection3d.select_inside_cube ( center={'point': gom.Vec3d (centerX, centerY, centerZ)}, csys=gom.app.project.nominal_elements['system_global_coordinate_system'], height=dimz+0.2, length=dimx+0.2, width=dimy+0.2) # delete all other points of this part gom.script.selection3d.invert_selection () try: gom.script.cad.delete_selected_3d_area (reset_deviation_values=True) except: pass # delete Touch points gom.script.cad.delete_element ( elements=gom.ElementSelection ({'category': ['key', 'elements', 'part', gom.app.project.parts['Part ' + str(n)], 'explorer_category', 'actual']}), with_measuring_principle=True) n = n+1 except: break # Clipboard löschen try: gom.script.cad.delete_element ( elements=gom.ElementSelection ({'category': ['key', 'elements', 'is_element_in_clipboard', 'True', 'explorer_category', 'nominal']}), with_measuring_principle=True) except: pass # transform into stagebased project if typePartOrStage == 2: # combine meshes in stage project a = gom.app.project.parts[:] n = 0 while 1: try: a[n] = a[n].actual n = n+1 except: break gom.script.mesh.combine_meshes_in_stage_project ( destination_mesh=gom.app.project.parts['Part'].actual, meshes=a) # delete all but the first part b = gom.app.project.parts[1:] gom.script.cad.delete_element ( elements=b, with_measuring_principle=True) gom.script.sys.rename_stage ( name='Part', stage=gom.app.project.stages[0]) i = 1 while 1: try: gom.script.sys.rename_stage ( name='Stage'+ str(i), stage=gom.app.project.stages[i]) i = i+1 except: break Link to comment Share on other sites More sharing options...
[Om...] Posted November 13 Author Share Posted November 13 I will test it thank you very much 🙂 Link to comment Share on other sites More sharing options...
[DW...] Posted November 13 Share Posted November 13 That's not one I created, I will tinker with it and add some functionality when I get a chance. Link to comment Share on other sites More sharing options...
[Om...] Posted November 13 Author Share Posted November 13 it worked ! thank u very much! i made some changes by deleting some parts we don't need for our workflow and it worked. Link to comment Share on other sites More sharing options...
[DW...] Posted November 14 Share Posted November 14 You're welcome. Feel free to share any scripts you author here to spread the knowledge around! Link to comment Share on other sites More sharing options...
[Ti...] Posted November 14 Share Posted November 14 @DWC What in the world is that script doing, I have to know. I glazed over it and am confused what it is accomplishing. Link to comment Share on other sites More sharing options...
[Om...] Posted November 14 Author Share Posted November 14 it actually uses patch selection to select a mesh and then with a loop it copies each part and devide it into new parts (individual part). for the alignement part i just deleted it because i don't need it but it normally aligns the created parts with a CAD if CAD is imported . i hope that i clarified the code a little bit . Link to comment Share on other sites More sharing options...
[Ti...] Posted Friday at 03:24 PM Share Posted Friday at 03:24 PM I don't understand clearly what you are trying to accomplish are you scanning different parts at the same time that are touching each other(ie assembled) and trying to get each one individually or are you scanning the same part in a fixture with let's say 6 parts in total and you need a separate mesh for the 6 parts? There are some things my company would not want me to share, so I can only go so far with some ideas, but I'm trying to identify what you are trying to accomplish before considering any thoughts. Sounds like that script may be your ticket to success, but it looks crazy complicated compared to our approach, but again, I don't know what you are trying to do exactly. Link to comment Share on other sites More sharing options...
[Om...] Posted Friday at 03:52 PM Author Share Posted Friday at 03:52 PM The main Problem is that we scan multiple parts simultaneously, all originating from serial production. After generating the mesh for these parts, we need an efficient workflow to help our technicians separate them. Zeiss X-Ray offers a function called "Automatic Separate Volume," but this is limited to separating volumes and cannot be applied to the mesh we created with several parts. To save time and streamline the process, I aimed to find a solution that avoids the need to separate volumes first and then generate meshes for each separated volume individually—each step requiring additional waiting time. Typically, we scan between 4 and 8 parts at a time, which is why I tried to find a script to separate the mesh for the entire volume (e.g., for 8 parts). The approach I used before the script was essentially the same: manually copying the selected mesh (using the patch selection function) and then adding it to a new part. If you have any better ideas or alternative solutions, I would greatly appreciate your input. I also understand the importance of maintaining confidentiality when discussing internal workflows or company-specific processes. Link to comment Share on other sites More sharing options...
[Ti...] Posted Monday at 12:51 AM Share Posted Monday at 12:51 AM How are the parts placed inside the CT? Link to comment Share on other sites More sharing options...
[Om...] Posted Monday at 07:35 AM Author Share Posted Monday at 07:35 AM we use PS boxes with cavities to place them in the CT Link to comment Share on other sites More sharing options...
[Ti...] Posted yesterday at 03:49 AM Share Posted yesterday at 03:49 AM (edited) I'm sorry my friend, I cannot explain our workflow in detail. If the parts are in the same place in space every time you can cut them out with the picker tool and record the coordinates. Edited yesterday at 03:57 AM Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in