Example use of hole-finder object

Example use of hole-finder object
 1# This example shows how to use the HoleFinder and HoleOptions functionality.
 2# To use, draw any geometry (say a rectangle) which forms a hole around the layer's origin.
 3
 4if active_drawing.isNone():
 5    impact.gui.output_toolbox.add("Unable to continue: no active drawing")
 6else:
 7
 8    # Get the HoleFinder object and set up the HoleOptions
 9    hole_finder = impact.creator.hole_finder()
10    hole_options = hole_finder.create_hole_path_options()
11
12    # This allows the Hole Options to match an existing master tool setting
13    db = impact.active_database
14    ms = db.find_master_tool_setting("<<Default>>", ipMasterSettingType.mstHoleFinder)
15    if not ms.isNone():
16        hole_options.apply_master_setting(ms)
17
18    # We can also adjust some or all of the values, if we want
19    hole_options.leave_original = True
20    hole_options.original_sub_block = True
21    hole_options.original_block_name = "OriginalBlock"
22    hole_options.original_use_palette = True
23    hole_options.original_palette = "Cut"
24    hole_options.original_leave_selected = True
25    hole_options.original_merge_entities = False
26
27    hole_options.do_left_out_offset = True
28    hole_options.left_out_sub_block = True
29    hole_options.left_out_block_name = "LeftOutBlock"
30    hole_options.left_out_use_palette = True
31    hole_options.left_out_palette = "Cut"
32    hole_options.left_out_offset_dist = 5.0
33    hole_options.left_out_number = 2
34    hole_options.left_out_sharp_corners = False
35    hole_options.left_out_leave_selected = False
36    hole_options.left_out_initial_offset_dist = 1.0
37    hole_options.left_out_use_initial_offset = True
38    hole_options.left_out_offset_deadends = 4.0
39    hole_options.left_out_merge_entities = False
40
41    hole_options.do_right_in_offset = True
42    hole_options.right_in_sub_block = True
43    hole_options.right_in_block_name = "RightInBlock"
44    hole_options.right_in_use_palette = True
45    hole_options.right_in_palette = "Cut"
46    hole_options.right_in_offset_dist = 2.0
47    hole_options.right_in_number = 1
48    hole_options.right_in_auto_fill = True
49    hole_options.right_in_sharp_corners = False
50    hole_options.right_in_leave_selected = True
51    hole_options.right_in_initial_offset_dist = 1.0
52    hole_options.right_in_use_initial_offset = False
53    hole_options.right_in_offset_deadends = 4.0
54    hole_options.right_in_merge_entities = True
55
56    hole_options.do_interiors = True
57    hole_options.do_interior_holes = False
58    hole_options.leave_interior_original_hole = True
59    hole_options.offset_interior_holes_inside = False
60    hole_options.offset_dist_interior_holes_inside = 2.0
61    hole_options.offset_interior_holes_outside = True
62    hole_options.offset_dist_interior_holes_outside = 3.0
63    hole_options.do_interior_paths = True
64    hole_options.leave_interior_original_paths = True
65    hole_options.pocket_interior_paths = True
66    hole_options.pocket_dist_interior_paths = 2.0
67    hole_options.interior_into_blocks = True
68    hole_options.interior_block_name = "InteriorBlockName"
69    hole_options.interior_use_palette = False
70    hole_options.interior_palette = "Cut"
71    hole_options.interior_merge_entities = True
72    hole_options.interior_sharp_corners = False
73
74    hole_finder.hole_path_options = hole_options
75
76    points = [None] * 2
77    points[0] = impact.creator.vector(0, 0)
78    hole_finder.points = points
79
80    # Perform the hole-finding operation
81    result = hole_finder.perform()
82
83    impact.gui.output_toolbox.add("HoleFinder result=" + str(result))
84