Hole Wizard #7543
Replies: 9 comments 34 replies
-
|
As described by @nickmccleery
Example youtube video from @jamwaffles: https://www.youtube.com/watch?v=ObLRU6Ouyl0 This likely require work from:
|
Beta Was this translation helpful? Give feedback.
-
|
Alongside the MasterCAM video above, here are a couple of UI examples for inspiration. First from Fusion (pretty clean): And FreeCAD (typically obtuse OSS software UI 😁): The FreeCAD Wiki page has some decent behavioural descriptions but I think whatever we do, we should be involving a MechE (even myself if you want someone who cosplays as one) in the final feature design. |
Beta Was this translation helpful? Give feedback.
-
|
Redacted: original comment copied from #7633 was moved to the top post as source of truth. |
Beta Was this translation helpful? Give feedback.
-
|
@adamchalmers Re:
I think this is a great breakdown. Once we agree on this I'll probably create dedicated discussions for Phase 2 and Phase 3. |
Beta Was this translation helpful? Give feedback.
-
This is kind of a new category of things for ZMA - having a distinguished module for things. It's not a very scalable or customisable solution though - it doesn't allow the user to have multiple modules for holes, or holes in a sub-module if we support them in the future, or to have a holes file called something else (perhaps there is a naming convention in their project which doesn't work here). It also doesn't allow easy merging of projects or parts of projects. I'm not sure what exactly a hole is in KCL yet, but assuming it's a function or type, they could be annotated with an attribute, e.g., |
Beta Was this translation helpful? Give feedback.
-
There is a plan for external libraries, but I'm not sure how it should be prioritised. At the moment, I've got it very much a lower priority than the sketch mode changes, so that's probably a 6-12 month timescale. If we want this done sooner for the holes work or otherwise, please let me know! |
Beta Was this translation helpful? Give feedback.
-
|
Do we ever need the |
Beta Was this translation helpful? Give feedback.
-
|
This has kind of turned into a future features wishlist so apologies for that, but I thought I'd post this list anyway in case it's useful.
|
Beta Was this translation helpful? Give feedback.
-
|
Just to add more colour here, mostly on nomenclature: DrillsISO 5419 (this too) refers to the drill tip angle specifically as Fusion's naming system adopts Countersinks, Counterbores, and CounterdrillsI don't think it makes sense for a hole to have a 'top'. Existing CAD/CAM tools adopt the following:
See:
ExtensionHole 'body' also sounds a bit odd to me. I think that should be something like depth, distance, or extension. Existing tools adopt the following:
RecommendationsI think we should modify the way
I have a weak preference for the bottom related parameterisation changing to match the ISO standard, so |
Beta Was this translation helpful? Give feedback.










Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Milestone for issue tracking: https://github.com/KittyCAD/modeling-app/milestone/13
Milestone contributors: @adamchalmers @pierremtb
Mechanical engineers work with holes, and ZDS needs first-class support for them. It's possible to design holes yourself right now from KCL primitives (e.g. revolving a profile, then subtracting it from a solid), but we should provide users with higher-level functions that are easier to use.
Requirements
We will add several new KCL functions to easily create holes. A new UI, the hole wizard, will let point-and-click users fill in the parameters for these functions, and when users press OK in the wizard, it'll update their KCL and insert calls to them.
1. A hole wizard UI element that lets users choose what their hole looks like
holes.kclin the top level dir of the project, and the wizard will check for this file and load its holes for users to choose from.2. Hole functions in KCL, which the wizard calls into
See below for details
3. Holes can have three parts, which can all be selected independently:
4. We will provide a library of standard holes
Out of scope
API
The API for this project is just the KCL type signatures. This is what the frontend will need to instantiate, and what the KCL team will implement.
Hole functions
A hole is defined by 3 things:
I'm not sure if these are the right terms, so please feel free to suggest alternative names.
A hole is simply a choice for each of these.
Here's the parameters we will support for countersink and counterbore:
The KCL for these is defined as:
/// --------- /// Tops /// --------- /// Angular area fn countersink( /// E.g. 82 degrees for American inch screws, or 90 for ISO metric screws. angle: number(Angle), /// The outer diameter, as the inner diameter is defined by the hole body. diameter: number(Length), /// Chamfer the bottom of the counterbore where it meets the rest of the hole chamfer: number(Length), ): HoleTop {} /// Straight down area fn counterbore( diameter: number(Length), depth: number(Length), ): HoleTop {} /// No top feature, straight into the hole. fn normalTop(): HoleTop {} /// --------- /// Bodies /// --------- fn blind(length: number(Length), diameter: number(Length): HoleBody {} /// --------- /// Bottoms /// --------- fn drilled(tipAngle: number(Angle)): HoleBottom {} fn flat(): HoleBottom {} /// --------- /// Placing holes /// --------- /// Convenient type alias type HoleProfile = Sketch /// Defines a hole, but doesn't actually cut it from anything. /// You can either use it with the functions below, or with `revolve() |> subtract()` fn holeProfile(top, middle, bottom): HoleProfile {} /// Using a defined hole, cuts it into a solid. /// Return the modified solid. /// Roughly equivalent to taking the hole profile, revolving it 360 degrees, and subtracting from a solid. fn hole(@solid, face, holeProfile, cutAt: Point2d): Solid {} /// Like `hole` but takes multiple holes, probably the output of a pattern. /// Roughly equivalent to taking the patterned array of profiles, revolving each 360 degrees, and subtracting them from the solid. /// `cutAt` is the first hole in the pattern. fn holes(@solid, face, holeProfiles: [Profile; 1+], cutAt: Point2d): Solid {}Here are some examples of using this library.
We will also publish a KCL library with choices for these. For example, here's how we would define the
Qscrew from theAcmestandard.This KCL library will be published as a second-party library, i.e. maintained by Zoo but not in the standard library. It'll be available for all users, but this way we can change its details later.
Delivery plan:
holes.kclper-project.Beta Was this translation helpful? Give feedback.
All reactions