from codetocad import Analytics, Part
analytics = Analytics()
my_cube = Part.create_cube(1, 1, 1)
dimensions = analytics.get_dimensions(my_cube)
# This will write logs inside the provider or to the console:
# you can also just do print() to print to the console.
analytics.log(f"Dimensions for myCube are: {dimensions}")
from codetocad import *
material = Material("material").set_color(169, 76, 181, 0.8)
Part.create_cube(1, 1, 1).set_material(material)
material_with_texture = Material("materialWithTexture").set_image_texture("./bark.jpg")
Part.create_cylinder(1, 4).set_material(material_with_texture).translate_xyz(5, 0, 0)
from codetocad import *
from codetocad.enums import PresetMaterial
Part.create_cube(1, 1, 1).set_material(PresetMaterial.blue)
Part.create_cylinder(1, 4).set_material(PresetMaterial.red).translate_xyz(5, 0, 0)
from codetocad import *
Part.create_cube(2, 2, 2)
light = Light.create_sun(75)
light.set_color(73, 222, 190).translate_xyz(10, 10, 5)
camera = Camera.create_perspective()
camera.set_focal_length(20).translate_xyz(0, -5, 5).rotate_xyz(45, 0, 0)
from codetocad import *
Part.create_sphere(1)
Scene().set_background_image("./hdr_background_test.jpg", -300, 0)
from codetocad import *
Scene.default().set_default_unit("cm")
Scene.default().create_group("Bracelet")
class Bracelet:
outer_diameter = "161cm"
inner_diameter = "81cm"
thickness = "83cm"
def create(self):
bracelet = Part.create_torus(
Dimension.from_string(self.inner_diameter) / 2,
Dimension.from_string(self.outer_diameter) / 2,
)
bracelet.scale_z(self.thickness)
return bracelet
class Button:
radius = "60/2cm"
depth = "13.6cm"
inset_radius = "20cm"
inset_depth = "3cm"
def create(self):
button = Part.create_cylinder(self.radius, self.depth)
button_top = button.get_landmark("top")
button.hole(button_top, self.inset_radius, self.inset_depth)
button.fillet_faces("5cm", [button_top])
return button
class Belt:
outer_radius = "163/2cm"
inner_radius = "150/2cm"
thickness = "30cm"
def create(self):
belt = Part.create_cylinder(self.outer_radius, self.thickness)
belt.hole(belt.get_landmark("top"), self.inner_radius, self.thickness)
return belt
if __name__ == "__main__":
# MARK: Create components
bracelet = Bracelet().create()
button = Button().create()
belt = Belt().create()
# Mark: Joint the button to the front of the bracelet
Joint(
bracelet.get_landmark("front"), button.get_landmark("top")
).limit_location_xyz(0, 0, 0).limit_rotation_xyz(90, 0, 0)
Joint(
bracelet.get_landmark("center"), belt.get_landmark("center")
).limit_location_xyz(0, 0, 0).limit_rotation_xyz(0, 0, 0)
# # Mark: subtract the button and belt from the bracelet:
bracelet.subtract(belt, delete_after_subtract=False)
bracelet.hole(
belt.get_landmark("front"),
button.get_dimensions().x / 2,
button.get_dimensions().z,
normal_axis="y",
flip_axis=True,
)
belt.hole(
belt.get_landmark("front"),
button.get_dimensions().x / 2,
belt.get_dimensions().z,
normal_axis="y",
flip_axis=True,
)
# # Mark: Assign to a group:
# Scene().assign_to_group([bracelet, button, belt], "Bracelet")
# Mark apply materials:
red_material = Material("red").set_color(181, 16, 4)
blue_material = Material("blue").set_color(19, 107, 181)
bracelet.set_material(red_material)
button.set_material(blue_material)
belt.set_material(blue_material)
from dataclasses import dataclass, field
from codetocad import *
from codetocad.interfaces.part_interface import PartInterface
@dataclass
class DShaft:
shaft_length: Dimension
radius: Dimension
d_profile_radius: Dimension
d_profile_length: Dimension
tolerance: Dimension = field(default_factory=lambda: Dimension(0))
def create(self, name, is_d_shaft_both_sides=False) -> PartInterface:
shaft_length = self.shaft_length
radius = self.radius - self.tolerance
dProfileRadius = self.d_profile_radius - self.tolerance
d_profile_width = (radius - dProfileRadius) * 2
shaft = Part.create_cylinder(radius, shaft_length)
d_profile = Part.create_cube(d_profile_width, radius * 2, self.d_profile_length)
shaft_left_side = shaft.get_landmark(PresetLandmark.leftTop)
d_profile_left_side = d_profile.get_landmark(PresetLandmark.leftTop)
Joint(shaft_left_side, d_profile_left_side).limit_location_xyz(0, 0, 0)
if is_d_shaft_both_sides:
d_profile.mirror(shaft, "z", None)
shaft.subtract(d_profile)
shaft.get_landmark(PresetLandmark.front).delete()
return shaft
if __name__ == "__main__":
shaft_length = Dimension.from_string("13.65mm")
radius = Dimension.from_string("5.9/2mm")
d_profile_radius = Dimension.from_string("5.3/2mm")
d_profile_length = shaft_length / 2
tolerance = Dimension.from_string("0.15mm")
dShaft = DShaft(
shaft_length=shaft_length,
radius=radius,
d_profile_radius=d_profile_radius,
d_profile_length=d_profile_length,
tolerance=tolerance,
).create("shaft")
from codetocad import *
from codetocad.interfaces.part_interface import PartInterface
from .d_shaft import DShaft
def create_d_shaft_sleeve(d_shaft: PartInterface, sleeve_thickness):
d_shaft_diameter = d_shaft.get_dimensions().y
sleeve = Part.create_cylinder(
d_shaft_diameter / 2 + sleeve_thickness, d_shaft.get_dimensions().z
)
sleeve.subtract(d_shaft, is_transfer_data=True)
return sleeve
def create_knob(radius):
knob = Sketch.create_polygon(7, radius, radius).extrude(radius * 0.2)
return knob
if __name__ == "__main__":
Scene.default().set_default_unit("mm")
shaft_length = Dimension.from_string("13.65mm")
radius = Dimension.from_string("5.9/2mm")
d_profile_radius = Dimension.from_string("5.3/2mm")
d_profile_length = shaft_length
tolerance = Dimension.from_string("0.15mm")
d_shaft = DShaft(
shaft_length=shaft_length,
radius=radius,
d_profile_radius=d_profile_radius,
d_profile_length=d_profile_length,
tolerance=tolerance,
).create("shaft")
sleeve = create_d_shaft_sleeve(d_shaft, "1.5mm")
knob = create_knob(sleeve.get_dimensions().x)
Joint(
sleeve.create_landmark("top", center, center, max),
knob.create_landmark("bottom", center, center, min),
).limit_location_xyz(0, 0, 0)
sleeve.union(knob)
# sleeve.export("./appliance_knob.stl", scale=1000)
from codetocad import *
myCube = Part.create_cube(1, 1, 1)
from codetocad import *
from codetocad.shortcuts import *
material = Material("material")
material.set_color(169, 76, 181, 255)
def create_cube(name, size):
calibartion_cube = Part.create_cube(size, size, size)
calibration_cube_x = calibartion_cube.create_landmark(
"x", min + "5mm", max - "7mm", max
)
calibration_cube_y = calibartion_cube.create_landmark(
"y", "max-5mm", "min+5mm", max
)
calibration_cube_z = calibartion_cube.create_landmark("z", center, min, center)
calibration_cube_size = calibartion_cube.create_landmark(
"size", "min+1mm", "min+2mm", max
)
z = Sketch.create_text("Z^", "10mm").extrude("1.5mm").rotate_xyz(90, 0, 0)
z_center = z.create_landmark("center", center, center, center)
Joint(calibration_cube_z, z_center).limit_location_xyz(0, 0, 0)
calibartion_cube.subtract(z)
y = Sketch.create_text("Y^", "8mm").extrude("1.5mm")
y_center = y.create_landmark("center", center, center, center)
Joint(calibration_cube_y, y_center).limit_location_xyz(0, 0, 0)
calibartion_cube.subtract(y)
x = Sketch.create_text("X^", "8mm").extrude("1.5mm").rotate_xyz(180, 0, 90)
x_center = x.create_landmark("center", center, center, center)
Joint(calibration_cube_x, x_center).limit_location_xyz(0, 0, 0)
calibartion_cube.subtract(x)
size = Sketch.create_text(str(size.value) + "mm", "4mm").extrude("1.5mm")
size_center = size.create_landmark("min", min, center, center)
Joint(calibration_cube_size, size_center).limit_location_xyz(0, 0, 0)
calibartion_cube.subtract(size)
calibartion_cube.set_material(material)
return calibartion_cube
tolerance = "0.2mm"
size = Dimension(20, "mm")
create_cube("calibration_cube19_9", size - tolerance).export(
"./calibration_cube19_8mm.stl", scale=1000
).translate_xyz("-25mm", 0, 0)
create_cube("calibration_cube20mm", size).export(
"./calibration_cube20mm.stl", scale=1000
)
create_cube("calibration_cube20_2", size + tolerance).export(
"./calibration_cube20_2mm.stl", scale=1000
).translate_xyz("25mm", 0, 0)
from codetocad import *
Scene.default().set_default_unit("mm")
ellipse_leg = Sketch.create_ellipse("14mm", "27mm").extrude("5/2in")
ellipse_leg_top = ellipse_leg.create_landmark("top", center, center, max)
ellipse_leg_bottom = ellipse_leg.create_landmark("bottom", center, center, min)
ellipse_leg_outer_cutout = Sketch.create_ellipse("14mm", "27mm").extrude("1in")
ellipse_leg_outer_cutout.hollow("3mm", "3mm", 0)
ellipse_leg_outer_cutout_top = ellipse_leg_outer_cutout.create_landmark(
"top", center, center, max
)
ellipse_leg_outer_cutout.create_landmark("bottom", center, center, min)
Joint(ellipse_leg_top, ellipse_leg_outer_cutout_top).translate_landmark_onto_another()
ellipse_leg.hollow("5mm", "5mm", 0)
ellipse_leg.subtract(ellipse_leg_outer_cutout, is_transfer_data=True)
ellipse_leg2 = ellipse_leg.clone("Leg2")
Joint(
ellipse_leg.get_landmark("ellipse_legOuterCutout_bottom"),
ellipse_leg2.get_landmark("bottom"),
).limit_location_xyz(0, 0, 0).limit_location_z(0, 10).limit_rotation_xyz(0, 0, 0)
red_material = Material("red").set_color(0.709804, 0.109394, 0.245126, 0.9)
blue_material = Material("blue").set_color(0.0865257, 0.102776, 0.709804, 0.9)
ellipse_leg.set_material(red_material)
ellipse_leg2.set_material(blue_material)
from codetocad import *
imported_cube = Part.create_from_file("./importableCube.stl")
Part.create_cube(1, 1, 1).export("./exportedCube.stl").export("./exportedCube.obj")
from codetocad import *
from codetocad.interfaces.landmark_interface import LandmarkInterface
ball = Part.create_sphere(1)
ball_center = ball.get_landmark("center") # or PresetLandmarks.center
ball_bottom: LandmarkInterface = ball.get_landmark(PresetLandmark.bottom) # or "bottom"
link = Part.create_cube(1, 1, 2)
link_top = link.get_landmark("top")
link_bottom = link.get_landmark("bottom")
Joint(ball_center, link_bottom).limit_location_xyz(0, 0, 0).limit_rotation_xyz(0, 0, 0)
socket = Part.create_sphere(1.2)
socket_cutoff = socket.create_landmark("cutoff", "center", "center", "min + 0.7")
socket_center = socket.get_landmark("center")
Joint(ball_bottom, socket_cutoff).translate_landmark_onto_another()
socket.subtract(ball, delete_after_subtract=False, is_transfer_data=False)
Joint(socket_center, ball).limit_rotation_x(-30, 30).limit_rotation_y(
-30, 30
).limit_rotation_z(0, 0)
blue_material = Material("blue").set_color(0.0826006, 0.214978, 0.406714, 1.0)
green_material = Material("socket").set_color(0.249275, 0.709804, 0.392972, 0.8)
ball.set_material(blue_material)
link.set_material(blue_material)
socket.set_material(green_material)
from dataclasses import dataclass
from codetocad import *
blue_metallic_material = (
Material("blue").set_color(0.0865257, 0.102776, 0.709804, 0.8).set_reflectivity(1.0)
)
red_metallic_material = (
Material("red").set_color(0.709804, 0.109394, 0.245126, 0.8).set_reflectivity(1.0)
)
@dataclass
class Yoke:
"""
A class that creates the arm of a universal joint:
___ ____________ __
( ) ) < hollow rod
⁻⁻⁻ ⁻⁻⁻⁻⁻⁻⁻⁻⁻⁻⁻⁻ ⁻⁻
^ ^
setScrew pinHole
"""
shaft_radius: Dimension
wall_thickness: Dimension
shaft_length: Dimension
pin_arm_length: Dimension
pin_hole_radius: Dimension
set_screw_radius: Dimension
is_hollowed: bool = True
def _createHollowRod(self, name: str, length: Dimension) -> Part:
outerRadius = self.shaft_radius + self.wall_thickness
rod = Part.create_cylinder(outerRadius, length)
if self.is_hollowed:
rod.hollow(
self.wall_thickness,
self.wall_thickness,
self.wall_thickness / 2,
flip_axis=True,
)
_ = rod.create_landmark(
"wallFront", center, f"min + {self.wall_thickness/4}", max
)
return rod
def _create_shaft_coupling(self) -> Part:
shaft_coupling = self._createHollowRod("shaftCoupling", self.shaft_length)
if self.is_hollowed:
shaft_coupling.hole(
shaft_coupling.get_landmark(PresetLandmark.back),
self.set_screw_radius,
shaft_coupling.get_dimensions().y,
normal_axis="y",
)
return shaft_coupling
def _create_pin_arm(self) -> Part:
pin_arm = self._createHollowRod("pinArm", self.pin_arm_length)
pin_arm_size = pin_arm.get_dimensions()
pin_arm_discard_Amount = 1 / 15
pin_arm.subtract(
Part("pinArmDiscard")
.create_cube(
pin_arm_size.x,
pin_arm_size.y * (1 - pin_arm_discard_Amount),
pin_arm_size.z + "1mm",
)
.translate_y(pin_arm_size.y * pin_arm_discard_Amount)
)
pin_arm.rotate_y(180)
pin_location = pin_arm.create_landmark(
"pin", center, min, "max - (max-min) * 1/4"
)
pin_arm.hole(
pin_location,
self.pin_hole_radius,
pin_arm_size.y,
normal_axis="y",
flip_axis=True,
)
# pinArm.fillet_faces(
# "25mm",
# [pinArm.get_landmark(PresetLandmark.top)]
# )
return pin_arm
def create(self, name: str) -> Part:
shaft_coupling = self._create_shaft_coupling()
pin_arm = self._create_pin_arm()
Joint(
shaft_coupling.get_landmark("wallFront"), pin_arm.get_landmark("wallFront")
).limit_location_xyz(0, 0, 0)
pin_arm.mirror(shaft_coupling, "y", None)
shaft_coupling.get_landmark(PresetLandmark.top)
yoke = shaft_coupling.union(pin_arm, is_transfer_data=True)
# shaftCoupling.fillet_faces(
# "25mm", [shaftCoupling.get_landmark(PresetLandmark.top)])
yoke.set_name(name)
yoke.set_material(blue_metallic_material)
return yoke
@dataclass
class Cross:
width: Dimension
pin_radius: Dimension
pin_length: Dimension
def create(self, name: str) -> Part:
core = Part.create_cube(self.width, self.width, self.width)
pin = Part.create_cylinder(self.pin_radius, self.pin_length)
Joint(
core.get_landmark(PresetLandmark.top),
pin.get_landmark(PresetLandmark.bottom),
).limit_location_xyz(0, 0, 0)
pin.circular_pattern(
4, 90, center_entity_or_landmark=core, normal_direction_axis="y"
)
core = core.union(pin)
core.rotate_x(90)
core.set_material(red_metallic_material)
return core
def create_universal_joint():
shaft_radius = Dimension.from_string("5mm")
wall_thickness = Dimension.from_string("3mm")
shaft_length = Dimension.from_string("15mm")
pin_arm_length = Dimension.from_string("13mm")
pin_hole_radius = Dimension.from_string("2mm")
set_screw_radius = Dimension.from_string("3mm")
yokeBottom = Yoke(
shaft_radius=shaft_radius,
wall_thickness=wall_thickness,
shaft_length=shaft_length,
pin_arm_length=pin_arm_length,
pin_hole_radius=pin_hole_radius,
set_screw_radius=set_screw_radius,
).create("yokeBottom")
yoke_top = Yoke(
shaft_radius=shaft_radius,
wall_thickness=wall_thickness,
shaft_length=shaft_length,
pin_arm_length=pin_arm_length,
pin_hole_radius=pin_hole_radius,
set_screw_radius=set_screw_radius,
).create("yokeTop")
yoke_top.rotate_y(180)
yoke_top.rotate_z(90)
cross = Cross(
width=shaft_radius,
pin_radius=pin_hole_radius,
pin_length=shaft_radius / 2 + wall_thickness,
).create("cross")
Joint(
cross.get_landmark(PresetLandmark.front), yokeBottom.get_landmark("pinArm_pin")
).limit_location_xyz(0, 0, 0).limit_rotation_xyz(0, None, 0).limit_rotation_y(
-45, 45
)
Joint(
cross.get_landmark(PresetLandmark.right), yoke_top.get_landmark("pinArm_pin")
).limit_location_xyz(0, 0, 0).limit_rotation_xyz(None, 0, 0).limit_rotation_x(
-45, 45
)
if __name__ == "__main__":
create_universal_joint()
from codetocad import *
from universal_joint import Yoke, Cross
def createDoubleuniversal_joint():
shaft_radius = Dimension.from_string("5mm")
wall_thickness = Dimension.from_string("3mm")
shaft_length = Dimension.from_string("15mm")
center_yold_length = Dimension.from_string("5mm")
pin_arm_length = Dimension.from_string("13mm")
pin_hole_radius = Dimension.from_string("2mm")
set_screw_radius = Dimension.from_string("3mm")
yoke_center = Yoke(
shaft_radius=shaft_radius,
wall_thickness=wall_thickness,
shaft_length=center_yold_length,
pin_arm_length=pin_arm_length,
pin_hole_radius=pin_hole_radius,
set_screw_radius=set_screw_radius,
is_hollowed=False,
).create("yokeCenter")
yoke_center_pin_top = yoke_center.get_landmark("pinArm_pin")
yoke_center_pin_top_location = yoke_center_pin_top.get_location_local()
yoke_center_bottom_z = (
yoke_center.get_landmark(PresetLandmark.bottom).get_location_local().z
)
yoke_center.mirror(yoke_center.get_landmark(PresetLandmark.bottom), "z", None)
yoke_center_pin_bottom = yoke_center.create_landmark(
"pinBottom",
yoke_center_pin_top_location.x,
yoke_center_pin_top_location.y,
yoke_center_pin_top_location.z * -1 + yoke_center_bottom_z * 2,
)
yoke_top = Yoke(
shaft_radius=shaft_radius,
wall_thickness=wall_thickness,
shaft_length=shaft_length,
pin_arm_length=pin_arm_length,
pin_hole_radius=pin_hole_radius,
set_screw_radius=set_screw_radius,
).create("yokeTop")
yoke_top.rotate_y(180)
yoke_top.rotate_z(90)
yokeBottom = Yoke(
shaft_radius=shaft_radius,
wall_thickness=wall_thickness,
shaft_length=shaft_length,
pin_arm_length=pin_arm_length,
pin_hole_radius=pin_hole_radius,
set_screw_radius=set_screw_radius,
).create("yokeBottom")
yokeBottom.rotate_z(90)
cross1 = Cross(
width=shaft_radius,
pin_radius=pin_hole_radius,
pin_length=shaft_radius / 2 + wall_thickness,
).create("cross1")
cross2 = Cross(
width=shaft_radius,
pin_radius=pin_hole_radius,
pin_length=shaft_radius / 2 + wall_thickness,
).create("cross2")
Joint(
cross1.get_landmark(PresetLandmark.right),
yoke_top.get_landmark("pinArm_pin"),
).limit_rotation_xyz(None, 0, 0).limit_rotation_x(-45, 45).limit_location_xyz(
0, 0, 0
)
Joint(
cross1.get_landmark(PresetLandmark.front), yoke_center_pin_top
).limit_rotation_xyz(0, None, 0).limit_rotation_y(-45, 45).limit_location_xyz(
0, 0, 0
)
Joint(
yoke_center_pin_bottom,
cross2.get_landmark(PresetLandmark.front),
).limit_rotation_xyz(None, 0, 0).limit_rotation_x(-45, 45).limit_location_xyz(
0, 0, 0
)
Joint(
cross2.get_landmark(PresetLandmark.right), yokeBottom.get_landmark("pinArm_pin")
).limit_rotation_xyz(None, 0, 0).limit_rotation_x(-45, 45).limit_location_xyz(
0, 0, 0
)
if __name__ == "__main__":
createDoubleuniversal_joint()
from codetocad import *
gear = Part.create_gear(1, 0.1, 0.8, 0.2, 0.2)
gear2 = Part.create_gear(0.5, 0.05, 0.4, 0.1, 0.2, "20d", 6)
gear2.translate_xyz(0, 1.515, 0)
Joint(gear, gear2).gear_ratio(2)
from codetocad import *
wall_thickness = Dimension.from_string(0.1)
hollow_cube = Part.create_cube(1, 1, 0.1)
hollow_cube.hollow(wall_thickness * 2, wall_thickness * 2, 0)
hollow_cube.translate_x(3)
c1 = Part.create_cube(1, 1, 1)
c1.translate_x(2)
c1.translate_y(2)
c1.translate_z(2)
hollow_cube_left = hollow_cube.get_landmark(PresetLandmark.left)
hollow_cube_left_inner = hollow_cube_left.clone("left_inner")
hollow_cube_left_inner = hollow_cube_left.clone(
"left_inner_2", offset=[wall_thickness, 0, 0]
)
hollow_cube_left_inner = hollow_cube_left.clone("left_inner_3", new_parent=c1)
"""
A re-creation of the famous OpenCascade Bottle (https://dev.opencascade.org/doc/overview/html/occt__tutorial.html)
Code inspired by
- https://replicad.xyz/docs/examples/occt-bottle
- https://cadquery.readthedocs.io/en/latest/examples.html#the-classic-occ-bottle
"""
from codetocad import *
(L, w, t) = (20.0, 6.0, 3.0)
# s = cq.Workplane("XY")
# Sketch is missing the sketch plane
bottle_profile = Sketch.create_line(w / 2.0)
arc = Sketch.create_arc(L / 2)
# # Draw half the profile of the bottle and extrude it
# p = (
# s.center(-L / 2.0, 0)
# .vLine(w / 2.0)
# .threePointArc((L / 2.0, w / 2.0 + t), (L, w / 2.0))
# .vLine(-w / 2.0)
# .mirrorX()
# .extrude(30.0, True)
# )
# # Make the neck
# p = p.faces(">Z").workplane(centerOption="CenterOfMass").circle(3.0).extrude(2.0, True)
# # Make a shell
# result = p.faces(">Z").shell(0.3)
from codetocad import *
blue_material = Material("blue").set_color(0, 0.1, 1.0)
red_material = Material("red").set_color(1.0, 0.1, 0)
Part.create_cube(1, 1, 1).fillet_all_edges("10cm").set_material(blue_material)
Part.create_cube(1, 1, 1).translate_xyz(1.5, 0, 0).set_material(
red_material
).chamfer_all_edges("10cm")
Part.create_cylinder(1 / 2, 2).translate_xyz(1.5 * 2, 0, 0).fillet_all_edges(
"10cm"
).set_material(blue_material)
Part.create_cylinder(1 / 2, 2).translate_xyz(1.5 * 3, 0, 0).chamfer_all_edges(
"10cm"
).set_material(red_material)
fillet_two_edges = Part.create_cube(1, 1, 1)
fillet_two_edges_edge1 = fillet_two_edges.create_landmark("edge1", max, 0, max)
fillet_two_edges_edge2 = fillet_two_edges.create_landmark("edge2", min, 0, min)
fillet_two_edges.fillet_edges(
"10cm", [fillet_two_edges_edge1, fillet_two_edges_edge2]
).translate_xyz(0, 1.5, 0).set_material(blue_material)
chamfer_two_edges = Part.create_cube(1, 1, 1)
chamfer_two_edges_edge1 = chamfer_two_edges.create_landmark("edge1", max, 0, max)
chamfer_two_edges_edge2 = chamfer_two_edges.create_landmark("edge2", min, 0, min)
chamfer_two_edges.chamfer_edges(
"10cm", [chamfer_two_edges_edge1, chamfer_two_edges_edge2]
).translate_xyz(1.5, 1.5, 0).set_material(red_material)
fillet_two_faces = Part.create_cube(1, 1, 1)
fillet_two_faces_face1 = fillet_two_faces.create_landmark("face1", 0, 0, max)
fillet_two_faces_face2 = fillet_two_faces.create_landmark("face2", min, 0, 0)
fillet_two_faces.fillet_faces(
"10cm", [fillet_two_faces_face1, fillet_two_faces_face2]
).translate_xyz(1.5 * 2, 1.5, 0).set_material(blue_material)
chamge_two_faces = Part.create_cube(1, 1, 1)
chamge_two_faces_face1 = chamge_two_faces.create_landmark("face1", 0, 0, max)
chamge_two_faces_face2 = chamge_two_faces.create_landmark("face2", min, 0, 0)
chamge_two_faces.chamfer_faces(
"10cm", [chamge_two_faces_face1, chamge_two_faces_face2]
).translate_xyz(1.5 * 3, 1.5, 0).set_material(red_material)
from codetocad import *
linear_cube = Part.create_cube("5cm", "5cm", "5cm").linear_pattern(10, "7cm", "x")
Part.create_sphere(1).translate_xyz(0, 5, 0).circular_pattern(
4, "90d", linear_cube, "z"
).circular_pattern(6, f"{360/6}d", linear_cube, "x")
from codetocad import *
from codetocad.enums import PresetMaterial
c1 = Part.create_cube(1, 1, 1)
c1.set_material(PresetMaterial.blue)
c2 = Part.create_cylinder(0.5, 1)
c2.set_material(PresetMaterial.red)
c2.translate_x(0.5)
c3 = Part.create_cube(1, 1, 1)
c3.set_material(PresetMaterial.yellow)
c3.translate_x(-0.5)
c2.union(c1)
c2.union(c3)
from codetocad import *
# MARK: Create body
body = Part.create_cube(1, 2, 3)
body_top = body.create_landmark("top", center, center, max)
# MARK: Create head
head = Part.create_sphere(0.5)
head_bottom = head.create_landmark("bottom", center, center, min)
# Mark: Create Eye
eye = Part.create_cylinder(0.1, 0.1)
eye_bottom = eye.create_landmark("bottom", center, center, min)
eye.rotate_xyz(0, 90, 0)
# Mark: Attach head to Body
Joint(body_top, head_bottom).limit_location_xyz(0, 0, 0).limit_location_y(
-0.3, 0.3
).limit_rotation_x(0, 0).limit_rotation_y(-20, 90).limit_rotation_z(-30, 30)
# Mark: Attach eye to head:
head_leftEye = head.create_landmark("leftEye", "max-0.1", -0.2, "max/3")
Joint(head_leftEye, eye_bottom).limit_location_xyz(0, 0, 0).limit_rotation_xyz(0, 0, 0)
# Mark: mirror the eyes
eye.mirror("head", "y", None)
from codetocad import Sketch
from codetocad.enums.curve_types import CurveTypes
rectangle_points_sketch = Sketch(
"rectangle_from_points", curve_type=CurveTypes.BEZIER
).create_from_vertices(["0,0,0", "1,0,0", "1,1,0", "0,1,0", "0,0,0"])
triangle_sketch = Sketch("triangle", curve_type=CurveTypes.NURBS)
line1 = triangle_sketch.create_line("0,0,0", "1,1,0")
line2 = triangle_sketch.create_line(line1.v2, "0,1,0")
line3 = triangle_sketch.create_line(line2.v2, line1.v1)
triangle_sketch.translate_y(1)
rectangle_lines_sketch = Sketch(
name="rectangle_from_lines", curve_type=CurveTypes.BEZIER
)
line1 = rectangle_lines_sketch.create_line("0,0,0", "1,0,0")
line2 = rectangle_lines_sketch.create_line("0,1,0", "1,1,0")
line3 = rectangle_lines_sketch.create_line(line1.v1, line2.v1)
line4 = rectangle_lines_sketch.create_line(line1.v2, line2.v2)
rectangle_lines_sketch.translate_y(2)
loft_sketch1 = Sketch("loft_sketch1", curve_type=CurveTypes.BEZIER)
w1 = loft_sketch1.create_rectangle(1, 1)
loft_sketch2 = Sketch("loft_sketch2", curve_type=CurveTypes.BEZIER)
w2 = loft_sketch2.create_rectangle(0.5, 0.5)
loft_sketch2.translate_z(1).rotate_x(45)
lofted = w1.loft(w2).set_name("loft")
lofted.translate_xyz(0.5, 3.5, 0)
circle_sketch = Sketch("circle", curve_type=CurveTypes.BEZIER)
circle_wire = circle_sketch.create_circle(0.5)
circle_sketch.translate_xyz(0.5, 4.5, 0)
arc_sketch = Sketch("arc", curve_type=CurveTypes.BEZIER)
arc_wire = arc_sketch.create_arc([-0.5, 0, 0], [1, 1, 0], 0.25)
arc_sketch.translate_xyz(0.5, 5.5, 0)
ellipse_sketch = Sketch("ellipse", curve_type=CurveTypes.BEZIER)
ellipse_wire = ellipse_sketch.create_ellipse(0.5, 0.25)
ellipse_sketch.translate_xyz(0.5, 6.5, 0)
from codetocad import Sketch
rectangle = Sketch("cube")
r_wire = rectangle.create_rectangle(1, 1)
rectangle.extrude(1)
rectangle = Sketch("cube2")
r_wire = rectangle.create_rectangle(1, 1)
rectangle.rotate_x(45)
rectangle.extrude(1)
from codetocad import *
Sketch.create_line([0, 0, 0], [0, 1, 0])
half_donut = Sketch("half-donut")
half_donut.create_circle("10cm")
half_donut.translate_xyz("-100cm", 0, 0).revolve("180d", "centerline", "y")
ribbon = Sketch("ribbon")
ribbon.create_arc([0, 0, 0], ["1cm", "1cm", 0], 0)
ribbon.twist("180d", "2.5cm", 100, "z")
from codetocad import *
drum_radius = Dimension.from_string("5mm")
drum_length = Dimension.from_string("15.0 mm")
wire_thickness = Dimension.from_string("1mm")
number_of_windings = 10
groove_spiral = Sketch.create_spiral(number_of_windings, drum_length, drum_radius)
groove = Sketch.create_circle(wire_thickness / 2)
groove_spiral.sweep(groove)
from codetocad import *
# We are trying to draw a bull-horn shapes pipe:
"""
Pipe is 1/4" thick.
|------------------21.5"----------------|
__________________________________
B____________C______________D
/ / \\ \
/ / \\ \
|_A_| |_E_|
|------------18.5"------------|
"""
profile_vertices = [
[0, 0, 0], # start A
"2,1,0,in", # B
# "21.5/2,1,0,in", #midpoint C
"21.5-2,1,0,in", # D
"21.5,0,0,in", # end E
]
circle = Sketch("circle")
circle.create_circle("1in")
circle.set_visible(False)
profile = Sketch("profile")
profile.create_from_vertices(profile_vertices)
profile.sweep("circle", fill_cap=False)
from pathlib import Path
from codetocad import *
red_material = Material("red").set_color(0.709804, 0.109394, 0.245126, 1.0)
green_material = Material("green").set_color(0.118213, 0.709804, 0.109477, 0.8)
blue_material = Material("blue").set_color(0.0865257, 0.102776, 0.709804, 0.8)
Part.create_text(
"Code To CAD", extrude_amount="1cm", underlined=True, name="CodeToCAD"
).set_material(green_material)
Sketch.create_text(
"Small text!", font_size="15cm", underlined=True, name="Small text!"
).translate_xyz(0, -2, 0)
arial_font_path = str(Path(__file__).parent.absolute()) + "/fonts/arial.ttf"
Sketch.create_text(
"كود تو كاد", font_file_path=arial_font_path, name="كود تو كاد"
).translate_xyz(-5, 0, 0)
yi_gothic_font_path = str(Path(__file__).parent.absolute()) + "/fonts/yu_gothic.ttc"
Sketch.create_circle("1m", name="curvedTextPath").translate_xyz(-5, -5, 0).set_visible(
False
)
# This broke with API changes, need to put it back!
# Sketch.create_text(
# "コオデツカアド", font_file_path=yi_gothic_font_path, name="コオデツカアド"
# ).profile("curvedTextPath").translate_xyz(-5, -5, 0).extrude(0.1).set_material(
# red_material
# )
Part.create_text(
"""Multiline
Text
Is
Awesome!
""",
extrude_amount=0.1,
name="multiline",
).translate_xyz(0, -5, 0).set_material(blue_material)
from codetocad import *
starting_letter_ascii = ord("a")
for letter_ascii in range(starting_letter_ascii, starting_letter_ascii + 26):
letter = chr(letter_ascii)
extrude_amount = 0.2
letter_sketch = Sketch.create_text(letter)
letter_sketch.extrude(extrude_amount)
letter_sketch.rotate_xyz(90, 0, -90)
if letter_ascii == starting_letter_ascii:
continue
previous_letter = chr(letter_ascii - 1)
desired_spacing = 1
limit_x = desired_spacing - extrude_amount * 2
Joint(
Sketch(previous_letter).get_landmark("center"),
Sketch(letter).get_landmark("center"),
).limit_location_xyz(desired_spacing, 0, 0)