commit 083cfc37c778bb072db68b16d6a11c58cd66fb38 Author: Brady Stanton Date: Wed Jan 21 19:50:24 2026 -0800 initial commit, design for a small sign and a tripod chair foot diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dbd503d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.stl +.conda \ No newline at end of file diff --git a/assets/dovahkiin-font.zip b/assets/dovahkiin-font.zip new file mode 100644 index 0000000..a93ee65 Binary files /dev/null and b/assets/dovahkiin-font.zip differ diff --git a/assets/dovahkiin-font/Dovahkiin-rW07.ttf b/assets/dovahkiin-font/Dovahkiin-rW07.ttf new file mode 100644 index 0000000..3663032 Binary files /dev/null and b/assets/dovahkiin-font/Dovahkiin-rW07.ttf differ diff --git a/assets/dovahkiin-font/DovahkiinBold-ME3Y.ttf b/assets/dovahkiin-font/DovahkiinBold-ME3Y.ttf new file mode 100644 index 0000000..afd40f3 Binary files /dev/null and b/assets/dovahkiin-font/DovahkiinBold-ME3Y.ttf differ diff --git a/assets/dovahkiin-font/DovahkiinBoldItalic-KpZ7.ttf b/assets/dovahkiin-font/DovahkiinBoldItalic-KpZ7.ttf new file mode 100644 index 0000000..31ffcbd Binary files /dev/null and b/assets/dovahkiin-font/DovahkiinBoldItalic-KpZ7.ttf differ diff --git a/assets/dovahkiin-font/DovahkiinItalic-2BDv.ttf b/assets/dovahkiin-font/DovahkiinItalic-2BDv.ttf new file mode 100644 index 0000000..e6bfc6d Binary files /dev/null and b/assets/dovahkiin-font/DovahkiinItalic-2BDv.ttf differ diff --git a/assets/dovahkiin-font/info.txt b/assets/dovahkiin-font/info.txt new file mode 100644 index 0000000..ad3db59 --- /dev/null +++ b/assets/dovahkiin-font/info.txt @@ -0,0 +1,2 @@ +license: Freeware, commercial use requires donation +link: https://www.fontspace.com/dovahkiin-font-f17997 \ No newline at end of file diff --git a/assets/dovahkiin-font/misc/Font License.txt.txt b/assets/dovahkiin-font/misc/Font License.txt.txt new file mode 100644 index 0000000..93a2b33 --- /dev/null +++ b/assets/dovahkiin-font/misc/Font License.txt.txt @@ -0,0 +1,47 @@ +Shareware/ Font License + +Pixel Sagas Freeware Fonts EULA (End User License Agreement) and Software Inclusion Agreement + +"Purchaser" and "User" may be used interchangeably in this agreement. + +"Pixel Sagas" and "Neale Davidson" may be used interchangeably in this agreement. These all refer to the intellectual and legal property of Neale Davidson. + +Usage + +Pixel Saga's Shareware Fonts are free to use for personal, non-commercial purposes. No payment is necessary to use Pixel Saga's Freeware Fonts for personal use, and there is no limit to the amount of prints, pages, or other medium to be produced using them. However, you cannot offer the font for commercial sale, or offer for direct download. The inclusion othe font name and/or site URL in the credits or documentation when it is used is appreciated, but this is not mandatory. + +Payment + +Payment is not required for the use of Pixel Saga's Shareware Fonts. Commercial use requires a modest fee which can be paid through the pixelsagas.com web site through Paypal.com's services. The transaction receipt for any shareware "commercial license" purchase will suffice as proof of license. + +Support + +Font installation help is available at http://www.pixelsagas.com. If you experience problems with any Pixel Saga's Freeware font (such as spacing issues or missing characters), please verify that you have the correct and current version of the fonts. In the case of Freeware fonts, downloading the font directly from the Pixel Sagas site will ensure that the font files have not been altered. + +Software Inclusion Agreement + +Pixel Saga's software products are protected by copyright laws and International copyright treaties, as well as other intellectual property laws and treaties. All Pixel Saga's software products are licensed, not sold. + +1) GRANT OF LICENSE + +This document grants the user the following rights: + +Installation and Use. The user may install and use an unlimited number of copies of the software product. The user may not offer Pixel Sagas freeware fonts for direct download unless the user has received explicit, written permission from Neale Davidson. Otherwise please direct users to the http://www.pixelsagas.com website. Pixel Sagas freeware fonts may, however, be embedded for web, publication, or general software use. + +2) WARRANTIES + +None + +Pixel Sagas expressly disclaims any warranty for the software product. The software product and any related documentation is provided "as is" without warranty of any kind, either express or implied, including, without limitation, the implied warranties or merchantability, fitness for a particular purpose, or non-infringement. The entire risk arising out of use or performance of the software product remains with the user. + +No Liability For Consequential Damages. + +In no event shall Neale Davidson or Pixel Sagas be liable for any damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or any other pecuniary loss) arising out of the use of or inability to use this product, even if Pixel Sagas has been advised of the possibility of such damages. + +3) MISCELLANEOUS + +Should the user have any questions concerning this document or you desire to contact Neale Davidson for any reason, please email jaynz@pixelsagas.com . + +Governing Law + +This agreement is governed by and subject to the laws of the United States of America. diff --git a/sign.py b/sign.py new file mode 100644 index 0000000..753ebf1 --- /dev/null +++ b/sign.py @@ -0,0 +1,34 @@ +from build123d import * +from ocp_vscode import show + +length, width, thickness, fontsz, fontht = 80.0, 60.0, 10.0, 25.0, 4.0 + +ex34 = Box(length, width, thickness) +plane = Plane(ex34.faces().sort_by().last) +ex34_sk = plane * Text("Hello", font_size=fontsz, align=(Align.CENTER, Align.MIN)) +ex34 += extrude(ex34_sk, amount=fontht) +ex34_sk2 = plane * Text("World", font_size=fontsz, align=(Align.CENTER, Align.MAX)) +ex34 -= extrude(ex34_sk2, amount=-fontht) + +LENGTH=100 +HEIGHT=30 +THICKNESS=1.3 +TEXT_THICKNESS=0.8 +FONT_SIZE=20 +FONT="./dovahkiin-font/DovahkiinBold-ME3Y.ttf" +# FONT="Arial" +TEXT="Brady" +EXTRUDE_TEXT=False + +sign = Box(LENGTH,HEIGHT,THICKNESS) +front_plane = Plane(sign.faces().sort_by().last) +sign_text = front_plane * Text(TEXT, font_size=FONT_SIZE, font_path=FONT, align=(Align.CENTER, Align.CENTER)) +if EXTRUDE_TEXT: + sign += extrude(sign_text, amount=TEXT_THICKNESS) +else: + sign -= extrude(sign_text, amount=-TEXT_THICKNESS) + +if __name__ == "__main__": + show(sign) + export_stl(sign, "./sign.stl") + diff --git a/tripod-chair-foot.py b/tripod-chair-foot.py new file mode 100644 index 0000000..f5ecd0a --- /dev/null +++ b/tripod-chair-foot.py @@ -0,0 +1,39 @@ +from build123d import * +from ocp_vscode import show +import math + +FOOT_WIDTH=35 +FOOT_HEIGHT=45 +FOOT_THICKNESS=3 + +WALL_LENGTH = 30 +WALL_THICKNESS = 4 +WALL_ID = 19.2 # 0.75" ID * 25.4 mm/in = 19.05mm +WALL_ANGLE=45 # degrees +WALL_Y_NORMAL = math.sin(math.radians(WALL_ANGLE)) +WALL_Z_NORMAL = math.cos(math.radians(WALL_ANGLE)) + +origin = Pos(0, 0, 0) +wall_center = Pos(0,3,0) + +foot_sketch = Plane.XY * origin * Ellipse(x_radius=FOOT_WIDTH/2, y_radius=FOOT_HEIGHT/2, rotation=0) + +foot = Plane.XY * wall_center * Rot(WALL_ANGLE, 0, 0) * extrude(Circle(WALL_ID/2 + WALL_THICKNESS/2), WALL_LENGTH) +foot += Plane.XY * wall_center * Rot(WALL_ANGLE, 0, 0) * extrude(Circle(WALL_ID/2 + WALL_THICKNESS/2), WALL_LENGTH, dir=(0,0,-1)) +foot -= Plane.XY * wall_center * Rot(WALL_ANGLE, 0, 0) * extrude(Circle(WALL_ID/2), WALL_LENGTH) +foot -= Plane.XY * wall_center * Rot(WALL_ANGLE, 0, 0) * extrude(Circle(WALL_ID/2), WALL_LENGTH, dir=(0,0,-1)) +foot += extrude(foot_sketch, FOOT_THICKNESS) +foot -= Plane.XY * extrude(Rectangle(FOOT_WIDTH*5, FOOT_HEIGHT*5), WALL_LENGTH*5, dir=(0,0,-1)) + +# wall_plane = Plane(origin=foot.center(), z_dir=(0, -WALL_Y_NORMAL, WALL_Z_NORMAL)) + + + +# foot += extrude(Ellipse(WIDTH/2, HEIGHT/2, 0), THICKNESS) +# plane = Plane(origin=foot.center(), z_dir=(0, -1, 1)) +# foot += plane * extrude(Circle(5), 20) +# foot -= plane * extrude(Circle(3), 20) + +if __name__ == "__main__": + show(foot) + export_stl(foot, "./tripod_chair_foot.stl") \ No newline at end of file