Motor mount plate

A motor mount plate carries a small motor on a frame. The motor’s pilot sits in the bore at its center, and four screws hold its flange. The plate is bolted down through four slots, so that it can slide to tension the belt. It is a rectangle with chamfered corners, and the screw holes and the slots are each one feature repeated in two directions. Model the plate from the drawing in planex2d or in any CAD system, then check its area against the value at the end of the page. A solution in planex2d follows.

The motor mount plate exercise: a dimensioned drawing of a rectangular plate with chamfered corners, a bore, four screw holes and four slots

[1]:
import math
import planex as px

The plate

The plate is a RectangleC 130 by 90 around the origin. Its lines are plate.Line.1 to plate.Line.4, the first one the bottom edge, and its right angles are constraints already. With auto_constraint={"horizontal": True, "vertical": True}, its bottom edge, drawn level, stays horizontal, as the slots below do. Chamfer cuts its four corners at 8 from each corner, and each chamfer makes its lengths dimensions, chamfer_1.d and chamfer_1.d2 for the first (Figure 1):

[3]:
mount = px.Sketch(auto_constraint={"horizontal": True, "vertical": True})
mount.RectangleC(130, 90, id="plate")
mount.Constrain("plate.center", "origin", px.Coincident)
mount.Constrain("plate.Line.1", px.Distance, 130, id="length")
mount.Constrain("plate.Line.2", px.Distance, 90, id="width")
mount.Chamfer(["plate.Line.1.start", "plate.Line.2.start", "plate.Line.3.start", "plate.Line.4.start"], 8,
              id=["chamfer_1", "chamfer_2", "chamfer_3", "chamfer_4"])
print("status", mount.status, "| degrees of freedom", mount.dof)
status full | degrees of freedom 0
The rectangle with its chamfered corners, every dimension and tie
Figure 1: The plate

The holes and the slots

The motor’s pilot bore, 22 across, is centered at the origin. The first screw hole, 5.5 across, is 25 to the left of the vertical axis and 25 below the horizontal one. LinearPattern repeats it in a 2 by 2 grid, 50 apart both ways. The first slot, 10 long between the centers of its ends and 6.6 wide, lies along \(x\) with its middle 50 to the left and 32 below the center, and a second pattern repeats it 100 apart along \(x\) and 64 apart up (Figure 2):

[5]:
mount.Circle(22 / 2, center=(1, 1), id="pilot")
mount.Constrain("pilot.center", "origin", px.Coincident)
mount.Constrain("pilot", px.Diameter, 22, id="pilot_d")
mount.Circle(5.5 / 2, center=(-24, -24), id="screw")
mount.Constrain("screw", px.Diameter, 5.5, id="screw_d")
mount.Constrain("screw.center", "V", px.Distance, 25, id="screw_x")
mount.Constrain("screw.center", "H", px.Distance, 25, id="screw_y")
mount.LinearPattern("screw", px.H, 2, 50, dir2=px.V, count2=2, spacing2=50, id="screws")
mount.Move((-55, -32)).Slot(10, 6.6, id="slot")  # 10 between the centers of its ends, 6.6 wide
mount.Constrain("slot.spine", px.Distance, 10, id="slot_l")
mount.Constrain("slot.spine.mid", "V", px.Distance, 50, id="slot_x")
mount.Constrain("slot.spine.mid", "H", px.Distance, 32, id="slot_y")
mount.LinearPattern("slot", px.H, 2, 100, dir2=px.V, count2=2, spacing2=64, id="slots")
print("status", mount.status, "| degrees of freedom", mount.dof)
status full | degrees of freedom 0
The bore, the screw holes and the slots
Figure 2: The holes and the slots

The checks

This is the area, to compare with your own model. It is the rectangle less the four triangles the chamfers cut off, \(8^2 / 2\) each, less the bore, the four screw holes and the four slots, each a rectangle 10 by 6.6 and a disc of 6.6. The plate is symmetric about both axes, so its centroid is the origin (Figure 3):

[7]:
face = mount.Face()
exact = (130 * 90 - 4 * 8**2 / 2 - math.pi * 11**2 - 4 * math.pi * 2.75**2
         - 4 * (10 * 6.6 + math.pi * 3.3**2))
c = face.center
print("area", round(face.mass, 2), "mm², exact", round(exact, 2))
print("centroid", tuple(round(v, 6) for v in c[:2]))
area 10695.99 mm², exact 10695.99
centroid (0.0, 0.0)
The motor mount plate
Figure 3: The motor mount plate

The plate as DXF in millimeters, for another CAD system or a laser cutter:

[9]:
mount.WriteDXF("motor_mount_plate.dxf", unit=px.mm, scale=1)  # scale=1: the numbers as they are

The plate as DXF: motor_mount_plate.dxf