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 impact.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    HoleFinder = impact.creator.hole_finder()
10    HoleOptions = HoleFinder.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 ms is not None:
16        HoleOptions.apply_master_setting(ms)
17
18    # We can also adjust some or all of the values, if we want
19    HoleOptions.leave_original = True
20    HoleOptions.original_sub_block = True
21    HoleOptions.original_block_name = "OriginalBlock"
22    HoleOptions.original_use_palette = True
23    HoleOptions.original_palette = "Cut"
24    HoleOptions.original_leave_selected = True
25    HoleOptions.original_merge_entities = False
26
27    HoleOptions.do_left_out_offset = True
28    HoleOptions.left_out_sub_block = True
29    HoleOptions.left_out_block_name = "LeftOutBlock"
30    HoleOptions.left_out_use_palette = True
31    HoleOptions.left_out_palette = "Cut"
32    HoleOptions.left_out_offset_dist = 5.0
33    HoleOptions.left_out_number = 2
34    HoleOptions.left_out_sharp_corners = False
35    HoleOptions.left_out_leave_selected = False
36    HoleOptions.left_out_initial_offset_dist = 1.0
37    HoleOptions.left_out_use_initial_offset = True
38    HoleOptions.left_out_offset_deadends = 4.0
39    HoleOptions.left_out_merge_entities = False
40
41    HoleOptions.do_right_in_offset = True
42    HoleOptions.right_in_sub_block = True
43    HoleOptions.right_in_block_name = "RightInBlock"
44    HoleOptions.right_in_use_palette = True
45    HoleOptions.right_in_palette = "Cut"
46    HoleOptions.right_in_offset_dist = 2.0
47    HoleOptions.right_in_number = 1
48    HoleOptions.right_in_auto_fill = True
49    HoleOptions.right_in_sharp_corners = False
50    HoleOptions.right_in_leave_selected = True
51    HoleOptions.right_in_initial_offset_dist = 1.0
52    HoleOptions.right_in_use_initial_offset = False
53    HoleOptions.right_in_offset_deadends = 4.0
54    HoleOptions.right_in_merge_entities = True
55
56    HoleOptions.do_interiors = True
57    HoleOptions.do_interior_holes = False
58    HoleOptions.leave_interior_original_hole = True
59    HoleOptions.offset_interior_holes_inside = False
60    HoleOptions.offset_dist_interior_holes_inside = 2.0
61    HoleOptions.offset_interior_holes_outside = True
62    HoleOptions.offset_dist_interior_holes_outside = 3.0
63    HoleOptions.do_interior_paths = True
64    HoleOptions.leave_interior_original_paths = True
65    HoleOptions.pocket_interior_paths = True
66    HoleOptions.pocket_dist_interior_paths = 2.0
67    HoleOptions.interior_into_blocks = True
68    HoleOptions.interior_block_name = "InteriorBlockName"
69    HoleOptions.interior_use_palette = False
70    HoleOptions.interior_palette = "Cut"
71    HoleOptions.interior_merge_entities = True
72    HoleOptions.interior_sharp_corners = False
73
74    HoleFinder.hole_path_options = HoleOptions
75
76    points = [None] * 2
77    points[0] = impact.creator.vector(0, 0)
78    HoleFinder.points = points
79
80    # Perform the hole-finding operation
81    Result = HoleFinder.perform()
82
83    impact.gui.output_toolbox.add("HoleFinder result=" + str(Result))
84