1
0
Fork 0

add cad shootout
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Hamcha 2023-09-11 17:02:41 +02:00
parent 2a968e826e
commit 4a65520db6
Signed by: hamcha
GPG key ID: 1669C533B8CF6D89
20 changed files with 281 additions and 74 deletions

View file

@ -1,69 +0,0 @@
---
title: "Thoughts on /tg/station roles"
date: 2022-06-27T17:02:09+02:00
draft: true
---
This is a long winded post full of personal rants, if you want the short version:
{{< tldr >}}
I think Viro and Geneticists are bad roles as they should be reworked from the ground up to be less isolated and less "click on window and hope the RNG doesn't hate you"
{{< /tldr >}}
Do you have no clue what that was about? Cool, keep reading!
<!--more-->
## PREFACE: Space Station 13
_TODO: EXPLAIN SS13 IN A PARAGRAPH SOMEHOW_
### PREFACE act 2: /tg/station is a game design trial by fire
SS13 is an incredibly complex game, providing emergent gameplay in a multiplayer settings with constant changes and many communities testing different things.
With the same people playing for upwards of decades with very fast iterations (the average round on my preferred /tg/station server is ~45 minutes), players will generally react strongly to changes and when given the opportunity and test the limit of every new mechanic as soon as it is introduced.
Any new design has to account for weird interactions with the existing 9999 systems, exploits that might be found, [playerbase anger](https://hackmd.io/@tgstation/HJCoL8MUw#Ethical-and-Moral-Considerations-to-Avoid-Angering-Players) and cannot rely on secrets as the code is public.
I believe this to be an incredibly tricky environment but with opportunity to foster truly unique experiences. For coders, Space Station 13 is an incredible sandbox in which you can sneak your passions for everyone to poke at. For players, mechanics can be something to explore, just pass the time or can even become a story device.
## The roles
_TODO_
### Note on personal experience and role omissions
_TODO_
### Function vs Roleplay
_TODO_
### What makes a good functional role
_TODO_
### Good functional roles
_TODO_
#### Chemist
_TODO_
#### Engineering (Station engineer, Atmos Tech)
_TODO_
### Bad functional roles
_TODO_
### How RP level affects roles
_TODO_
## Closing notes
_TODO_

View file

@ -0,0 +1,156 @@
---
title: "Hobby CAD shootout: Onshape"
date: 2023-09-11T17:00:00+02:00
toc: true
---
{{< tldr >}}
This article explores Onshape for hobbyst use.
Onshape is an incredible application that is both powerful and intuitive.
The free tier gives you everything, provided you are ok with the non-commercial and non-private constraints however performance gets really sketchy with complex designs and the pricing is steep.
{{< /tldr >}}
Hello, I am a generic nobody armed with a caliper and a 3D printer!
One of the most common dilemmas I and others like me face is finding the perfect software to make our designs. Everyone seems to default to Fusion360 these days, but I personally have stuck with Onshape for the last 5+ years and had a blast. But what is the best tool and what is the most sustainable one?
## The problem of "free"
Both Onshape and Fusion360 are freeware/free to use software, but they are not "FOSS". The current Internet climate is one of ever-increasing [enshittification](https://www.wired.com/story/tiktok-platforms-cory-doctorow/). Both Onshape and Fusion360 have gotten worse over the past few years, from Fusion360 [removing local simulations](https://hackaday.com/2022/08/12/local-simulation-feature-to-be-removed-from-all-autodesk-fusion-360-versions/) to force people to pay "cloud tokens" and generally [restricting features](https://hackaday.com/2020/09/16/autodesk-announces-major-changes-to-fusion-360-personal-use-license-terms/) in the personal use license to Onshape tightening their "non-commercial" definition to [cut out content creators](https://www.youtube.com/watch?v=S9hmi1leU2s).
While they are still perfectly functional tools today the outlook is bleak and I would not want to rely on them.
Thankfully these two are not the only options in the CAD landscape. In this series of posts I will try to explore every CAD software I can get my hands on, from FOSS tools like FreeCAD and Solvespace to other "freeware" options like DesignSpark Mechanical to maybe affordable options like Alibre.
This article explores Onshape as it's the tool I'm most familiar with.
## Onshape
I know this is the first software I look at but Onshape is an outlier in the CAD world, being a web-app you use through your browser instead of an installable native application. This in itself has pros and cons worth considering, though one of the biggest advantages is clearly OS choice: no proprietary CAD tool that I know of runs on Linux.
I have seen Onshape chug with more complex parts and especially when dealing with assemblies. I'm tentatively blaming it on being a web app though WebGL performance is pretty competitive these days, so who knows.
### The most intuitive UI
Onshape is probably the CAD package with the most intuitive UI I've seen. I have no professional or educational background when it comes to CAD, so I had to learn everything from scratch for this. I tried Fusion360 first because my 3D printing friend told me suggested it to me and was completely lost in its intricate workings and Onshape just felt natural in contrast.
I don't have much insight on the onboarding experience since it's been too long for me to remember if I used any of their learning materials or if I just played around in the UI.
For what it's worth, Onshape was created by ex-Solidworks engineers (including the legendary Jon Hirschtick) and its UI does seem to try to look like Solidworks (but not much, in the same way that FreeCAD looks like CATIA).
### Dark Mode
There is no officially supported dark mode, but being a browser app you can use browser extensions to inject custom CSS. [Dark Reader](https://darkreader.org/) works fine but there are many weird gotchas like material colors and the shading being inverted (shadows are bright and reflections are dark, etc.)
DaviDokuro made a userscript that adds enough CSS to have a proper Dark mode ([DaviDokuro/Unofficial-Onshape-Dark-Theme](https://github.com/DaviDokuro/Unofficial-Onshape-Dark-Theme)). I modified it somewhat to fix some stuff, so also check out [my version](https://gist.github.com/Hamcha/690e1be79aa72816566b8e5364ab6e3f).
This is what it looks like:
![Onshape UI with the unofficial dark theme](/media/onshape/onshape-dark.png)
Even thought it doesn't look great and sexy I have been using it and will use it for the examples shown below, so apologies if you're a light mode fan but at least you won't get flashbanged.
### Unsettling pricing
Onshape's pricing is very high. I would generally not care that much for something priced at professionals but Onshape is by far the most restrictive when it comes to what you can actually do with your free-tier outputs. You're not allowed to have private documents or profit froma *any* use of the software, even if it's unrelated to the actual parts.
The cheapest tier that allows you to commercialize your designs is $1,500/year (per user). This is prohibitively expensive for anyone who might want to just get their hobby project off the floor.
There are programs for [creators](https://www.onshape.com/en/programs/creator) and [startups](https://www.onshape.com/en/programs/entrepreneur) but I couldn't find accounts from people who are enrolled and their contact us form is a privacy nightmare ([with a broad selection of topics](https://gayrobot.club/media/5d9f7f8e-036f-43f5-bb7e-dcc7e6906a5c/image.png)) without a direct email to reach out.
I would not even consider using Onshape if I wanted to make anything to sell.
## The trials
I will try to explore as much as possible what I can achieve with these tools within my capabilities and needs. I am aware that I cannot use every feature but I hope that my "trials" will give a decent impression of what someone like me could get out of these tools.
My trials will be as follows:
- The "Test drive" will be a part from [TooTallToby](https://www.youtube.com/@TooTallToby)'s excellent repertoire of modeling practice.
- One or more "Real world part" in which I will try to model something I would print and use
- An overview of the assembly capabilities, where available.
- An overview of the exporting options for parts.
- Making a drawing for a part
- Explore non-3D-printing options to the best of my abilities like CAM and sheet metal, where available. I have no experience in other types of manufacturing so this will mostly test how idiot-proof the options are.
### Test drive: TooTallToby-11-01
I'm not a speedmodeller but I could get this done easily, check my video here for the workflow:
{{< rawhtml >}}
<video controls width='100%'>
<source src="/media/onshape/tootall.webm" type='video/webm; codecs=av01.0.05M.08' />
<source src="/media/onshape/tootall.mp4" type='video/mp4; codecs="avc1.4D401E"' />
</video>
{{< /rawhtml >}}
Keep in mind that there are a lot of tools that I didn't exploit properly (like the Trim tool) and generally I'm not a power user of CAD software (only know a handful of shortcuts) but I don't think I have ever struggled enough to have to Google something when making a part.
### Real world part: SATA SSD enclosure
I like taking SATA SSDs out of their housing and giving them a smaller one. You see, most cheap SATA SSDs nowadays only take a small part of the SATA 2.5" enclosure:
![BX500 outside of its plastic enclosure](/media/onshape/smol.png)
I like using these as powered up pendrives to bring around, so I usually try to come up with a less space wasting, more quirky enclosure... let's make one!
I won't bore you with another video, here's what I came up with:
![The enclosure project in Onshape](/media/onshape/enclosure.png)
This model tests some of my most common gotchas in CAD software: Heavy sketch reuse and cross referencing and dealing with multiple parts. Onshape makes it incredibly easy and painless and I only realized how tricky this tend to be when doing it in other tools.
Thanks to the ability to export in .STEP, we can observe that the model has very smooth fillets in PrusaSlicer:
![The enclosure project in PrusaSlicer](/media/onshape/edge.png)
### Making drawings
There is a built-in drawing workspace and you can just right-click into making a drawing for a part with some handy presets. As far as I can see there is no auto-dimension feature, so you'll have to put every dimension by hand (just click around, it's easy). Adding other angles and sections is very easy, though I wish there was some way for Onshape to tell me if I forgot a dimension somewhere.
Graphically speaking it seems to let you shuffle things around pretty well, I'm very glad I don't do this for a job because I assume something like this will get me fired instantly (note: this drawing has been altered to not be a flashbang, normal drawings are black on white).
![Drawing with altered colors of an enclosure](/media/onshape/drawing.png)
### Export options
Onshape supports a vast amount of export options for parts. For my purposes I've used STL, 3MF and STEP and have been happy with the output of all three.
Parts can also be exported in [Parasolid](https://en.wikipedia.org/wiki/Parasolid), [JT](https://en.wikipedia.org/wiki/JT_(visualization_format)) and a bunch other more CAD-y files. I only tried importing them in other packages and they seem fine at a glance, but never actually used them.
This helps alleviate the lock-in problem of the software, since many others lock down the export options for their free version.
### Assemblies
I love assemblies in Onshape even though I use them in a very basic way, basically modeling my components and having an assembly where I screw everything together to make sure everything lines up and I haven't missed anything egregious.
The most complex use of assemblies is actually from my very first use of Onshape back in 2017 when I was planning a mini combat robot (which sadly never went anywhere). I modeled most of the components and even set rotation hinges with:
{{< rawhtml >}}
<video controls width='100%'>
<source src="/media/onshape/robot.mp4" type='video/mp4; codecs="avc1.4D401E"' />
</video>
{{< /rawhtml >}}
### Sheet metal
I'll preface this by saying that I don't know the first thing about sheet metal design! However I'm very interested in learning to do sheet metal work via online services and Onshape makes it very easy to work with it. The flow is a bit weird and even though sheet metal parts share the same workspace as others, most of the tools will outright not work on sheet metal parts.
As an exercise to myself, I built the [TooTallToby-23-02-04](https://www.youtube.com/watch?v=roDPi5PXczc) practice model using the sheet metal tools and save for some technicalities on how flanges work, had an easy time:
![Sheet metal part designed in Onshape, with a flat view for the cutting and all the necessary bends](/media/onshape/sheet.png)
You might notice the table looks weird, that's because the dark theme CSS does not take them into account. I might revisit that later (or feel free to make patches yourself!)
I exported both DXF and STEP files and sent them to a laser cutting+bending service for a quote and their UI seems to understand them just fine, though I haven't ordered anything yet so I don't know if some operator will start throwing WTFs at me.
![Order form for the sheet metal part](/media/onshape/order.png)
## Conclusion: A great tool for hobbysts and professionals
Onshape sets a high bar for everyone else to reach. If you just need to learn CAD to design some pieces to print and mend whatever broke in your house, I don't think you can find anything more intuitive to learn while still allowing you to go into other avenues of manufacturing if your interests ever grow outside 3D printed gizmos.
If you work in a large company or can afford the paid tier, it's probably also pretty good there. I haven't touched any of Onshape's own selling points like real-time collaboration or the many integrations via plugins since they really don't fit my scenario at all, but they might interest you.
If you're looking for something to start your maker career selling projects on tindie though, I think save making an inquiry for their startup plan you'll best be looking elsewhere.
Next up I'll explore some of the FOSS options that come with no strings attached, as long as you don't mind a considerable amount of compromises.

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Binary file not shown.

View file

@ -1,5 +1,9 @@
$footer-border: 1px dotted $color-light-border; $footer-border: 1px dotted $color-light-border;
:root {
--link-color: #e599e0;
}
footer { footer {
border-top: $footer-border; border-top: $footer-border;
padding: 10pt 0; padding: 10pt 0;
@ -43,7 +47,14 @@ main {
a, a,
a:visited { a:visited {
color: #e599e0; color: var(--link-color);
text-decoration-style: dotted;
text-decoration-thickness: 1px;
}
a:hover {
text-decoration: none;
background-color: var(--link-color);
color: black;
} }
hr { hr {
@ -79,3 +90,33 @@ a.summary {
font-weight: 400; font-weight: 400;
font-size: 10pt; font-size: 10pt;
} }
.lightbox {
display: none;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 999;
width: 100vw;
height: 100vh;
background: rgba(0, 0, 0, 0.8);
img {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
max-width: 100%;
max-height: 90vh;
}
&:target {
outline: none;
display: block;
}
&:hover {
background: rgba(0, 0, 0, 0.8);
}
}

View file

@ -4,15 +4,21 @@ $tldr-label-color: #fff696;
$table-bg: lighten($color-bg, 2%); $table-bg: lighten($color-bg, 2%);
$table-bg-alt: lighten($table-bg, 2%); $table-bg-alt: lighten($table-bg, 2%);
$table-border-color: $color-very-light-border; $table-border-color: $color-very-light-border;
$toc-border: 1px solid #333;
$toc-color: #d1e3e8;
$toc-label-color: #96ccff;
$caption-color: #bfb1bf;
.meta { .meta {
font-family: $iosevka; font-family: $iosevka;
font-size: $text-small; font-size: $text-small;
} }
.tldr { .tldr,
.toc {
border: $tldr-border; border: $tldr-border;
padding: 5pt 10pt; padding: 5pt 10pt;
margin-top: 14pt;
padding-top: 11pt; padding-top: 11pt;
font-family: $iosevka; font-family: $iosevka;
position: relative; position: relative;
@ -57,4 +63,57 @@ $table-border-color: $color-very-light-border;
font-family: $iosevka; font-family: $iosevka;
} }
} }
figure {
margin: 0;
padding-top: 1rem;
}
figure a,
figure a:visited,
figure a:hover {
background: none;
}
figure img {
max-width: 100%;
}
figcaption p {
text-align: center;
font-style: italic;
padding-left: 5pt;
color: $caption-color;
margin-top: 0;
}
}
.toc {
--link-color: #f591e6;
&:before {
color: $toc-label-color;
content: "Table of contents";
border: $toc-border;
background-color: $color-bg;
}
ul {
margin: 0;
padding-left: 0;
list-style-type: none;
}
ul li::before {
content: "├─ ";
font-family: "Courier", monospace;
}
ul li:last-child::before {
content: "└─ ";
}
ul li ul li::before {
content: "│ ├─ ";
}
ul li ul li:last-child::before {
content: "│ └─ ";
}
ul li ul li a {
--link-color: #a991f5;
}
ul li:last-child ul li:last-child::before {
content: " └─ ";
}
} }

View file

@ -0,0 +1,15 @@
<figure width="100%">
<a href="#{{ .Destination | md5 }}-lightbox"
><img src="{{ .Destination | safeURL }}" alt="{{ .PlainText }}"
/></a>
<figcaption>
{{ if .Title }}
<p>{{ .Title | markdownify }}</p>
{{ else if .Text }}
<p>{{ .Text }}</p>
{{ end }}
</figcaption>
</figure>
<a href="#_" class="lightbox" id="{{ .Destination | md5 }}-lightbox">
<img src="{{ .Destination | safeURL }}" alt="{{ .PlainText }}" />
</a>

View file

@ -4,4 +4,8 @@
Published on {{.Date | time.Format "2006-01-02" }} {{ if (gt .Lastmod .Date) Published on {{.Date | time.Format "2006-01-02" }} {{ if (gt .Lastmod .Date)
}}| Last modified on {{.Lastmod | time.Format "2006-01-02" }} {{ end }} }}| Last modified on {{.Lastmod | time.Format "2006-01-02" }} {{ end }}
</section> </section>
{{ .Content }} {{ end }} {{ if .Params.toc }}
<div class="toc">
<aside>{{ .TableOfContents }}</aside>
</div>
{{ end }} {{ .Content }} {{ end }}

View file

@ -0,0 +1 @@
{{.Inner}}

View file

@ -1 +1 @@
<div class="tldr">{{.Inner}}</div> <div class="tldr">{{.Inner|markdownify}}</div>