Compare commits
2 Commits
9918d2b064
...
temp
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
726bbd469e | ||
|
|
9f4ce14d35 |
@@ -25,7 +25,8 @@ $fs = 0.01;
|
|||||||
SCRIPT_VERSION="0.0.1";
|
SCRIPT_VERSION="0.0.1";
|
||||||
|
|
||||||
// font for layout
|
// font for layout
|
||||||
FONT="Ubuntu Sans Mono:style=Regular";
|
// FONT="Ubuntu Sans Mono:style=Regular";
|
||||||
|
FONT="SquareFont:style=Regular";
|
||||||
|
|
||||||
// the test number ref number for this set of IDTs
|
// the test number ref number for this set of IDTs
|
||||||
test_number = 1;
|
test_number = 1;
|
||||||
@@ -49,7 +50,7 @@ c = 3992.0;
|
|||||||
// c = 3159.0;
|
// c = 3159.0;
|
||||||
|
|
||||||
// the target frequency of the IDT
|
// the target frequency of the IDT
|
||||||
freq = 50.0e6;
|
freq = 10.0e6;
|
||||||
|
|
||||||
// the distance between the input and output IDT
|
// the distance between the input and output IDT
|
||||||
// should be between 100-200
|
// should be between 100-200
|
||||||
@@ -94,8 +95,8 @@ bond_pad_shape = "square";
|
|||||||
|
|
||||||
// ================= text =================
|
// ================= text =================
|
||||||
|
|
||||||
info_block_offset_x=7;
|
render_text = true;
|
||||||
info_block_offset_y=30;
|
|
||||||
// total scale of infoblock
|
// total scale of infoblock
|
||||||
info_block_scale=0.3;
|
info_block_scale=0.3;
|
||||||
|
|
||||||
|
|||||||
12
complie_presets.py
Normal file
12
complie_presets.py
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
from openscad import *
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
idt = osuse("wafer_layouts/gird_array_idt.scad")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
idt.render()
|
||||||
|
|
||||||
|
# if __name__ == "__main__":
|
||||||
|
# idt = BidirectionalIDTElectrode()
|
||||||
660200
dxfs/#multiple_freq_idt.dxf
Normal file
660200
dxfs/#multiple_freq_idt.dxf
Normal file
File diff suppressed because it is too large
Load Diff
1373624
dxfs/10MHz_pair_IDT/#pair_10MHZ.dxf
Normal file
1373624
dxfs/10MHz_pair_IDT/#pair_10MHZ.dxf
Normal file
File diff suppressed because it is too large
Load Diff
69200
dxfs/10MHz_pair_IDT/#pair_10MHZ_no_text.dxf
Normal file
69200
dxfs/10MHz_pair_IDT/#pair_10MHZ_no_text.dxf
Normal file
File diff suppressed because it is too large
Load Diff
33274
dxfs/10MHz_pair_IDT/pair_10MHZ_no_text.dxf
Normal file
33274
dxfs/10MHz_pair_IDT/pair_10MHZ_no_text.dxf
Normal file
File diff suppressed because it is too large
Load Diff
693646
dxfs/10MHz_pair_IDT/pair_10MHZ_square_text.dxf
Normal file
693646
dxfs/10MHz_pair_IDT/pair_10MHZ_square_text.dxf
Normal file
File diff suppressed because it is too large
Load Diff
42238
dxfs/10MHz_pair_IDT/pair_10MHZ_square_text.dxf~
Normal file
42238
dxfs/10MHz_pair_IDT/pair_10MHZ_square_text.dxf~
Normal file
File diff suppressed because it is too large
Load Diff
51262
dxfs/10MHz_pair_IDT/pair_10MHZtext.dxf
Normal file
51262
dxfs/10MHz_pair_IDT/pair_10MHZtext.dxf
Normal file
File diff suppressed because it is too large
Load Diff
59456
dxfs/10MHz_single_IDT/#single_10MHZ_no_text.dxf
Normal file
59456
dxfs/10MHz_single_IDT/#single_10MHZ_no_text.dxf
Normal file
File diff suppressed because it is too large
Load Diff
28402
dxfs/10MHz_single_IDT/single_10MHZ_no_text.dxf
Normal file
28402
dxfs/10MHz_single_IDT/single_10MHZ_no_text.dxf
Normal file
File diff suppressed because it is too large
Load Diff
28402
dxfs/10MHz_single_IDT/single_10MHZ_square_text.dxf
Normal file
28402
dxfs/10MHz_single_IDT/single_10MHZ_square_text.dxf
Normal file
File diff suppressed because it is too large
Load Diff
28402
dxfs/10MHz_single_IDT/single_10MHZ_w_text.dxf
Normal file
28402
dxfs/10MHz_single_IDT/single_10MHZ_w_text.dxf
Normal file
File diff suppressed because it is too large
Load Diff
28402
dxfs/10MHz_single_IDT/single_10MHZtext.dxf
Normal file
28402
dxfs/10MHz_single_IDT/single_10MHZtext.dxf
Normal file
File diff suppressed because it is too large
Load Diff
22486
dxfs/25MHz_cross_idt/cross_25MHz_no_text.dxf
Normal file
22486
dxfs/25MHz_cross_idt/cross_25MHz_no_text.dxf
Normal file
File diff suppressed because it is too large
Load Diff
699754
dxfs/25MHz_cross_idt/cross_25MHz_square_text.dxf
Normal file
699754
dxfs/25MHz_cross_idt/cross_25MHz_square_text.dxf
Normal file
File diff suppressed because it is too large
Load Diff
41026
dxfs/25MHz_cross_idt/cross_25MHztext.dxf
Normal file
41026
dxfs/25MHz_cross_idt/cross_25MHztext.dxf
Normal file
File diff suppressed because it is too large
Load Diff
2458174
dxfs/345MHz_grid_10_10_IDT/array_345MHz_no_text.dxf
Normal file
2458174
dxfs/345MHz_grid_10_10_IDT/array_345MHz_no_text.dxf
Normal file
File diff suppressed because it is too large
Load Diff
3207346
dxfs/345MHz_grid_10_10_IDT/array_345MHz_square_text.dxf
Normal file
3207346
dxfs/345MHz_grid_10_10_IDT/array_345MHz_square_text.dxf
Normal file
File diff suppressed because it is too large
Load Diff
2476918
dxfs/345MHz_grid_10_10_IDT/array_345MHztext.dxf
Normal file
2476918
dxfs/345MHz_grid_10_10_IDT/array_345MHztext.dxf
Normal file
File diff suppressed because it is too large
Load Diff
297994
dxfs/50MHz_quadrant_array_16/quadrand_50MHz_no_text.dxf
Normal file
297994
dxfs/50MHz_quadrant_array_16/quadrand_50MHz_no_text.dxf
Normal file
File diff suppressed because it is too large
Load Diff
316198
dxfs/50MHz_quadrant_array_16/quadrand_50MHz_square_text.dxf
Normal file
316198
dxfs/50MHz_quadrant_array_16/quadrand_50MHz_square_text.dxf
Normal file
File diff suppressed because it is too large
Load Diff
316198
dxfs/50MHz_quadrant_array_16/quadrand_50MHztext.dxf
Normal file
316198
dxfs/50MHz_quadrant_array_16/quadrand_50MHztext.dxf
Normal file
File diff suppressed because it is too large
Load Diff
328774
dxfs/multiple_freq_idt.dxf
Normal file
328774
dxfs/multiple_freq_idt.dxf
Normal file
File diff suppressed because it is too large
Load Diff
84704
dxfs_new/#cross_25MHztext.dxf
Normal file
84704
dxfs_new/#cross_25MHztext.dxf
Normal file
File diff suppressed because it is too large
Load Diff
105176
dxfs_new/#pair_10MHZtext.dxf
Normal file
105176
dxfs_new/#pair_10MHZtext.dxf
Normal file
File diff suppressed because it is too large
Load Diff
2476918
dxfs_new/array_345MHztext.dxf
Normal file
2476918
dxfs_new/array_345MHztext.dxf
Normal file
File diff suppressed because it is too large
Load Diff
41026
dxfs_new/cross_25MHztext.dxf
Normal file
41026
dxfs_new/cross_25MHztext.dxf
Normal file
File diff suppressed because it is too large
Load Diff
51262
dxfs_new/pair_10MHZtext.dxf
Normal file
51262
dxfs_new/pair_10MHZtext.dxf
Normal file
File diff suppressed because it is too large
Load Diff
316198
dxfs_new/quadrand_50MHztext.dxf
Normal file
316198
dxfs_new/quadrand_50MHztext.dxf
Normal file
File diff suppressed because it is too large
Load Diff
28402
dxfs_new/single_10MHZtext.dxf
Normal file
28402
dxfs_new/single_10MHZtext.dxf
Normal file
File diff suppressed because it is too large
Load Diff
20
makefile
20
makefile
@@ -1,19 +1,27 @@
|
|||||||
|
|
||||||
|
FILE_SUFFIX = "text"
|
||||||
|
# DXF_OUTPUT_PATH = "dxfs/"
|
||||||
|
DXF_OUTPUT_PATH = "dxfs_new"
|
||||||
|
|
||||||
|
|
||||||
all: single_10MHZ pair_10MHZ quadrand_50MHz array_345MHz cross_25MHz
|
all: single_10MHZ pair_10MHZ quadrand_50MHz array_345MHz cross_25MHz
|
||||||
|
|
||||||
|
|
||||||
single_10MHZ:
|
single_10MHZ:
|
||||||
openscad -o dxfs/10MHz_single_IDT/single_10MHZ.dxf wafer_layouts/single_idt.scad -p dxfs/10MHz_single_IDT/single_idt.json
|
# openscad -o ${DXF_OUTPUT_PATH}/10MHz_single_IDT/single_10MHZ${FILE_SUFFIX}.dxf wafer_layouts/single_idt.scad -p dxfs/10MHz_single_IDT/single_idt.json
|
||||||
|
openscad -o ${DXF_OUTPUT_PATH}/single_10MHZ${FILE_SUFFIX}.dxf wafer_layouts/single_idt.scad -p dxfs/10MHz_single_IDT/single_idt.json
|
||||||
|
|
||||||
pair_10MHZ:
|
pair_10MHZ:
|
||||||
openscad -o dxfs/10MHz_pair_IDT/pair_10MHZ.dxf wafer_layouts/pair_idt.scad -p dxfs/10MHz_single_IDT/pair_idt.json
|
# openscad -o ${DXF_OUTPUT_PATH}/10MHz_pair_IDT/pair_10MHZ${FILE_SUFFIX}.dxf wafer_layouts/pair_idt.scad -p dxfs/10MHz_single_IDT/pair_idt.json
|
||||||
|
openscad -o ${DXF_OUTPUT_PATH}/pair_10MHZ${FILE_SUFFIX}.dxf wafer_layouts/pair_idt.scad -p dxfs/10MHz_single_IDT/pair_idt.json
|
||||||
|
|
||||||
quadrand_50MHz:
|
quadrand_50MHz:
|
||||||
openscad -o dxfs/50MHz_quadrant_array_16/quadrand_50MHz.dxf wafer_layouts/quadrant_array.scad -p dxfs/50MHz_quadrant_array_16/quadrant_array_16_50MHz.json
|
# openscad -o ${DXF_OUTPUT_PATH}/50MHz_quadrant_array_16/quadrand_50MHz${FILE_SUFFIX}.dxf wafer_layouts/quadrant_array.scad -p dxfs/50MHz_quadrant_array_16/quadrant_array_16_50MHz.json
|
||||||
|
openscad -o ${DXF_OUTPUT_PATH}/quadrand_50MHz${FILE_SUFFIX}.dxf wafer_layouts/quadrant_array.scad -p dxfs/50MHz_quadrant_array_16/quadrant_array_16_50MHz.json
|
||||||
|
|
||||||
array_345MHz:
|
array_345MHz:
|
||||||
openscad -o dxfs/345MHz_grid_10_10_IDT/array_345MHz.dxf wafer_layouts/gird_array_idt.scad -p dxfs/345MHz_grid_10_10_IDT/gird_array_idt.json
|
# openscad -o ${DXF_OUTPUT_PATH}/345MHz_grid_10_10_IDT/array_345MHz${FILE_SUFFIX}.dxf wafer_layouts/gird_array_idt.scad -p dxfs/345MHz_grid_10_10_IDT/gird_array_idt.json
|
||||||
|
openscad -o ${DXF_OUTPUT_PATH}/array_345MHz${FILE_SUFFIX}.dxf wafer_layouts/gird_array_idt.scad -p dxfs/345MHz_grid_10_10_IDT/gird_array_idt.json
|
||||||
|
|
||||||
cross_25MHz:
|
cross_25MHz:
|
||||||
openscad -o dxfs/25MHz_cross_idt/cross_25MHz.dxf wafer_layouts/cross_pattern_idt.scad -p dxfs/25MHz_cross_idt/cross_pattern_idt.json
|
# openscad -o ${DXF_OUTPUT_PATH}/25MHz_cross_idt/cross_25MHz${FILE_SUFFIX}.dxf wafer_layouts/cross_pattern_idt.scad -p dxfs/25MHz_cross_idt/cross_pattern_idt.json
|
||||||
|
openscad -o ${DXF_OUTPUT_PATH}/cross_25MHz${FILE_SUFFIX}.dxf wafer_layouts/cross_pattern_idt.scad -p dxfs/25MHz_cross_idt/cross_pattern_idt.json
|
||||||
|
|||||||
@@ -16,7 +16,8 @@ module bi_directional_idt(
|
|||||||
// bond pad prams
|
// bond pad prams
|
||||||
has_bond_pads = false,
|
has_bond_pads = false,
|
||||||
bond_pad_leg_length = 0.00005,
|
bond_pad_leg_length = 0.00005,
|
||||||
bond_pad_leg_width = 0.00001875,
|
bond_pad_leg_width = 0.00001875,
|
||||||
|
bond_pad_leg_width_overide = 0,
|
||||||
bond_pad_size = 0.000075,
|
bond_pad_size = 0.000075,
|
||||||
bond_pad_angle = 45,
|
bond_pad_angle = 45,
|
||||||
bond_pad_bond_pad_shape = "square",
|
bond_pad_bond_pad_shape = "square",
|
||||||
@@ -29,7 +30,7 @@ module bi_directional_idt(
|
|||||||
id_rot = [0, 0, 0],
|
id_rot = [0, 0, 0],
|
||||||
// extra
|
// extra
|
||||||
post_scale = 1,
|
post_scale = 1,
|
||||||
echo_stats = false,
|
echo_stats = true,
|
||||||
center = false
|
center = false
|
||||||
) {
|
) {
|
||||||
|
|
||||||
@@ -38,7 +39,6 @@ module bi_directional_idt(
|
|||||||
// dont worry about these magic fractions
|
// dont worry about these magic fractions
|
||||||
length_of_input = n_fingers*lambda+1.74*lambda;
|
length_of_input = n_fingers*lambda+1.74*lambda;
|
||||||
|
|
||||||
|
|
||||||
should_be_centered = center ? 1 : 0;
|
should_be_centered = center ? 1 : 0;
|
||||||
center_offset_y = length_of_input + distance * lambda/2;
|
center_offset_y = length_of_input + distance * lambda/2;
|
||||||
center_offset_x = finger_length*lambda/2 + gap/2 + thickness;
|
center_offset_x = finger_length*lambda/2 + gap/2 + thickness;
|
||||||
@@ -72,14 +72,14 @@ module bi_directional_idt(
|
|||||||
color([255/255, 255/255, 255/255]) {
|
color([255/255, 255/255, 255/255]) {
|
||||||
bond_pad(
|
bond_pad(
|
||||||
leg_length_tweak = lambda/4,
|
leg_length_tweak = lambda/4,
|
||||||
leg_width=c/f/4,
|
leg_width=(c/f/4*scale_unit)*(-bond_pad_leg_width_overide+1) + bond_pad_leg_width*bond_pad_leg_width_overide,
|
||||||
leg_length=length(
|
leg_length=length(
|
||||||
[0,0,0],
|
[0,0,0],
|
||||||
[bond_pad_leg_length, bond_pad_leg_length, 0]
|
[bond_pad_leg_length*scale_unit, bond_pad_leg_length*scale_unit, 0]
|
||||||
),
|
),
|
||||||
leg_angle = -bond_pad_angle,
|
leg_angle = -bond_pad_angle,
|
||||||
size = bond_pad_size,
|
size = bond_pad_size*scale_unit,
|
||||||
post_scale=scale_unit
|
post_scale = 1
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -91,14 +91,14 @@ module bi_directional_idt(
|
|||||||
if (has_bond_pads) {
|
if (has_bond_pads) {
|
||||||
bond_pad(
|
bond_pad(
|
||||||
leg_length_tweak = lambda/5,
|
leg_length_tweak = lambda/5,
|
||||||
leg_width=c/f/4,
|
leg_width=(c/f/4*scale_unit)*(-bond_pad_leg_width_overide+1) + bond_pad_leg_width*bond_pad_leg_width_overide,
|
||||||
leg_length=length(
|
leg_length=length(
|
||||||
[0,0,0],
|
[0,0,0],
|
||||||
[bond_pad_leg_length, bond_pad_leg_length, 0]
|
[bond_pad_leg_length*scale_unit, bond_pad_leg_length*scale_unit, 0]
|
||||||
),
|
),
|
||||||
leg_angle = bond_pad_angle,
|
leg_angle = bond_pad_angle,
|
||||||
size = bond_pad_size,
|
size = bond_pad_size*scale_unit,
|
||||||
post_scale=scale_unit
|
post_scale = 1
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -110,14 +110,14 @@ module bi_directional_idt(
|
|||||||
if (has_bond_pads) {
|
if (has_bond_pads) {
|
||||||
bond_pad(
|
bond_pad(
|
||||||
leg_length_tweak = lambda/5,
|
leg_length_tweak = lambda/5,
|
||||||
leg_width=c/f/4,
|
leg_width=(c/f/4*scale_unit)*(-bond_pad_leg_width_overide+1) + bond_pad_leg_width*bond_pad_leg_width_overide,
|
||||||
leg_length=length(
|
leg_length=length(
|
||||||
[0,0,0],
|
[0,0,0],
|
||||||
[bond_pad_leg_length, bond_pad_leg_length, 0]
|
[bond_pad_leg_length*scale_unit, bond_pad_leg_length*scale_unit, 0]
|
||||||
),
|
),
|
||||||
leg_angle = bond_pad_angle,
|
leg_angle = bond_pad_angle,
|
||||||
size = bond_pad_size,
|
size = bond_pad_size*scale_unit,
|
||||||
post_scale=scale_unit
|
post_scale = 1
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -127,14 +127,14 @@ module bi_directional_idt(
|
|||||||
if (has_bond_pads) {
|
if (has_bond_pads) {
|
||||||
bond_pad(
|
bond_pad(
|
||||||
leg_length_tweak = lambda/4,
|
leg_length_tweak = lambda/4,
|
||||||
leg_width=c/f/4,
|
leg_width=(c/f/4*scale_unit)*(-bond_pad_leg_width_overide+1) + bond_pad_leg_width*bond_pad_leg_width_overide,
|
||||||
leg_length=length(
|
leg_length=length(
|
||||||
[0,0,0],
|
[0,0,0],
|
||||||
[bond_pad_leg_length, bond_pad_leg_length, 0]
|
[bond_pad_leg_length*scale_unit, bond_pad_leg_length*scale_unit, 0]
|
||||||
),
|
),
|
||||||
leg_angle = -bond_pad_angle,
|
leg_angle = -bond_pad_angle,
|
||||||
size = bond_pad_size,
|
size = bond_pad_size*scale_unit,
|
||||||
post_scale=scale_unit
|
post_scale = 1
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ module delay_line(
|
|||||||
) {
|
) {
|
||||||
|
|
||||||
// just a very small value that allows the polygons to overlap nicely
|
// just a very small value that allows the polygons to overlap nicely
|
||||||
esp = $fs;
|
esp = lambda/1000;
|
||||||
l45 =lambda*5/4;
|
l45 = lambda*5/4;
|
||||||
l2 = lambda/2;
|
l2 = lambda/2;
|
||||||
l4 = lambda/4;
|
l4 = lambda/4;
|
||||||
l8 = lambda/8;
|
l8 = lambda/8;
|
||||||
|
|||||||
@@ -2,10 +2,17 @@
|
|||||||
|
|
||||||
|
|
||||||
// [TODO] try add the flat edge on to the wafer
|
// [TODO] try add the flat edge on to the wafer
|
||||||
module wafer(d) {
|
module wafer(d, exposure_size=3*25.4) {
|
||||||
if ($preview) {
|
if ($preview) {
|
||||||
color([128/255, 128/255, 128/255])
|
color([128/255, 128/255, 128/255])
|
||||||
translate([0, 0, -1])
|
translate([0, 0, -1])
|
||||||
circle(r=d/2);
|
circle(r=d/2);
|
||||||
|
|
||||||
|
color([255/255, 128/255, 128/255, 50/255])
|
||||||
|
translate([0, 0, 3])
|
||||||
|
difference() {
|
||||||
|
circle(r=d/2);
|
||||||
|
circle(r=exposure_size/2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
948
openscad.pyi
Normal file
948
openscad.pyi
Normal file
@@ -0,0 +1,948 @@
|
|||||||
|
from typing import Union, Optional, overload
|
||||||
|
|
||||||
|
OpenSCADObjects = Union["OpenSCADObject", list["OpenSCADObject"]]
|
||||||
|
"""Type for functions that accept either a single OpenSCAD object or a list of objects."""
|
||||||
|
|
||||||
|
Color = Union[str, list[float]]
|
||||||
|
"""Color specification as either a color name string (e.g., "red") or RGB/RGBA values as [r, g, b] or [r, g, b, a]."""
|
||||||
|
|
||||||
|
Vector2 = list[float]
|
||||||
|
"""2D vector represented as [x, y] list."""
|
||||||
|
|
||||||
|
Vector3 = list[float]
|
||||||
|
"""3D vector represented as [x, y, z] list."""
|
||||||
|
|
||||||
|
Matrix4x4 = list[list[float]]
|
||||||
|
"""4x4 transformation matrix as a list of 4 lists of 4 floats."""
|
||||||
|
|
||||||
|
class OpenSCADObject:
|
||||||
|
"""Base class for OpenSCAD objects."""
|
||||||
|
|
||||||
|
origin: Matrix4x4
|
||||||
|
"""4x4 transformation matrix representing the object's origin.
|
||||||
|
Initialized as identity matrix."""
|
||||||
|
|
||||||
|
def translate(self, v: Vector3) -> "OpenSCADObject":
|
||||||
|
"""Translate this object.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
v: Translation vector [x, y, z].
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The transformed object. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def rotate(
|
||||||
|
self, a: Union[float, Vector3], v: Optional[Vector3] = None
|
||||||
|
) -> "OpenSCADObject":
|
||||||
|
"""Rotate this object.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
a: Rotation angle (degrees) or rotation vector [x, y, z].
|
||||||
|
v: Optional rotation axis vector when a is a scalar angle.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The transformed object. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def scale(self, v: Union[float, Vector3]) -> "OpenSCADObject":
|
||||||
|
"""Scale this object.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
v: Scale factor (uniform) or scale vector [x, y, z].
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The transformed object. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def mirror(self, v: Vector3) -> "OpenSCADObject":
|
||||||
|
"""Mirror this object.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
v: Mirror plane normal vector [x, y, z].
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The transformed object. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def multmatrix(self, m: Matrix4x4) -> "OpenSCADObject":
|
||||||
|
"""Apply matrix transformation to this object.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
m: 4x4 transformation matrix as a list of 4 lists of 4 floats.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The transformed object. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def divmatrix(self, m: Matrix4x4) -> "OpenSCADObject":
|
||||||
|
"""Apply inverse matrix transformation to this object.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
m: 4x4 matrix as a list of 4 lists of 4 floats for inverse transformation.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The transformed object. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def offset(
|
||||||
|
self,
|
||||||
|
r: Optional[float] = None,
|
||||||
|
delta: Optional[float] = None,
|
||||||
|
chamfer: Optional[bool] = None,
|
||||||
|
fn: Optional[float] = None,
|
||||||
|
fa: Optional[float] = None,
|
||||||
|
fs: Optional[float] = None,
|
||||||
|
) -> "OpenSCADObject":
|
||||||
|
"""Offset this 2D object.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
r: Offset radius (rounded corners).
|
||||||
|
delta: Offset distance (sharp corners).
|
||||||
|
chamfer: If True, creates chamfered corners.
|
||||||
|
fn: Number of fragments for curved parts.
|
||||||
|
fa: Minimum angle for each fragment.
|
||||||
|
fs: Minimum size for each fragment.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The transformed object. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def color(self, c: Color, alpha: float = 1.0) -> "OpenSCADObject":
|
||||||
|
"""Color this object.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
c: Color specification - color name string or RGB/RGBA values.
|
||||||
|
alpha: Alpha (transparency) value between 0.0 and 1.0. Defaults to 1.0.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A new object with the color set. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def linear_extrude(
|
||||||
|
self,
|
||||||
|
height: Optional[float] = None,
|
||||||
|
convexity: int = 1,
|
||||||
|
center: Optional[bool] = None,
|
||||||
|
slices: int = 1,
|
||||||
|
segments: int = 0,
|
||||||
|
scale: Optional[Vector2] = None,
|
||||||
|
twist: Optional[float] = None,
|
||||||
|
fn: Optional[float] = None,
|
||||||
|
fa: Optional[float] = None,
|
||||||
|
fs: Optional[float] = None,
|
||||||
|
) -> "OpenSCADObject":
|
||||||
|
"""Linear extrude this 2D object to 3D.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
height: Extrusion height.
|
||||||
|
convexity: Convexity parameter for rendering. Defaults to 1.
|
||||||
|
center: If True, centers the extrusion.
|
||||||
|
slices: Number of slices for twist/scale. Defaults to 1.
|
||||||
|
segments: Number of segments. Defaults to 0.
|
||||||
|
scale: Scale factor for top vs bottom.
|
||||||
|
twist: Twist angle in degrees.
|
||||||
|
fn: Number of fragments for curved parts.
|
||||||
|
fa: Minimum angle for each fragment.
|
||||||
|
fs: Minimum size for each fragment.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A new object representing the result of the extrusion. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def rotate_extrude(
|
||||||
|
self,
|
||||||
|
convexity: int = 1,
|
||||||
|
angle: float = 360.0,
|
||||||
|
fn: Optional[float] = None,
|
||||||
|
fa: Optional[float] = None,
|
||||||
|
fs: Optional[float] = None,
|
||||||
|
) -> "OpenSCADObject":
|
||||||
|
"""Rotationally extrude this 2D object to 3D.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
convexity: Convexity parameter for rendering. Defaults to 1.
|
||||||
|
angle: Rotation angle in degrees. Defaults to 360.0.
|
||||||
|
fn: Number of fragments for circle approximation.
|
||||||
|
fa: Minimum angle for each fragment.
|
||||||
|
fs: Minimum size for each fragment.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A new object representing the result of the extrusion. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def resize(self, newsize: Vector3, convexity: int = 2) -> "OpenSCADObject":
|
||||||
|
"""Modifies the size of the object to match the given x,y, and z sizes.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
newsize: New size dimensions as [x, y, z].
|
||||||
|
convexity: Convexity parameter for rendering. Defaults to 2.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The transformed object. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def mesh(
|
||||||
|
self, triangulate: Optional[bool] = None
|
||||||
|
) -> Union[tuple[list[Vector3], list[list[int]]], list[list[Vector2]]]:
|
||||||
|
"""Export mesh representation of this object.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
triangulate: If True, triangulates the mesh.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
For 3D objects: A tuple of (vertices, faces) where:
|
||||||
|
- vertices: List of 3D vertex coordinates [[x, y, z], ...]
|
||||||
|
- faces: List of face definitions (lists of vertex indices)
|
||||||
|
|
||||||
|
For 2D objects: A list of outlines where:
|
||||||
|
- Each outline is a list of 2D vertex coordinates [[x, y], ...]
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def align(
|
||||||
|
self, refmat: Matrix4x4, objmat: Optional[Matrix4x4] = None
|
||||||
|
) -> "OpenSCADObject":
|
||||||
|
"""Align this object to a reference matrix.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
refmat: Reference transformation matrix.
|
||||||
|
objmat: Optional object transformation matrix.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A new object. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def show(self) -> None:
|
||||||
|
"""Mark this object for output/display."""
|
||||||
|
...
|
||||||
|
|
||||||
|
def projection(
|
||||||
|
self, cut: Optional[bool] = None, convexity: int = 2
|
||||||
|
) -> "OpenSCADObject":
|
||||||
|
"""Create a 2D projection from this 3D object.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
cut: If True, creates a cross-section at z=0.
|
||||||
|
convexity: Convexity parameter for rendering. Defaults to 2.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The projected 2D object.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def render(self, convexity: int = 2) -> "OpenSCADObject":
|
||||||
|
"""Force rendering this object.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
convexity: Convexity parameter for rendering. Defaults to 2.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The object that will be forced to render. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def union(self, *others: OpenSCADObjects) -> "OpenSCADObject":
|
||||||
|
"""Create a union of this object with others.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
*others: Other OpenSCAD objects to union with this one.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A new object representing the union. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def difference(self, *others: OpenSCADObjects) -> "OpenSCADObject":
|
||||||
|
"""Create a difference by subtracting others from this object.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
*others: Other OpenSCAD objects to subtract from this one.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A new object representing the difference. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def intersection(self, *others: OpenSCADObjects) -> "OpenSCADObject":
|
||||||
|
"""Create an intersection of this object with others.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
*others: Other OpenSCAD objects to intersect with this one.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A new object representing the intersection. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def __getattr__(self, name): ...
|
||||||
|
def __setattr__(self, name, value): ...
|
||||||
|
def __getitem__(self, name): ...
|
||||||
|
def __setitem__(self, name, value): ...
|
||||||
|
|
||||||
|
# Operators:
|
||||||
|
|
||||||
|
def __or__(self, other: OpenSCADObjects) -> "OpenSCADObject":
|
||||||
|
"""Create a union of two objects"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def __and__(self, other: OpenSCADObjects) -> "OpenSCADObject":
|
||||||
|
"""Create an intersection of two objects"""
|
||||||
|
...
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def __sub__(self, other: OpenSCADObjects) -> "OpenSCADObject":
|
||||||
|
"""Create a difference of two objects"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def __add__(self, other: Vector3) -> "OpenSCADObject":
|
||||||
|
"""Create a new object by translating this object by a vector"""
|
||||||
|
...
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def __sub__(self, other: Vector3) -> "OpenSCADObject":
|
||||||
|
"""Create a new object by translating this object by the negative of a vector"""
|
||||||
|
...
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def __mul__(self, other: float) -> "OpenSCADObject":
|
||||||
|
"""Create a new object by scaling this object by a uniform factor in all directions"""
|
||||||
|
...
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def __mul__(self, other: Vector3) -> "OpenSCADObject":
|
||||||
|
"""Create a new object by scaling this object by a vector of factors in [x, y, z] directions"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def square(
|
||||||
|
dim: Optional[Union[float, list[float]]] = None, center: Optional[bool] = None
|
||||||
|
) -> OpenSCADObject:
|
||||||
|
"""Create a square primitive.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
dim: Dimensions of the square. Can be a single number for a square,
|
||||||
|
or a sequence of 2 numbers [width, height] for a rectangle.
|
||||||
|
If not specified, creates a unit square.
|
||||||
|
center: If True, centers the square at the origin. If False or None,
|
||||||
|
places one corner at the origin. Defaults to False.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A 2D geometric object.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def circle(
|
||||||
|
r: Optional[float] = None,
|
||||||
|
d: Optional[float] = None,
|
||||||
|
fn: Optional[float] = None,
|
||||||
|
fa: Optional[float] = None,
|
||||||
|
fs: Optional[float] = None,
|
||||||
|
) -> OpenSCADObject:
|
||||||
|
"""Create a circle primitive.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
r: Radius of the circle. Must be positive. Cannot be used with d.
|
||||||
|
If neither r nor d is specified, defaults to 1.
|
||||||
|
d: Diameter of the circle. Must be positive. Cannot be used with r.
|
||||||
|
fn: Number of fragments for circle approximation.
|
||||||
|
fa: Minimum angle for each fragment.
|
||||||
|
fs: Minimum size for each fragment.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A 2D geometric object.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def polygon(
|
||||||
|
points: Matrix4x4, paths: Optional[list[list[int]]] = None, convexity: int = 2
|
||||||
|
) -> OpenSCADObject:
|
||||||
|
"""Create a polygon primitive.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
points: List of 2D coordinates defining the polygon vertices.
|
||||||
|
Each point must be a list of exactly 2 numbers [x, y].
|
||||||
|
Must contain at least one point.
|
||||||
|
paths: Optional list of paths, where each path is a list of indices
|
||||||
|
into the points list. If specified, must contain at least one path.
|
||||||
|
Used to define holes or complex polygons.
|
||||||
|
convexity: Convexity parameter for rendering optimization. Must be >= 1.
|
||||||
|
Defaults to 2.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A 2D geometric object.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def text(
|
||||||
|
text: str,
|
||||||
|
size: float = 1.0,
|
||||||
|
font: Optional[str] = None,
|
||||||
|
spacing: float = 1.0,
|
||||||
|
direction: str = "ltr",
|
||||||
|
language: str = "en",
|
||||||
|
script: str = "latin",
|
||||||
|
halign: str = "left",
|
||||||
|
valign: str = "baseline",``
|
||||||
|
fn: Optional[float] = None,
|
||||||
|
fa: Optional[float] = None,
|
||||||
|
fs: Optional[float] = None,
|
||||||
|
) -> OpenSCADObject:
|
||||||
|
"""Create a text primitive.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
text: The text string to render.
|
||||||
|
size: Font size. Defaults to 1.0.
|
||||||
|
font: Font name to use. If None, uses default font.
|
||||||
|
spacing: Spacing between characters. Defaults to 1.0.
|
||||||
|
direction: Text direction, either "ltr" (left-to-right) or "rtl". Defaults to "ltr".
|
||||||
|
language: Language code (e.g., "en", "de"). Defaults to "en".
|
||||||
|
script: Script type (e.g., "latin", "arabic"). Defaults to "latin".
|
||||||
|
halign: Horizontal alignment: "left", "center", or "right". Defaults to "left".
|
||||||
|
valign: Vertical alignment: "baseline", "top", "center", or "bottom". Defaults to "baseline".
|
||||||
|
fn: Number of fragments for curved parts.
|
||||||
|
fa: Minimum angle for each fragment.
|
||||||
|
fs: Minimum size for each fragment.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A 2D geometric object.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def textmetrics(
|
||||||
|
text: str,
|
||||||
|
size: float = 1.0,
|
||||||
|
font: Optional[str] = None,
|
||||||
|
spacing: float = 1.0,
|
||||||
|
direction: str = "ltr",
|
||||||
|
language: str = "en",
|
||||||
|
script: str = "latin",
|
||||||
|
halign: str = "left",
|
||||||
|
valign: str = "baseline",
|
||||||
|
) -> dict[str, Union[float, list[float]]]:
|
||||||
|
"""Get text metrics for the given text parameters.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
text: The text string to measure.
|
||||||
|
size: Font size. Defaults to 1.0.
|
||||||
|
font: Font name to use. If None, uses default font.
|
||||||
|
spacing: Spacing between characters. Defaults to 1.0.
|
||||||
|
direction: Text direction, either "ltr" or "rtl". Defaults to "ltr".
|
||||||
|
language: Language code (e.g., "en", "de"). Defaults to "en".
|
||||||
|
script: Script type (e.g., "latin", "arabic"). Defaults to "latin".
|
||||||
|
halign: Horizontal alignment: "left", "center", or "right". Defaults to "left".
|
||||||
|
valign: Vertical alignment: "baseline", "top", "center", or "bottom". Defaults to "baseline".
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A dictionary containing text metrics with keys:
|
||||||
|
- "ascent": Font ascent value
|
||||||
|
- "descent": Font descent value
|
||||||
|
- "offset": [x_offset, y_offset] list
|
||||||
|
- "advance": [advance_x, advance_y] list
|
||||||
|
- "position": [bbox_x, bbox_y] list
|
||||||
|
- "size": [bbox_width, bbox_height] list
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def cube(
|
||||||
|
size: Optional[Union[float, Vector3]] = None, center: Optional[bool] = None
|
||||||
|
) -> OpenSCADObject:
|
||||||
|
"""Create a cube primitive.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
size: Dimensions of the cube. Can be a single number for a cube,
|
||||||
|
or a sequence of 3 numbers [x, y, z] for a rectangular box.
|
||||||
|
If not specified, creates a unit cube [1, 1, 1].
|
||||||
|
center: If True, centers the cube at the origin. If False or None,
|
||||||
|
places one corner at the origin. Defaults to False.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A 3D geometric object.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def cylinder(
|
||||||
|
h: Optional[float] = None,
|
||||||
|
r1: Optional[float] = None,
|
||||||
|
r2: Optional[float] = None,
|
||||||
|
center: Optional[bool] = None,
|
||||||
|
r: Optional[float] = None,
|
||||||
|
d: Optional[float] = None,
|
||||||
|
d1: Optional[float] = None,
|
||||||
|
d2: Optional[float] = None,
|
||||||
|
fn: Optional[float] = None,
|
||||||
|
fa: Optional[float] = None,
|
||||||
|
fs: Optional[float] = None,
|
||||||
|
) -> OpenSCADObject:
|
||||||
|
"""Create a cylinder primitive.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
h: Height of the cylinder. Must be positive.
|
||||||
|
r1: Radius at bottom. Must be non-negative.
|
||||||
|
r2: Radius at top. Must be non-negative.
|
||||||
|
center: If True, centers the cylinder at the origin.
|
||||||
|
r: Uniform radius for both ends.
|
||||||
|
d: Uniform diameter for both ends.
|
||||||
|
d1: Diameter at bottom.
|
||||||
|
d2: Diameter at top.
|
||||||
|
fn: Number of fragments for circle approximation.
|
||||||
|
fa: Minimum angle for each fragment.
|
||||||
|
fs: Minimum size for each fragment.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A 3D geometric object.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def sphere(
|
||||||
|
r: Optional[float] = None,
|
||||||
|
d: Optional[float] = None,
|
||||||
|
fn: Optional[float] = None,
|
||||||
|
fa: Optional[float] = None,
|
||||||
|
fs: Optional[float] = None,
|
||||||
|
) -> OpenSCADObject:
|
||||||
|
"""Create a sphere primitive.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
r: Radius of the sphere. Must be positive. Cannot be used with d.
|
||||||
|
d: Diameter of the sphere. Must be positive. Cannot be used with r.
|
||||||
|
fn: Number of fragments for sphere approximation.
|
||||||
|
fa: Minimum angle for each fragment.
|
||||||
|
fs: Minimum size for each fragment.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A 3D geometric object.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def polyhedron(
|
||||||
|
points: Matrix4x4,
|
||||||
|
faces: list[list[int]],
|
||||||
|
convexity: int = 2,
|
||||||
|
triangles: Optional[list[list[int]]] = None,
|
||||||
|
) -> OpenSCADObject:
|
||||||
|
"""Create a polyhedron primitive.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
points: List of 3D coordinates defining the polyhedron vertices.
|
||||||
|
Each point must be a list of exactly 3 numbers [x, y, z].
|
||||||
|
Must contain at least one point.
|
||||||
|
faces: List of face definitions, where each face is a list of indices
|
||||||
|
into the points list.
|
||||||
|
convexity: Convexity parameter for rendering optimization. Defaults to 2.
|
||||||
|
triangles: Optional backwards compatibility parameter for triangular faces.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A 3D geometric object.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def translate(obj: OpenSCADObjects, v: Vector3) -> OpenSCADObject:
|
||||||
|
"""Translate an object or list of objects.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
obj: Object or list of objects to translate.
|
||||||
|
v: Translation vector [x, y, z].
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The transformed object. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def translate(matrix: Matrix4x4, v: Vector3) -> Matrix4x4:
|
||||||
|
"""Apply translation to a 4x4 transformation matrix.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
matrix: 4x4 transformation matrix to translate.
|
||||||
|
v: Translation vector [x, y, z].
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The transformed matrix with translation applied.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def rotate(
|
||||||
|
obj: OpenSCADObjects, a: Union[float, Vector3], v: Optional[Vector3] = None
|
||||||
|
) -> OpenSCADObject:
|
||||||
|
"""Rotate an object or list of objects.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
obj: Object or list of objects to rotate.
|
||||||
|
a: Rotation angle (degrees) or rotation vector [x, y, z].
|
||||||
|
v: Optional rotation axis vector when a is a scalar angle.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The transformed object. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def rotate(
|
||||||
|
matrix: Matrix4x4, a: Union[float, Vector3], v: Optional[Vector3] = None
|
||||||
|
) -> Matrix4x4:
|
||||||
|
"""Apply rotation to a 4x4 transformation matrix.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
matrix: 4x4 transformation matrix to rotate.
|
||||||
|
a: Rotation angle (degrees) or rotation vector [x, y, z].
|
||||||
|
v: Optional rotation axis vector when a is a scalar angle.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The transformed matrix with rotation applied.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def scale(obj: OpenSCADObjects, v: Union[float, Vector3]) -> OpenSCADObject:
|
||||||
|
"""Scale an object or list of objects.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
obj: Object or list of objects to scale.
|
||||||
|
v: Scale factor (uniform) or scale vector [x, y, z].
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The transformed object. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def scale(matrix: Matrix4x4, v: Union[float, Vector3]) -> Matrix4x4:
|
||||||
|
"""Apply scaling to a 4x4 transformation matrix.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
matrix: 4x4 transformation matrix to scale.
|
||||||
|
v: Scale factor (uniform) or scale vector [x, y, z].
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The transformed matrix with scaling applied.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def mirror(obj: OpenSCADObjects, v: Vector3) -> OpenSCADObject:
|
||||||
|
"""Mirror an object or list of objects.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
obj: Object or list of objects to mirror.
|
||||||
|
v: Mirror plane normal vector [x, y, z].
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The transformed object. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def mirror(matrix: Matrix4x4, v: Vector3) -> Matrix4x4:
|
||||||
|
"""Apply mirroring to a 4x4 transformation matrix.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
matrix: 4x4 transformation matrix to mirror.
|
||||||
|
v: Mirror plane normal vector [x, y, z].
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The transformed matrix with mirroring applied.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def multmatrix(obj: OpenSCADObjects, m: Matrix4x4) -> OpenSCADObject:
|
||||||
|
"""Apply matrix transformation to an object.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
obj: Object to transform.
|
||||||
|
m: 4x4 transformation matrix as a list of 4 lists of 4 floats.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The transformed object. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def color(obj: OpenSCADObjects, c: Color, alpha: float = 1.0) -> OpenSCADObject:
|
||||||
|
"""Color an object.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
obj: Object to color.
|
||||||
|
c: Color specification - color name string or RGB/RGBA values.
|
||||||
|
alpha: Alpha (transparency) value between 0.0 and 1.0. Defaults to 1.0.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A new object with the color set. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def union(*objects: OpenSCADObjects) -> OpenSCADObject:
|
||||||
|
"""Create a union of multiple objects.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
*objects: Variable number of OpenSCAD objects or lists of objects to union.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A new object representing the union. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def difference(*objects: OpenSCADObjects) -> OpenSCADObject:
|
||||||
|
"""Create a difference of multiple objects.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
*objects: Variable number of OpenSCAD objects or lists of objects. The first object
|
||||||
|
has all subsequent objects subtracted from it.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A new object representing the difference. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def intersection(*objects: OpenSCADObjects) -> OpenSCADObject:
|
||||||
|
"""Create an intersection of multiple objects.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
*objects: Variable number of OpenSCAD objects or lists of objects to intersect.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A new object representing the intersection. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def hull(*objects: OpenSCADObjects) -> OpenSCADObject:
|
||||||
|
"""Create a convex hull of multiple objects.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
*objects: Variable number of OpenSCAD objects or lists of objects.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A new object. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def linear_extrude(
|
||||||
|
obj: OpenSCADObjects,
|
||||||
|
height: Optional[float] = None,
|
||||||
|
convexity: int = 1,
|
||||||
|
center: Optional[bool] = None,
|
||||||
|
slices: int = 1,
|
||||||
|
segments: int = 0,
|
||||||
|
scale: Optional[Vector2] = None,
|
||||||
|
twist: Optional[float] = None,
|
||||||
|
fn: Optional[float] = None,
|
||||||
|
fa: Optional[float] = None,
|
||||||
|
fs: Optional[float] = None,
|
||||||
|
) -> OpenSCADObject:
|
||||||
|
"""Linear extrude a 2D object to 3D.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
obj: 2D object to extrude.
|
||||||
|
height: Extrusion height.
|
||||||
|
convexity: Convexity parameter for rendering. Defaults to 1.
|
||||||
|
center: If True, centers the extrusion.
|
||||||
|
slices: Number of slices for twist/scale. Defaults to 1.
|
||||||
|
segments: Number of segments. Defaults to 0.
|
||||||
|
scale: Scale factor for top vs bottom.
|
||||||
|
twist: Twist angle in degrees.
|
||||||
|
fn: Number of fragments for curved parts.
|
||||||
|
fa: Minimum angle for each fragment.
|
||||||
|
fs: Minimum size for each fragment.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The linearly extruded 3D object. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def rotate_extrude(
|
||||||
|
obj: OpenSCADObjects,
|
||||||
|
convexity: int = 1,
|
||||||
|
angle: float = 360.0,
|
||||||
|
fn: Optional[float] = None,
|
||||||
|
fa: Optional[float] = None,
|
||||||
|
fs: Optional[float] = None,
|
||||||
|
) -> OpenSCADObject:
|
||||||
|
"""Rotationally extrude a 2D object to 3D.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
obj: 2D object to extrude.
|
||||||
|
convexity: Convexity parameter for rendering. Defaults to 1.
|
||||||
|
angle: Rotation angle in degrees. Defaults to 360.0.
|
||||||
|
fn: Number of fragments for circle approximation.
|
||||||
|
fa: Minimum angle for each fragment.
|
||||||
|
fs: Minimum size for each fragment.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The rotationally extruded 3D object. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def offset(
|
||||||
|
obj: OpenSCADObjects,
|
||||||
|
r: Optional[float] = None,
|
||||||
|
delta: Optional[float] = None,
|
||||||
|
chamfer: Optional[bool] = None,
|
||||||
|
fn: Optional[float] = None,
|
||||||
|
fa: Optional[float] = None,
|
||||||
|
fs: Optional[float] = None,
|
||||||
|
) -> OpenSCADObject:
|
||||||
|
"""Offset a 2D object.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
obj: 2D object to offset.
|
||||||
|
r: Offset radius (rounded corners).
|
||||||
|
delta: Offset distance (sharp corners).
|
||||||
|
chamfer: If True, creates chamfered corners.
|
||||||
|
fn: Number of fragments for curved parts.
|
||||||
|
fa: Minimum angle for each fragment.
|
||||||
|
fs: Minimum size for each fragment.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The offset 2D object. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def minkowski(*objects: OpenSCADObjects, convexity: int = 2) -> OpenSCADObject:
|
||||||
|
"""Create a Minkowski sum of objects.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
*objects: Objects or lists of objects to compute Minkowski sum of.
|
||||||
|
convexity: Convexity parameter for rendering. Defaults to 2.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A new object representing the Minkowski sum. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def projection(
|
||||||
|
obj: OpenSCADObjects, cut: Optional[bool] = None, convexity: int = 2
|
||||||
|
) -> OpenSCADObject:
|
||||||
|
"""Create a 2D projection from a 3D object.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
obj: 3D object to project.
|
||||||
|
cut: If True, creates a cross-section at z=0.
|
||||||
|
convexity: Convexity parameter for rendering. Defaults to 2.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The projected 2D object.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def surface(
|
||||||
|
file: str,
|
||||||
|
center: Optional[bool] = None,
|
||||||
|
convexity: int = 2,
|
||||||
|
invert: Optional[bool] = None,
|
||||||
|
) -> OpenSCADObject:
|
||||||
|
"""Create a surface from a heightmap file.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
file: Path to the heightmap image file.
|
||||||
|
center: If True, centers the surface.
|
||||||
|
convexity: Convexity parameter for rendering. Defaults to 2.
|
||||||
|
invert: If True, inverts the heightmap.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A 3d object generated from the imported height map.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def show(obj: OpenSCADObjects) -> None:
|
||||||
|
"""Mark an object for output/display.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
obj: Object to mark for output.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def render(obj: OpenSCADObjects, convexity: int = 2) -> OpenSCADObject:
|
||||||
|
"""Force rendering an object.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
obj: Object to render.
|
||||||
|
convexity: Convexity parameter for rendering. Defaults to 2.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The object that will be forced to render. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def resize(
|
||||||
|
obj: OpenSCADObjects, newsize: Vector3, convexity: int = 2
|
||||||
|
) -> OpenSCADObject:
|
||||||
|
"""Modifies the size of an object to match the given x,y, and z sizes.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
obj: Object to resize.
|
||||||
|
newsize: New size dimensions as [x, y, z].
|
||||||
|
convexity: Convexity parameter for rendering. Defaults to 2.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The resized object. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def divmatrix(obj: OpenSCADObjects, m: Matrix4x4) -> OpenSCADObject:
|
||||||
|
"""Apply inverse matrix transformation to an object.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
obj: Object to transform.
|
||||||
|
m: 4x4 matrix as a list of 4 lists of 4 floats for inverse transformation.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The inverse transformed object.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def fill(*objects: OpenSCADObjects) -> OpenSCADObject:
|
||||||
|
"""Create a fill operation on objects.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
*objects: Variable number of OpenSCAD objects or lists of objects to fill.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A new object representing the fill operation result. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def mesh(
|
||||||
|
obj: OpenSCADObjects, triangulate: Optional[bool] = None
|
||||||
|
) -> Union[tuple[list[Vector3], list[list[int]]], list[list[Vector2]]]:
|
||||||
|
"""Export mesh representation of an object.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
obj: Object to convert to mesh.
|
||||||
|
triangulate: If True, triangulates the mesh.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
For 3D objects: A tuple of (vertices, faces) where:
|
||||||
|
- vertices: List of 3D vertex coordinates [[x, y, z], ...]
|
||||||
|
- faces: List of face definitions (lists of vertex indices)
|
||||||
|
|
||||||
|
For 2D objects: A list of outlines where:
|
||||||
|
- Each outline is a list of 2D vertex coordinates [[x, y], ...]
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
|
def align(
|
||||||
|
obj: OpenSCADObjects, refmat: Matrix4x4, objmat: Optional[Matrix4x4] = None
|
||||||
|
) -> OpenSCADObject:
|
||||||
|
"""Align an object to a reference matrix.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
obj: Object to align.
|
||||||
|
refmat: Reference transformation matrix.
|
||||||
|
objmat: Optional object transformation matrix.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A new object after alignment. The original object is unaffected.
|
||||||
|
"""
|
||||||
|
...
|
||||||
70
temp.dxf
Normal file
70
temp.dxf
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
0
|
||||||
|
SECTION
|
||||||
|
2
|
||||||
|
BLOCKS
|
||||||
|
0
|
||||||
|
ENDSEC
|
||||||
|
0
|
||||||
|
SECTION
|
||||||
|
2
|
||||||
|
ENTITIES
|
||||||
|
0
|
||||||
|
LINE
|
||||||
|
8
|
||||||
|
0
|
||||||
|
10
|
||||||
|
-5
|
||||||
|
20
|
||||||
|
-5
|
||||||
|
11
|
||||||
|
5
|
||||||
|
21
|
||||||
|
-5
|
||||||
|
0
|
||||||
|
LINE
|
||||||
|
8
|
||||||
|
0
|
||||||
|
10
|
||||||
|
5
|
||||||
|
20
|
||||||
|
-5
|
||||||
|
11
|
||||||
|
5
|
||||||
|
21
|
||||||
|
5
|
||||||
|
0
|
||||||
|
LINE
|
||||||
|
8
|
||||||
|
0
|
||||||
|
10
|
||||||
|
5
|
||||||
|
20
|
||||||
|
5
|
||||||
|
11
|
||||||
|
-5
|
||||||
|
21
|
||||||
|
5
|
||||||
|
0
|
||||||
|
LINE
|
||||||
|
8
|
||||||
|
0
|
||||||
|
10
|
||||||
|
-5
|
||||||
|
20
|
||||||
|
5
|
||||||
|
11
|
||||||
|
-5
|
||||||
|
21
|
||||||
|
-5
|
||||||
|
0
|
||||||
|
ENDSEC
|
||||||
|
0
|
||||||
|
SECTION
|
||||||
|
2
|
||||||
|
OBJECTS
|
||||||
|
0
|
||||||
|
DICTIONARY
|
||||||
|
0
|
||||||
|
ENDSEC
|
||||||
|
0
|
||||||
|
EOF
|
||||||
@@ -23,7 +23,8 @@ $fs = 0.01;
|
|||||||
// ================= meta =================
|
// ================= meta =================
|
||||||
SCRIPT_VERSION="0.0.1";
|
SCRIPT_VERSION="0.0.1";
|
||||||
// this really just need to be any mon font
|
// this really just need to be any mon font
|
||||||
FONT="Ubuntu Sans Mono:style=Regular";
|
// FONT="Ubuntu Sans Mono:style=Regular";
|
||||||
|
FONT="SquareFont:style=Regular";
|
||||||
test_number = 1;
|
test_number = 1;
|
||||||
// scale in m
|
// scale in m
|
||||||
scale_unit = 1e3;
|
scale_unit = 1e3;
|
||||||
@@ -73,6 +74,7 @@ info_block_scale=0.3;
|
|||||||
title_text_size = 4;
|
title_text_size = 4;
|
||||||
prop_text_size = 2.5;
|
prop_text_size = 2.5;
|
||||||
id_text_size = 1;
|
id_text_size = 1;
|
||||||
|
render_text = true;
|
||||||
// ================= text =================
|
// ================= text =================
|
||||||
|
|
||||||
// ================= IDT Pos =================
|
// ================= IDT Pos =================
|
||||||
@@ -101,15 +103,18 @@ module params() {
|
|||||||
str("leg_length : ", leg_length),
|
str("leg_length : ", leg_length),
|
||||||
str("leg_angle : ", leg_angle),
|
str("leg_angle : ", leg_angle),
|
||||||
str("size : ", size),
|
str("size : ", size),
|
||||||
str("feat. size (mm): ", (c/freq)*1e3),
|
str("feat. size (mm): ", (c/freq)*1e3 / 4),
|
||||||
str("version : ", SCRIPT_VERSION)
|
str("version : ", SCRIPT_VERSION)
|
||||||
]
|
],
|
||||||
|
font=FONT
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
translate([info_block_offset_x, -info_block_offset_y, 0])
|
if (render_text) {
|
||||||
scale([info_block_scale, info_block_scale, info_block_scale])
|
translate([info_block_offset_x, -info_block_offset_y, 0])
|
||||||
params();
|
scale([info_block_scale, info_block_scale, info_block_scale])
|
||||||
|
params();
|
||||||
|
}
|
||||||
|
|
||||||
wafer(wafer_size_inch*25.4);
|
wafer(wafer_size_inch*25.4);
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,8 @@ $fs = 0.01;
|
|||||||
SCRIPT_VERSION="0.0.1";
|
SCRIPT_VERSION="0.0.1";
|
||||||
|
|
||||||
// font for layout
|
// font for layout
|
||||||
FONT="Ubuntu Sans Mono:style=Regular";
|
FONT="SquareFont:style=Regular";
|
||||||
|
// FONT="Ubuntu Sans Mono:style=Regular";
|
||||||
|
|
||||||
// the test number ref number for this set of IDTs
|
// the test number ref number for this set of IDTs
|
||||||
test_number = 1;
|
test_number = 1;
|
||||||
@@ -81,7 +82,7 @@ has_id_number = true;
|
|||||||
leg_length = 0.001;
|
leg_length = 0.001;
|
||||||
|
|
||||||
// the width of the leg
|
// the width of the leg
|
||||||
leg_width = 0.00001875;
|
leg_width = 0.001875;
|
||||||
|
|
||||||
// the angle the leg comes off from the IDT,
|
// the angle the leg comes off from the IDT,
|
||||||
// positive angle means the leg is angled away
|
// positive angle means the leg is angled away
|
||||||
@@ -112,6 +113,8 @@ prop_text_size = 2.5;
|
|||||||
// the size of the ID numbers in on the IDTS
|
// the size of the ID numbers in on the IDTS
|
||||||
id_text_size = 0.5;
|
id_text_size = 0.5;
|
||||||
|
|
||||||
|
render_text = true;
|
||||||
|
|
||||||
// ================= text =================
|
// ================= text =================
|
||||||
|
|
||||||
// ================= wafers =================
|
// ================= wafers =================
|
||||||
@@ -122,7 +125,7 @@ wafer_size_inch = 4;
|
|||||||
// ================= # IDTS =================
|
// ================= # IDTS =================
|
||||||
|
|
||||||
rows = 10;
|
rows = 10;
|
||||||
cols = 10;
|
cols = 7;
|
||||||
spacing_x = 4;
|
spacing_x = 4;
|
||||||
spacing_y = 7;
|
spacing_y = 7;
|
||||||
|
|
||||||
@@ -143,17 +146,21 @@ module params() {
|
|||||||
str("leg_length : ", leg_length),
|
str("leg_length : ", leg_length),
|
||||||
str("leg_angle : ", leg_angle),
|
str("leg_angle : ", leg_angle),
|
||||||
str("size : ", size),
|
str("size : ", size),
|
||||||
str("feat. size (mm): ", (c/freq)*1e3),
|
str("feat. size (mm): ", (c/freq)*1e3 / 4),
|
||||||
str("version : ", SCRIPT_VERSION)
|
str("version : ", SCRIPT_VERSION)
|
||||||
]
|
],
|
||||||
|
font=FONT
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
translate([info_block_offset_x, -info_block_offset_y, 0])
|
if (render_text) {
|
||||||
scale([info_block_scale, info_block_scale, info_block_scale])
|
translate([info_block_offset_x, -info_block_offset_y, 0])
|
||||||
params();
|
scale([info_block_scale, info_block_scale, info_block_scale])
|
||||||
|
params();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
wafer(4*0.0254*scale_unit);
|
wafer(4*0.0254*scale_unit);
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
include <../modules/bidirectional_idt.scad>
|
include <../modules/bidirectional_idt.scad>
|
||||||
include <../modules/parameter_text.scad>
|
include <../modules/parameter_text.scad>
|
||||||
include <../modules/wafer.scad>
|
include <../modules/wafer.scad>
|
||||||
|
include <../common_paramas.scad>
|
||||||
|
|
||||||
// ================= README =================
|
// ================= README =================
|
||||||
// these are the normal parameters used by
|
// these are the normal parameters used by
|
||||||
@@ -23,7 +24,8 @@ $fs = 0.01;
|
|||||||
// ================= meta =================
|
// ================= meta =================
|
||||||
SCRIPT_VERSION="0.0.1";
|
SCRIPT_VERSION="0.0.1";
|
||||||
// this really just need to be any mon font
|
// this really just need to be any mon font
|
||||||
FONT="Ubuntu Sans Mono:style=Regular";
|
// FONT="Ubuntu Sans Mono:style=Regular";
|
||||||
|
FONT="SquareFont:style=Regular";
|
||||||
test_number = 1;
|
test_number = 1;
|
||||||
// scale in m
|
// scale in m
|
||||||
scale_unit = 1e3;
|
scale_unit = 1e3;
|
||||||
@@ -76,6 +78,7 @@ info_block_scale=0.3;
|
|||||||
title_text_size = 4;
|
title_text_size = 4;
|
||||||
prop_text_size = 2.5;
|
prop_text_size = 2.5;
|
||||||
id_text_size = 1;
|
id_text_size = 1;
|
||||||
|
render_text = true;
|
||||||
|
|
||||||
// ================= text =================
|
// ================= text =================
|
||||||
|
|
||||||
@@ -105,15 +108,19 @@ module params() {
|
|||||||
str("leg_length : ", leg_length),
|
str("leg_length : ", leg_length),
|
||||||
str("leg_angle : ", leg_angle),
|
str("leg_angle : ", leg_angle),
|
||||||
str("size : ", size),
|
str("size : ", size),
|
||||||
str("feat. size (mm): ", (c/freq)*1e3),
|
str("feat. size (mm): ", (c/freq)*1e3 / 4),
|
||||||
str("version : ", SCRIPT_VERSION)
|
str("version : ", SCRIPT_VERSION)
|
||||||
]
|
],
|
||||||
|
font=FONT
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
translate([info_block_offset_x, -info_block_offset_y, 0])
|
|
||||||
scale([info_block_scale, info_block_scale, info_block_scale])
|
if (render_text) {
|
||||||
params();
|
translate([info_block_offset_x, -info_block_offset_y, 0])
|
||||||
|
scale([info_block_scale, info_block_scale, info_block_scale])
|
||||||
|
params();
|
||||||
|
}
|
||||||
|
|
||||||
wafer(wafer_size_inch*25.4);
|
wafer(wafer_size_inch*25.4);
|
||||||
|
|
||||||
|
|||||||
427
wafer_layouts/multiple_freq_idt.scad
Normal file
427
wafer_layouts/multiple_freq_idt.scad
Normal file
@@ -0,0 +1,427 @@
|
|||||||
|
include <../modules/bidirectional_idt.scad>
|
||||||
|
include <../modules/parameter_text.scad>
|
||||||
|
include <../modules/wafer.scad>
|
||||||
|
include <../common_paramas.scad>
|
||||||
|
|
||||||
|
// ================= README =================
|
||||||
|
// these are the normal parameters used by
|
||||||
|
// each one of the layout scripts
|
||||||
|
// however they do dont directly use them
|
||||||
|
// and instead have thier own copy
|
||||||
|
//
|
||||||
|
// this was done in order to have more control
|
||||||
|
// over each of the scripts themsevels
|
||||||
|
// allowing each to have even more parameters
|
||||||
|
// and having them show up in the open scad
|
||||||
|
// parameters window
|
||||||
|
// ================= README =================
|
||||||
|
|
||||||
|
// ================= openscad prams =================
|
||||||
|
$fa = 1;
|
||||||
|
$fs = 0.01;
|
||||||
|
// ================= openscad prams =================
|
||||||
|
|
||||||
|
// ================= meta =================
|
||||||
|
SCRIPT_VERSION="0.0.1";
|
||||||
|
// this really just need to be any mon font
|
||||||
|
// FONT="Ubuntu Sans Mono:style=Regular";
|
||||||
|
FONT="SquareFont:style=Regular";
|
||||||
|
test_number = 1;
|
||||||
|
// scale in m
|
||||||
|
scale_unit = 1e3;
|
||||||
|
// ================= meta =================
|
||||||
|
|
||||||
|
|
||||||
|
// ================= IDT =================
|
||||||
|
substrate = "LINBO";
|
||||||
|
// linbo
|
||||||
|
c = 3992.0;
|
||||||
|
// si
|
||||||
|
// c = 3159.0;
|
||||||
|
|
||||||
|
// $fs = (c/freq);
|
||||||
|
|
||||||
|
// inout distance
|
||||||
|
distance = 150;
|
||||||
|
|
||||||
|
// number of finger
|
||||||
|
n_fingers = 50;
|
||||||
|
|
||||||
|
// should be 50-70
|
||||||
|
finger_length = 60;
|
||||||
|
|
||||||
|
// for tweaking the design
|
||||||
|
gap = 0;
|
||||||
|
|
||||||
|
// for tweaking the design
|
||||||
|
thickness = 0;
|
||||||
|
|
||||||
|
has_id_number = false;
|
||||||
|
// ================= IDT =================
|
||||||
|
|
||||||
|
// ================= bond pad =================
|
||||||
|
|
||||||
|
leg_length = 0.003;
|
||||||
|
leg_width = 0.00001875;
|
||||||
|
leg_angle = 10;
|
||||||
|
size = 0.002;
|
||||||
|
bond_pad_shape = "square";
|
||||||
|
|
||||||
|
// ================= bond pad =================
|
||||||
|
|
||||||
|
// ================= text =================
|
||||||
|
|
||||||
|
info_block_offset_x=20;
|
||||||
|
info_block_offset_y=-30;
|
||||||
|
info_block_scale=0.3;
|
||||||
|
title_text_size = 4;
|
||||||
|
prop_text_size = 2.5;
|
||||||
|
id_text_size = 1;
|
||||||
|
render_text = true;
|
||||||
|
|
||||||
|
// ================= text =================
|
||||||
|
|
||||||
|
// ================= IDT Pos =================
|
||||||
|
idt_1_x_offset = 0;
|
||||||
|
idt_1_y_offset = 0;
|
||||||
|
idt_2_x_offset = 0;
|
||||||
|
idt_2_y_offset = 0;
|
||||||
|
// ================= IDT Pos =================
|
||||||
|
|
||||||
|
|
||||||
|
// ================= wafers =================
|
||||||
|
wafer_size_inch = 4;
|
||||||
|
// ================= wafers =================
|
||||||
|
|
||||||
|
// module params() {
|
||||||
|
// parameter_text(
|
||||||
|
// str("IDT ", substrate, "#", test_number),
|
||||||
|
// [
|
||||||
|
// str("c (ms): ", c),
|
||||||
|
// str("freq (Hz): ", freq),
|
||||||
|
// str("distance : ", distance),
|
||||||
|
// str("n_fingers : ", n_fingers),
|
||||||
|
// str("finger_length : ", finger_length),
|
||||||
|
// str("gap : ", gap),
|
||||||
|
// str("thickness : ", thickness),
|
||||||
|
// str("leg_length : ", leg_length),
|
||||||
|
// str("leg_angle : ", leg_angle),
|
||||||
|
// str("size : ", size),
|
||||||
|
// str("feat. size (mm): ", (c/freq)*1e3 / 4),
|
||||||
|
// str("version : ", SCRIPT_VERSION)
|
||||||
|
// ],
|
||||||
|
// font=FONT
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
// if (render_text) {
|
||||||
|
// translate([info_block_offset_x, -info_block_offset_y, 0])
|
||||||
|
// scale([info_block_scale, info_block_scale, info_block_scale])
|
||||||
|
// params();
|
||||||
|
// }
|
||||||
|
|
||||||
|
wafer(wafer_size_inch*25.4);
|
||||||
|
|
||||||
|
freq_1 = 345.0e6;
|
||||||
|
idt_1_x = 10; // [-50:50]
|
||||||
|
idt_1_y = 26.5; // [-50:50]
|
||||||
|
translate([idt_1_x, idt_1_y, 0])
|
||||||
|
for (i=[0:2]) {
|
||||||
|
translate([4*i, 0, 0])
|
||||||
|
bi_directional_idt(
|
||||||
|
c,
|
||||||
|
freq_1,
|
||||||
|
n_fingers,
|
||||||
|
distance,
|
||||||
|
finger_length,
|
||||||
|
gap,
|
||||||
|
0.1,
|
||||||
|
post_scale=scale_unit,
|
||||||
|
has_bond_pads = true,
|
||||||
|
bond_pad_angle = 25,
|
||||||
|
bond_pad_leg_length = 0.001,
|
||||||
|
bond_pad_leg_width = 0.03,
|
||||||
|
bond_pad_leg_width_overide = 1,
|
||||||
|
bond_pad_size = 0.0005,
|
||||||
|
has_id = has_id_number,
|
||||||
|
center = true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
translate([10, 20, 0])
|
||||||
|
for (i=[0:2]) {
|
||||||
|
translate([4*i, 0, 0])
|
||||||
|
bi_directional_idt(
|
||||||
|
c,
|
||||||
|
freq_1,
|
||||||
|
n_fingers,
|
||||||
|
distance,
|
||||||
|
finger_length,
|
||||||
|
gap,
|
||||||
|
0.1,
|
||||||
|
post_scale=scale_unit,
|
||||||
|
has_bond_pads = true,
|
||||||
|
bond_pad_angle = 25,
|
||||||
|
bond_pad_leg_width = 0.03,
|
||||||
|
bond_pad_leg_width_overide = 1,
|
||||||
|
bond_pad_leg_length = 0.001,
|
||||||
|
bond_pad_size = 0.0005,
|
||||||
|
has_id = has_id_number,
|
||||||
|
center = true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
translate([10, 13.5, 0])
|
||||||
|
for (i=[0:2]) {
|
||||||
|
translate([4*i, 0, 0])
|
||||||
|
bi_directional_idt(
|
||||||
|
c,
|
||||||
|
freq_1,
|
||||||
|
n_fingers,
|
||||||
|
distance,
|
||||||
|
finger_length,
|
||||||
|
gap,
|
||||||
|
0.1,
|
||||||
|
post_scale=scale_unit,
|
||||||
|
has_bond_pads = true,
|
||||||
|
bond_pad_angle = 25,
|
||||||
|
bond_pad_leg_width = 0.03,
|
||||||
|
bond_pad_leg_width_overide = 1,
|
||||||
|
bond_pad_leg_length = 0.001,
|
||||||
|
bond_pad_size = 0.0005,
|
||||||
|
has_id = has_id_number,
|
||||||
|
center = true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
freq_2 = 50.0e6;
|
||||||
|
idt_2_x = 0;
|
||||||
|
idt_2_y = 0;
|
||||||
|
translate([-7, 20, 0])
|
||||||
|
for (i=[0:2]) {
|
||||||
|
translate([6*i, 0, 0])
|
||||||
|
bi_directional_idt(
|
||||||
|
c,
|
||||||
|
freq_2,
|
||||||
|
n_fingers,
|
||||||
|
100,
|
||||||
|
30,
|
||||||
|
gap,
|
||||||
|
0.1,
|
||||||
|
post_scale=scale_unit,
|
||||||
|
has_bond_pads = true,
|
||||||
|
bond_pad_angle = 25,
|
||||||
|
bond_pad_leg_width = 0.03,
|
||||||
|
bond_pad_leg_width_overide = 1,
|
||||||
|
bond_pad_leg_length = 0.001,
|
||||||
|
bond_pad_size = 0.0005,
|
||||||
|
has_id = has_id_number,
|
||||||
|
center = true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
freq_3 = 100.0e6;
|
||||||
|
idt_3_x = 0;
|
||||||
|
idt_3_y = 0;
|
||||||
|
translate([-22, 10, 0])
|
||||||
|
for (i=[0:2]) {
|
||||||
|
translate([5*i, 0, 0])
|
||||||
|
bi_directional_idt(
|
||||||
|
c,
|
||||||
|
freq_3,
|
||||||
|
n_fingers,
|
||||||
|
100,
|
||||||
|
30,
|
||||||
|
gap,
|
||||||
|
0.1,
|
||||||
|
post_scale=scale_unit,
|
||||||
|
has_bond_pads = true,
|
||||||
|
bond_pad_angle = 25,
|
||||||
|
bond_pad_leg_width = 0.03,
|
||||||
|
bond_pad_leg_width_overide = 1,
|
||||||
|
bond_pad_leg_length = 0.001,
|
||||||
|
bond_pad_size = 0.0005,
|
||||||
|
has_id = has_id_number,
|
||||||
|
center = true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
translate([-22, 22, 0])
|
||||||
|
for (i=[0:2]) {
|
||||||
|
translate([5*i, 0, 0])
|
||||||
|
bi_directional_idt(
|
||||||
|
c,
|
||||||
|
freq_3,
|
||||||
|
n_fingers,
|
||||||
|
100,
|
||||||
|
30,
|
||||||
|
gap,
|
||||||
|
0.1,
|
||||||
|
post_scale=scale_unit,
|
||||||
|
has_bond_pads = true,
|
||||||
|
bond_pad_angle = 25,
|
||||||
|
bond_pad_leg_width = 0.03,
|
||||||
|
bond_pad_leg_width_overide = 1,
|
||||||
|
bond_pad_leg_length = 0.001,
|
||||||
|
bond_pad_size = 0.0005,
|
||||||
|
has_id = has_id_number,
|
||||||
|
center = true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
freq_4 = 250.0e6;
|
||||||
|
idt_4_x = 0;
|
||||||
|
idt_4_y = 0;
|
||||||
|
translate([-21, 0, 0])
|
||||||
|
for (i=[0:2]) {
|
||||||
|
translate([4*i, 0, 0])
|
||||||
|
bi_directional_idt(
|
||||||
|
c,
|
||||||
|
freq_4,
|
||||||
|
n_fingers,
|
||||||
|
100,
|
||||||
|
50,
|
||||||
|
gap,
|
||||||
|
0.1,
|
||||||
|
post_scale=scale_unit,
|
||||||
|
has_bond_pads = true,
|
||||||
|
bond_pad_angle = 25,
|
||||||
|
bond_pad_leg_width = 0.03,
|
||||||
|
bond_pad_leg_width_overide = 1,
|
||||||
|
bond_pad_leg_length = 0.001,
|
||||||
|
bond_pad_size = 0.0005,
|
||||||
|
has_id = has_id_number,
|
||||||
|
center = true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
translate([-21, -7, 0])
|
||||||
|
for (i=[0:2]) {
|
||||||
|
translate([4*i, 0, 0])
|
||||||
|
bi_directional_idt(
|
||||||
|
c,
|
||||||
|
freq_4,
|
||||||
|
n_fingers,
|
||||||
|
100,
|
||||||
|
50,
|
||||||
|
gap,
|
||||||
|
0.1,
|
||||||
|
post_scale=scale_unit,
|
||||||
|
has_bond_pads = true,
|
||||||
|
bond_pad_angle = 25,
|
||||||
|
bond_pad_leg_width = 0.03,
|
||||||
|
bond_pad_leg_width_overide = 1,
|
||||||
|
bond_pad_leg_length = 0.001,
|
||||||
|
bond_pad_size = 0.0005,
|
||||||
|
has_id = has_id_number,
|
||||||
|
center = true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
translate([-21, -14, 0])
|
||||||
|
for (i=[0:2]) {
|
||||||
|
translate([4*i, 0, 0])
|
||||||
|
bi_directional_idt(
|
||||||
|
c,
|
||||||
|
freq_4,
|
||||||
|
n_fingers,
|
||||||
|
100,
|
||||||
|
50,
|
||||||
|
gap,
|
||||||
|
0.1,
|
||||||
|
post_scale=scale_unit,
|
||||||
|
has_bond_pads = true,
|
||||||
|
bond_pad_angle = 25,
|
||||||
|
bond_pad_leg_width = 0.03,
|
||||||
|
bond_pad_leg_width_overide = 1,
|
||||||
|
bond_pad_leg_length = 0.001,
|
||||||
|
bond_pad_size = 0.0005,
|
||||||
|
has_id = has_id_number,
|
||||||
|
center = true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
freq_5 = 20.0e6;
|
||||||
|
idt_5_x = 0;
|
||||||
|
idt_5_y = 0;
|
||||||
|
translate([-4, -5, 0])
|
||||||
|
for (i=[0:2]) {
|
||||||
|
translate([9*i, 0, 0])
|
||||||
|
bi_directional_idt(
|
||||||
|
c,
|
||||||
|
freq_5,
|
||||||
|
20,
|
||||||
|
75,
|
||||||
|
20,
|
||||||
|
gap,
|
||||||
|
0.1,
|
||||||
|
post_scale=scale_unit,
|
||||||
|
has_bond_pads = true,
|
||||||
|
bond_pad_angle = 25,
|
||||||
|
bond_pad_leg_width = leg_width,
|
||||||
|
bond_pad_leg_length = 0.001,
|
||||||
|
bond_pad_size = 0.0005,
|
||||||
|
has_id = has_id_number,
|
||||||
|
center = true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
echo("============================ 10MHz ============================");
|
||||||
|
echo("============================ 10MHz ============================");
|
||||||
|
echo("============================ 10MHz ============================");
|
||||||
|
echo("============================ 10MHz ============================");
|
||||||
|
echo("============================ 10MHz ============================");
|
||||||
|
freq_6 = 10.0e6;
|
||||||
|
idt_6_x = 0;
|
||||||
|
idt_6_y = 0;
|
||||||
|
translate([-30, 0, 0])
|
||||||
|
bi_directional_idt(
|
||||||
|
c,
|
||||||
|
freq_6,
|
||||||
|
10,
|
||||||
|
40,
|
||||||
|
10,
|
||||||
|
gap,
|
||||||
|
0.1,
|
||||||
|
post_scale=scale_unit,
|
||||||
|
has_bond_pads = true,
|
||||||
|
bond_pad_angle = 25,
|
||||||
|
bond_pad_leg_width = leg_width,
|
||||||
|
bond_pad_leg_length = 0.001,
|
||||||
|
bond_pad_size = 0.0005,
|
||||||
|
has_id = has_id_number,
|
||||||
|
center = true
|
||||||
|
);
|
||||||
|
|
||||||
|
translate([+31, 0, 0])
|
||||||
|
bi_directional_idt(
|
||||||
|
c,
|
||||||
|
freq_6,
|
||||||
|
10,
|
||||||
|
40,
|
||||||
|
10,
|
||||||
|
gap,
|
||||||
|
0.1,
|
||||||
|
post_scale=scale_unit,
|
||||||
|
has_bond_pads = true,
|
||||||
|
bond_pad_angle = 25,
|
||||||
|
bond_pad_leg_width = leg_width,
|
||||||
|
bond_pad_leg_length = 0.001,
|
||||||
|
bond_pad_size = 0.0005,
|
||||||
|
has_id = has_id_number,
|
||||||
|
center = true
|
||||||
|
);
|
||||||
|
translate([+23.5, 0, 0])
|
||||||
|
bi_directional_idt(
|
||||||
|
c,
|
||||||
|
freq_6,
|
||||||
|
10,
|
||||||
|
40,
|
||||||
|
10,
|
||||||
|
gap,
|
||||||
|
0.1,
|
||||||
|
post_scale=scale_unit,
|
||||||
|
has_bond_pads = true,
|
||||||
|
bond_pad_angle = 25,
|
||||||
|
bond_pad_leg_width = leg_width,
|
||||||
|
bond_pad_leg_length = 0.001,
|
||||||
|
bond_pad_size = 0.0005,
|
||||||
|
has_id = has_id_number,
|
||||||
|
center = true
|
||||||
|
);
|
||||||
@@ -23,9 +23,14 @@ $fs = 0.01;
|
|||||||
// ================= meta =================
|
// ================= meta =================
|
||||||
SCRIPT_VERSION="0.0.1";
|
SCRIPT_VERSION="0.0.1";
|
||||||
// this really just need to be any mon font
|
// this really just need to be any mon font
|
||||||
FONT="Ubuntu Sans Mono:style=Regular";
|
// FONT="Ubuntu Sans Mono:style=Regular";
|
||||||
|
FONT="SquareFont:style=Regular";
|
||||||
test_number = 1;
|
test_number = 1;
|
||||||
|
|
||||||
// scale in m
|
// scale in m
|
||||||
|
// 1e3 : mm
|
||||||
|
// 1e6 : um
|
||||||
|
// 1e9 : nm
|
||||||
scale_unit = 1e3;
|
scale_unit = 1e3;
|
||||||
// ================= meta =================
|
// ================= meta =================
|
||||||
|
|
||||||
@@ -36,12 +41,14 @@ substrate = "LINBO";
|
|||||||
c = 3992.0;
|
c = 3992.0;
|
||||||
// si
|
// si
|
||||||
// c = 3159.0;
|
// c = 3159.0;
|
||||||
freq = 10.0e6;
|
// AlN
|
||||||
|
// c = 5800.0;
|
||||||
|
freq = 100.0e6;
|
||||||
|
|
||||||
// $fs = (c/freq);
|
// $fs = (c/freq);
|
||||||
|
|
||||||
// inout distance
|
// inout distance
|
||||||
distance = 70;
|
distance = 200;
|
||||||
|
|
||||||
// number of finger
|
// number of finger
|
||||||
n_fingers = 50;
|
n_fingers = 50;
|
||||||
@@ -73,6 +80,7 @@ info_block_scale=0.3;
|
|||||||
title_text_size = 4;
|
title_text_size = 4;
|
||||||
prop_text_size = 2.5;
|
prop_text_size = 2.5;
|
||||||
id_text_size = 1;
|
id_text_size = 1;
|
||||||
|
render_text = true;
|
||||||
// ================= text =================
|
// ================= text =================
|
||||||
|
|
||||||
// ================= IDT Pos =================
|
// ================= IDT Pos =================
|
||||||
@@ -101,15 +109,19 @@ module params() {
|
|||||||
str("leg_length : ", leg_length),
|
str("leg_length : ", leg_length),
|
||||||
str("leg_angle : ", leg_angle),
|
str("leg_angle : ", leg_angle),
|
||||||
str("size : ", size),
|
str("size : ", size),
|
||||||
str("feat. size (mm): ", (c/freq)*1e3),
|
str("feat. size (mm): ", (c/freq)*1e3 / 4),
|
||||||
str("version : ", SCRIPT_VERSION)
|
str("version : ", SCRIPT_VERSION)
|
||||||
]
|
],
|
||||||
|
font=FONT
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
translate([info_block_offset_x, -info_block_offset_y, 0])
|
|
||||||
scale([info_block_scale, info_block_scale, info_block_scale])
|
if (render_text) {
|
||||||
params();
|
translate([info_block_offset_x, -info_block_offset_y, 0])
|
||||||
|
scale([info_block_scale, info_block_scale, info_block_scale])
|
||||||
|
params();
|
||||||
|
}
|
||||||
|
|
||||||
wafer(wafer_size_inch*25.4);
|
wafer(wafer_size_inch*25.4);
|
||||||
|
|
||||||
|
|||||||
@@ -1,37 +0,0 @@
|
|||||||
{
|
|
||||||
"parameterSets": {
|
|
||||||
"frogs": {
|
|
||||||
"$fa": "1",
|
|
||||||
"$fs": "0.01",
|
|
||||||
"FONT": "Ubuntu Sans Mono:style=Regular",
|
|
||||||
"SCRIPT_VERSION": "0.0.1",
|
|
||||||
"bond_pad_shape": "square",
|
|
||||||
"c": "3992",
|
|
||||||
"distance": "50",
|
|
||||||
"finger_length": "60",
|
|
||||||
"freq": "5e+7",
|
|
||||||
"gap": "0",
|
|
||||||
"has_id_number": "true",
|
|
||||||
"id_text_size": "1",
|
|
||||||
"idt_x_spacing": "10",
|
|
||||||
"idt_y_spacing": "12.5",
|
|
||||||
"info_block_offset_x": "7",
|
|
||||||
"info_block_offset_y": "30",
|
|
||||||
"info_block_scale": "0.3",
|
|
||||||
"leg_angle": "10",
|
|
||||||
"leg_length": "0.003",
|
|
||||||
"leg_width": "0.00001875",
|
|
||||||
"n_fingers": "50",
|
|
||||||
"number_of_idts_per_quadrent": "4",
|
|
||||||
"prop_text_size": "2.5",
|
|
||||||
"scale_unit": "1000",
|
|
||||||
"size": "0.002",
|
|
||||||
"substrate": "LINBO",
|
|
||||||
"test_number": "1",
|
|
||||||
"thickness": "0",
|
|
||||||
"title_text_size": "4",
|
|
||||||
"wafer_size_inch": "4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"fileFormatVersion": "1"
|
|
||||||
}
|
|
||||||
@@ -12,7 +12,8 @@ $fs = 0.01;
|
|||||||
// ================= meta =================
|
// ================= meta =================
|
||||||
SCRIPT_VERSION="0.0.1";
|
SCRIPT_VERSION="0.0.1";
|
||||||
// this really just need to be any mon font
|
// this really just need to be any mon font
|
||||||
FONT="Ubuntu Sans Mono:style=Regular";
|
// FONT="Ubuntu Sans Mono:style=Regular";
|
||||||
|
FONT="SquareFont:style=Regular";
|
||||||
test_number = 1;
|
test_number = 1;
|
||||||
// scale in m
|
// scale in m
|
||||||
scale_unit = 1e3;
|
scale_unit = 1e3;
|
||||||
@@ -56,6 +57,7 @@ bond_pad_shape = "square";
|
|||||||
// ================= bond pad =================
|
// ================= bond pad =================
|
||||||
|
|
||||||
// ================= text =================
|
// ================= text =================
|
||||||
|
render_text = true;
|
||||||
info_block_offset_x=7;
|
info_block_offset_x=7;
|
||||||
info_block_offset_y=30;
|
info_block_offset_y=30;
|
||||||
info_block_scale=0.3;
|
info_block_scale=0.3;
|
||||||
@@ -75,6 +77,8 @@ idt_y_spacing = 12.5;
|
|||||||
wafer_size_inch = 4;
|
wafer_size_inch = 4;
|
||||||
// ================= wafers =================
|
// ================= wafers =================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
module params() {
|
module params() {
|
||||||
parameter_text(
|
parameter_text(
|
||||||
str("IDT ", substrate, "#", test_number),
|
str("IDT ", substrate, "#", test_number),
|
||||||
@@ -89,20 +93,22 @@ module params() {
|
|||||||
str("leg_length : ", leg_length),
|
str("leg_length : ", leg_length),
|
||||||
str("leg_angle : ", leg_angle),
|
str("leg_angle : ", leg_angle),
|
||||||
str("size : ", size),
|
str("size : ", size),
|
||||||
str("feat. size (mm): ", (c/freq)*1e3),
|
str("feat. size (mm): ", (c/freq)*1e3 / 4),
|
||||||
str("version : ", SCRIPT_VERSION)
|
str("version : ", SCRIPT_VERSION)
|
||||||
]
|
],
|
||||||
|
font=FONT
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
translate([info_block_offset_x, -info_block_offset_y, 0]) {
|
|
||||||
rotate([0, 0, -90])
|
if (render_text) {
|
||||||
scale([info_block_scale, info_block_scale, info_block_scale]) {
|
translate([info_block_offset_x, -info_block_offset_y, 0])
|
||||||
|
scale([info_block_scale, info_block_scale, info_block_scale])
|
||||||
params();
|
params();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
rotate([0, 0, 180])
|
rotate([0, 0, 180])
|
||||||
translate([info_block_offset_x, -info_block_offset_y, 0]) {
|
translate([info_block_offset_x, -info_block_offset_y, 0]) {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
include <../modules/bidirectional_idt.scad>
|
include <../modules/bidirectional_idt.scad>
|
||||||
include <../modules/parameter_text.scad>
|
include <../modules/parameter_text.scad>
|
||||||
include <../modules/wafer.scad>
|
include <../modules/wafer.scad>
|
||||||
|
include <../common_paramas.scad>
|
||||||
|
|
||||||
// ================= README =================
|
// ================= README =================
|
||||||
// these are the normal parameters used by
|
// these are the normal parameters used by
|
||||||
@@ -15,7 +16,6 @@ include <../modules/wafer.scad>
|
|||||||
// parameters window
|
// parameters window
|
||||||
// ================= README =================
|
// ================= README =================
|
||||||
|
|
||||||
|
|
||||||
// ================= openscad prams =================
|
// ================= openscad prams =================
|
||||||
|
|
||||||
// min angle
|
// min angle
|
||||||
@@ -30,7 +30,8 @@ $fs = 0.01;
|
|||||||
SCRIPT_VERSION="0.0.1";
|
SCRIPT_VERSION="0.0.1";
|
||||||
|
|
||||||
// font for layout
|
// font for layout
|
||||||
FONT="Ubuntu Sans Mono:style=Regular";
|
// FONT="Ubuntu Sans Mono:style=Regular";
|
||||||
|
FONT="SquareFont:style=Regular";
|
||||||
|
|
||||||
// the test number ref number for this set of IDTs
|
// the test number ref number for this set of IDTs
|
||||||
test_number = 1;
|
test_number = 1;
|
||||||
@@ -41,6 +42,7 @@ scale_unit = 1e3;
|
|||||||
|
|
||||||
// ================= meta =================
|
// ================= meta =================
|
||||||
|
|
||||||
|
|
||||||
// ================= IDT =================
|
// ================= IDT =================
|
||||||
|
|
||||||
// the underlying substrate
|
// the underlying substrate
|
||||||
@@ -48,12 +50,12 @@ substrate = "SI";
|
|||||||
|
|
||||||
// linbo
|
// linbo
|
||||||
// the aoucstice wave speed in the substrate
|
// the aoucstice wave speed in the substrate
|
||||||
c = 3992.0;
|
// c = 3992.0;
|
||||||
// si
|
// si
|
||||||
// c = 3159.0;
|
c = 3159.0;
|
||||||
|
|
||||||
// the target frequency of the IDT
|
// the target frequency of the IDT
|
||||||
freq = 10.0e6;
|
freq = 17.0e8;
|
||||||
|
|
||||||
// the distance between the input and output IDT
|
// the distance between the input and output IDT
|
||||||
// should be between 100-200
|
// should be between 100-200
|
||||||
@@ -63,7 +65,7 @@ distance = 50;
|
|||||||
n_fingers = 50;
|
n_fingers = 50;
|
||||||
|
|
||||||
// the length of the figure or aperture should be 50-70
|
// the length of the figure or aperture should be 50-70
|
||||||
finger_length = 50;
|
finger_length = 60;
|
||||||
|
|
||||||
// the gap between both sides of the IDT (should be used for tweaking)
|
// the gap between both sides of the IDT (should be used for tweaking)
|
||||||
gap = 0;
|
gap = 0;
|
||||||
@@ -98,8 +100,8 @@ bond_pad_shape = "square";
|
|||||||
|
|
||||||
// ================= text =================
|
// ================= text =================
|
||||||
|
|
||||||
info_block_offset_x=25;
|
render_text = true;
|
||||||
info_block_offset_y=10;
|
|
||||||
// total scale of infoblock
|
// total scale of infoblock
|
||||||
info_block_scale=0.3;
|
info_block_scale=0.3;
|
||||||
|
|
||||||
@@ -120,7 +122,6 @@ wafer_size_inch = 4;
|
|||||||
// ================= wafers =================
|
// ================= wafers =================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ================= IDT Pos =================
|
// ================= IDT Pos =================
|
||||||
|
|
||||||
// the x offset of the IDT from the center
|
// the x offset of the IDT from the center
|
||||||
@@ -128,31 +129,37 @@ idt_x_offset = 0;
|
|||||||
// the y offset of the IDT from the center
|
// the y offset of the IDT from the center
|
||||||
idt_y_offset = 0;
|
idt_y_offset = 0;
|
||||||
|
|
||||||
|
info_block_offset_x=25;
|
||||||
|
info_block_offset_y=-7;
|
||||||
|
|
||||||
// ================= IDT Pos =================
|
// ================= IDT Pos =================
|
||||||
|
|
||||||
module params() {
|
module params() {
|
||||||
parameter_text(
|
parameter_text(
|
||||||
str("IDT ", substrate, "#", test_number),
|
str("IDT ", substrate, "#", test_number),
|
||||||
[
|
[
|
||||||
str("c (ms): ", c),
|
str("C: ", c),
|
||||||
str("freq (Hz): ", freq),
|
str("FREQ: ", freq),
|
||||||
str("distance : ", distance),
|
str("DISTANCE: ", distance),
|
||||||
str("n_fingers : ", n_fingers),
|
str("N_FINGERS: ", n_fingers),
|
||||||
str("finger_length : ", finger_length),
|
str("FINGER_LENGTH: ", finger_length),
|
||||||
str("gap : ", gap),
|
str("GAP: ", gap),
|
||||||
str("thickness : ", thickness),
|
str("THICKNESS: ", thickness),
|
||||||
str("leg_length : ", leg_length),
|
str("LEG_LENGTH: ", leg_length),
|
||||||
str("leg_angle : ", leg_angle),
|
str("LEG_ANGLE: ", leg_angle),
|
||||||
str("size : ", size),
|
str("SIZE: ", size),
|
||||||
str("feat. size (mm): ", (c/freq)*scale_unit),
|
str("FEAT. SIZE: ", (c/freq)*1e3 / 4),
|
||||||
str("version : ", SCRIPT_VERSION)
|
str("VERSION: ", SCRIPT_VERSION)
|
||||||
]
|
],
|
||||||
|
font=FONT
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
translate([info_block_offset_x, -info_block_offset_y, 0])
|
if (render_text) {
|
||||||
scale([info_block_scale, info_block_scale, info_block_scale])
|
translate([info_block_offset_x, -info_block_offset_y, 0])
|
||||||
params();
|
scale([info_block_scale, info_block_scale, info_block_scale])
|
||||||
|
params();
|
||||||
|
}
|
||||||
|
|
||||||
wafer(wafer_size_inch*25.4);
|
wafer(wafer_size_inch*25.4);
|
||||||
|
|
||||||
@@ -173,4 +180,124 @@ bi_directional_idt(
|
|||||||
bond_pad_size = size,
|
bond_pad_size = size,
|
||||||
center = true,
|
center = true,
|
||||||
echo_stats = true
|
echo_stats = true
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// // ================= README =================
|
||||||
|
// // these are the normal parameters used by
|
||||||
|
// // each one of the layout scripts
|
||||||
|
// // however they do dont directly use them
|
||||||
|
// // and instead have thier own copy
|
||||||
|
// //
|
||||||
|
// // this was done in order to have more control
|
||||||
|
// // over each of the scripts themsevels
|
||||||
|
// // allowing each to have even more parameters
|
||||||
|
// // and having them show up in the open scad
|
||||||
|
// // parameters window
|
||||||
|
// // ================= README =================
|
||||||
|
|
||||||
|
|
||||||
|
// // ================= openscad prams =================
|
||||||
|
|
||||||
|
// // min angle
|
||||||
|
// $fa = 25;
|
||||||
|
|
||||||
|
// // min size
|
||||||
|
// $fs = 0.1;
|
||||||
|
// // ================= openscad prams =================
|
||||||
|
|
||||||
|
// // ================= meta =================
|
||||||
|
// // version number of the current script
|
||||||
|
// SCRIPT_VERSION="0.0.1";
|
||||||
|
|
||||||
|
// // font for layout
|
||||||
|
// // FONT="Ubuntu Sans Mono:style=Regular";
|
||||||
|
// FONT="SquareFont:style=Regular";
|
||||||
|
|
||||||
|
// // the test number ref number for this set of IDTs
|
||||||
|
// test_number = 1;
|
||||||
|
|
||||||
|
// // this is needed due to the min size value
|
||||||
|
// // a pre scaler for the given values
|
||||||
|
// scale_unit = 1e3;
|
||||||
|
|
||||||
|
// // ================= meta =================
|
||||||
|
|
||||||
|
// // ================= IDT =================
|
||||||
|
|
||||||
|
// // the underlying substrate
|
||||||
|
// substrate = "SI";
|
||||||
|
|
||||||
|
// // linbo
|
||||||
|
// // the acoustic wave speed in the substrate
|
||||||
|
// c = 3992.0;
|
||||||
|
// // si
|
||||||
|
// // c = 3159.0;
|
||||||
|
|
||||||
|
// // the target frequency of the IDT
|
||||||
|
// freq = 10.0e6;
|
||||||
|
|
||||||
|
// // the distance between the input and output IDT
|
||||||
|
// // should be between 100-200
|
||||||
|
// distance = 50;
|
||||||
|
|
||||||
|
// // the number of fingers the IDT has
|
||||||
|
// n_fingers = 50;
|
||||||
|
|
||||||
|
// // the length of the figure or aperture should be 50-70
|
||||||
|
// finger_length = 50;
|
||||||
|
|
||||||
|
// // the gap between both sides of the IDT (should be used for tweaking)
|
||||||
|
// gap = 0;
|
||||||
|
|
||||||
|
// // the thickness of the wire the connects all the fingers
|
||||||
|
// thickness = 0;
|
||||||
|
|
||||||
|
// // adds an ID number to an IDT, useful if you have multiple on a wafer
|
||||||
|
// has_id_number = false;
|
||||||
|
// // ================= IDT =================
|
||||||
|
|
||||||
|
// // ================= bond pad =================
|
||||||
|
|
||||||
|
// // the length of the bond pad leg from the edge of the IDT to the center of the bond pad
|
||||||
|
// leg_length = 0.003;
|
||||||
|
|
||||||
|
// // the width of the leg
|
||||||
|
// leg_width = 0.00001875;
|
||||||
|
|
||||||
|
// // the angle the leg comes off from the IDT,
|
||||||
|
// // positive angle means the leg is angled away
|
||||||
|
// // negitive angle means the leg is angled inwards
|
||||||
|
// leg_angle = 10;
|
||||||
|
|
||||||
|
// // the size of the bond pad
|
||||||
|
// size = 0.002;
|
||||||
|
|
||||||
|
// // the shape of the bond pad (not implemented)
|
||||||
|
// bond_pad_shape = "square";
|
||||||
|
|
||||||
|
// // ================= bond pad =================
|
||||||
|
|
||||||
|
// // ================= text =================
|
||||||
|
|
||||||
|
// info_block_offset_x=25;
|
||||||
|
// info_block_offset_y=10;
|
||||||
|
// // total scale of infoblock
|
||||||
|
// info_block_scale=0.3;
|
||||||
|
|
||||||
|
// // the text size of the heading in the info block
|
||||||
|
// title_text_size = 4;
|
||||||
|
|
||||||
|
// // the size of all the sub items in the info block
|
||||||
|
// prop_text_size = 2.5;
|
||||||
|
|
||||||
|
// // the size of the ID numbers in on the IDTS
|
||||||
|
// id_text_size = 1;
|
||||||
|
|
||||||
|
// // ================= text =================
|
||||||
|
|
||||||
|
// // ================= wafers =================
|
||||||
|
// // the size of the wafer in inchs (why inch and not metric like everything else because its standard)
|
||||||
|
// wafer_size_inch = 4;
|
||||||
|
// // ================= wafers =================
|
||||||
Reference in New Issue
Block a user