Using hole finder with blocks¶
Using hole finder with blocks¶
1# This example creates a block and an insert of the block,
2# another insert of the block is then created. Another rectangle
3# is then created. The HoleFinder method is then used with the
4# replicate method parameter set to True to create offset entities
5# in both the block inserts and in the second rectangle
6
7
8# Create a local variable for the impact.gui
9g = impact.gui
10
11# create a local variable for the output toolbox
12ot = g.output_toolbox
13
14# Create a local variable for the active drawing
15ad = impact.active_drawing
16
17
18# Define a subroutine to create a rectangle
19def create_rectangle(block, origin_x, origin_y, width, height):
20
21 # Create a rectangle at 0, 0
22 block.move_ad(origin_x, origin_y)
23 block.line_ad(origin_x + width, origin_y)
24 block.line_ad(origin_x + width, origin_y + height)
25 block.line_ad(origin_x, origin_y + height)
26 block.line_ad(origin_x, origin_y)
27
28
29# Clear the output toolbox
30ot.clear()
31
32# Check there is an active drawing
33if ad.isNone():
34
35 # Display an error message in the output toolbox
36 ot.add("Unable to continue: no active drawing")
37
38else:
39
40 # Attempt to find the settings to use
41 settings_name = "Steel|2mm inside"
42 settings = impact.active_database.find_master_tool_setting(settings_name, ipMasterSettingType.mstHoleFinder)
43
44 # Check the settings were found
45 if settings.isNone():
46 ot.add("Unable to continue: can't locate hole finder settings '" + str(settings_name) + "'")
47 else:
48
49 # Create a local variable for the active block
50 ab = ad.active_layer.active_block
51
52 # Create a rectangle at the origin
53 create_rectangle(ab, 0, 0, 100, 100)
54
55 # Select all the visible entities in the active block,
56 # (i.e. the rectangle just created)
57 ab.select_all()
58
59 # Create a new block from the selected entities
60 block_insert1 = ab.block("Rect", "", ipBlockPosition.bpLeft)
61
62 # Get the block that was created above
63 new_block = block_insert1.inserted_object
64
65 # Create a new insert of the block (to the right of the original block)
66 block_insert2 = ab.block_insert_ad(new_block, block_insert1.extents.right + 1, block_insert1.extents.bottom, 1, 0, 0, 0)
67
68 # Create another rectangle at 200, 200
69 create_rectangle(ab, 200, 200, 100, 100)
70
71 # create an array of vectors
72 points = [None] * 3
73
74 # Initialise the array
75 points[0] = block_insert1.extents.centre # the centre of the first block insert
76 points[1] = impact.creator.vector(250,250) # the centre of the second rectangle
77
78 # Use the hole finder method to create offset entities
79 g.tools.hole_finder2(points, True, settings)
80
81 # View the extents
82 g.active_window.view_extents()