Welcome to the Onshape forum! Ask questions and join in the discussions about everything Onshape.
First time visiting? Here are some places to start:- Looking for a certain topic? Check out the categories filter or use Search (upper right).
- Need support? Ask a question to our Community Support category.
- Please submit support tickets for bugs but you can request improvements in the Product Feedback category.
- Be respectful, on topic and if you see a problem, Flag it.
If you would like to contact our Community Manager personally, feel free to send a private message or an email.
Comments
@NeilCooke @GregBrown
How will this new routing curve interact with the Cable/Wire Routing features in development? It seems like there are useful innovations in each of them, but the ideas haven't been harmonized. Will they stay fully separate or will some of the ideas get cross-pollinated?
Bill - there are a couple of questions I have on your post, but let me do them in snippets:
-When picking an edge, you need to change the direction. It shouldn't always go from 0→1 sometimes it goes from 1→0.
Are you implying that you want to see the direction of the curve?
Bill, you mentioned:
-change "override bend radius" to "add bend radius" it's more obvious.
We have a parameter for the curve's default Bend radius (set up the top of the UI, default value = 0) so therefore at each individual point you would override (or accept the default by doing nothing.) "Add" would not be strictly accurate, but I get your point…
I was waiting until the devs land on a solution first before I look into integrating the same functions in wiring :)
@GregBrown
"override bend radius" I had no idea what that meant until I picked a vertex and was pleased when it added an arc. I'm not buried in the code, but from a users perspective, you're adding a arc. Now that I know, I don't really care what it's called.
Curve direction, I ran into this problem when I wrote fit spline, yes you have to change the curve direction. I put in an enhancement request to give us a function "curve direction", I don't think it's been added. So, yes, please add a direction icon so you can go from 1 → 0 vs 0 → 1. It's not going to work if you don't. In fit spline, I looked at the distance between between the last vertex and the curve's end points and chose the shortest distance. I figured the shortest distance was always the correct choice. I made the decision for you and it seemed correct in my use cases. I do believe that a direction icon is better when adding nodes along a curve.
I spent most of yesterday using my plumbing router and I become frustrated. I wrote it and I still don't get it. Sometimes you want the route to be from this point to that point and other times you want it to be constrained to a plane. These are 2 different approaches for creating a plumbing route.
I'm now thinking your router is a polyline generator and mine is a very specific use case. I do believe you should add some referencing to your curves/routes but not to the level that I'm trying to constrain a route. Please keep the spirit of parametric modeling a live.
Yesterday I found success constraining geometries outside my route script and then referencing this constrained geometry to constrain my route. The whole plumbing thing is becoming more of a process than a single script.
In the beginning, the idea was to create a trajectory though space and then hang plumbing bits on it. It'd be nice to have the trajectory update when equipment moved around. I still don't have this working correctly.
I did start assembling the plumbing bits using mate connectors in an assembly and found it was pretty easy to do. My mate folder is massive and I never open it up. It's not slowing down even though plumbing routes are stacking 1000's of mates. You can add degrees of freedom to stack like rotates and slides and achieve the flexibility needed to build a parametric plumbing route. The question now is how do you manage 1,000's of mates? It's definitely a process.
Routes are still important because when you begin laying out a large plumbing assembly you have to understand where everything is going. Getting a route to create a proper plumbing trajectory just isn't working. I believe a proper route will need a huge matrix stack of constraints/DOF's and then inverse kinematics to solve the from/to issue. I'm not sure constraining using mate connectors in a feature script will ever give us what we need.
For plumbing drain lines, I imaging that having a consistent slope down which stays at that minimum angle regardless of the run is essential. How would that be accomplished with the routing curve? It’s easy to make a point lower than another point by a fixed amount, but not a slope, unless I’m missing something.
I was very excited to read '3D Curve Creation' in the title. But, honestly, it isn't what I was hoping for. I can see a really powerful feature, and although I understand it, it feels too complex and mathematical. A very good custom feature for those looking for this kind of complexity, but it doesn't feel like a native Onshape feature to me.
I am still hoping for a SW-like 3D sketch in Onshape-sauce, where you can just sketch away intuitively in all directions using existing sketch tools and relations, without making numerous fixed planes that limit how you can dynamically adjust the shape. Is there still any hope for something like this?
First of all thanks for developing new curve creation idea, I dig it. First I learned about it was last Wednesday and I tested it during the week. I believe some of my feedback was already shared with you via different channel, but I'll post something here as well, so it's in one place. :)
I do look on Control point curve as an improved Bridging curve (or Beziér in 2D) and Routing curve is somewhat similar to 3D Fit Spline (or Spline in 2D). I won't touch the plumbing capabilities and creating of Polyline since I don't find them useful for my applications. On the other hand I'm not saying it's not worth having them there - I believe there are a lot of people, who find them useful.
1. UI is really complex and messy, but it's first draft, so I won't be so critical about it, just mentioning it.
2. I don't like the idea of Swiss knife feature. It's nice it can do various things, but I don't think the end result would be so great. It would make much more sense to divide it into few features, which UI is beefed up to become simple, direct and easy to use.
2a. Currently you first need to rebuild (or build from Vertexes) a curve, after that you can make some changes. If you decide the input should be different, all the changes done in the same feature, at the same time are simply lost and you need to start over. That doesn't sound good. I would prefer having one feature for build or rebuild curve, setting some basic values as degree + span and start/end tangency.
2b. I don't think it's useful to select number of points. If you typed in degree 5, you have 6 CVs, not 4, not 7, just n+1. Also I don't know why we're adding extra CVs for start/end tangency - why don't we use the existing generated point and move it to 3D space, where the it keeps the tangency? There seems to be two inputs in collision - one tries to follow the shape of input curve, another one tries to keep position of CVs proportional. And on top of that we add (optional) 2 CVs for start/end tangency.
3. It would be nice to see different type of triad manipulator as an option for CV movement. Having option to select more points to move (as mentioned earlier) would be also nice. Sometimes you want to add some weight to mid CV, add one from each direction and move them together with different weight movement.
3a. Speaking of triad manipulator, I really liked the way Alias moves CVs. The ability is expanded more when you change shape of surface using different hulls. Feel free to check whole video, but from 5:00 there's quick showcase: https://youtu.be/j-TTBF-yj-0?feature=shared&t=300
4. Make piecewise Beziers - looks like it creates multi-span curve. On one side, there's nothing wrong with them, on the other I prefer simple single span curves with degree 5 for example. Is there a way to change the position of edit points in between the spans? I haven't find it.
5. Knots - what to do with them? There's no editing option, will there be any? Can we change the magnitude from one side? And in the end - do we need to change that? Can't we just rely on the math and move the control points (or edit points for Routing curve)?
In the end, I still need to do some testing and dig into it even more. But I definitely see it as rebuilding feature for curves, which are created in a horrible way or have huge amount of edit points and terrible overall curvature.
I'm looking forward for new updates. :)
Josef,
Thanks for the detailed feedback. I look forward to more comments should you get to spend more time in the feature…
I will address a couple of the issues now, and maybe hold off on some of the others, in case you need to add/edit/clarify your original points.
2b. Maybe you are comparing the workflow to Alias, but I'm not following "I don't think it's useful to select number of points." If you are starting from scratch you can specify the degree (e.g. 5) and then begin to add CPs. If you add 6 then you'l have your single span curve, but if you add more then you'll still have your deg 5 curve but it will be 2 spans, and so on.
"Also I don't know why we're adding extra CVs for start/end tangency" - which workflow are you using to do this? For a basic single span deg 5 curve you will need the 6 CPs, no extras required or indeed added. Ahh, I think you are referring to the Approximation options where there is a boolean option to Keep start/end derivative? If you fix the max number of CPs to n+1 and use a reasonable tolerance then you can achieve a single span curve… depending of course on the source edge you Processed as input.
4. The piecewise Beziers option is (only) useful when you have a deg-n multi-span curve that you would prefer is output as a series of piecewise Beziers each at degree-n. If you compare the results, you'll find the shapes are identical (of course) but for the piecewise case you will have separate edges each at deg-n. The "Curve" body contains all these edges, but they are indeed separately selectable.
5. The knots option offers two things: first there is a button to make the knot vector uniform should this be required. Secondly, the knot values themselves are visible as read-only. We could make these editable, but for the vast number of users*, controlling the shape of a curve by directly entering knot values is not practical or predictable. If this is a high priority request then sure, we can consider making this field editable.
*there are exceptions of course
Thanks for quick reply @GregBrown. I definitely need some more time and use cases to test it out much more. These were just some initial thoughts.
2b. I used Alias as an example, since i was very happy working in it while doing my master's thesis. But for the selection of number of CVs (or CPs). My initial workflow is to make nice, single span curve. If I can achieve it only with G1 on both sides (and the design is alright with it), I don't want to add additional CVs (well edit points), which may distort overall continuity. Bumping the degree to 5 or 7 is also not useful since G2 or G3 continuity is not needed for my application.
Let's see it in simple workflow. Assuming we have some curve, not so nice, but still somewhat simple and we want to improve its overall shape with good, smooth curvature. It would be wise to improve also position of CV and their flow, but that's another story. Current goal is to keep somewhat similar shape, but with smoother curvature. I'm using Control point curve since I like it more, will test the Routing curve as well, but I prefer CVs over EPs.
Base: sharp change of curvature can be improved, curve has some dent in shape, but let's say it's needed to maintain.
Option 1: keeping settings default, select curve and hit Proceed (probably first approach for light user). As a result we get Degree 3 and 27 Spans. That's a lot of spans, checking the curvature - we went from alright to worse. On the other hand, new curve is almost the same as the base one.
Option 2: Check Approximate spline edge, set Degree to 7, CP to 8. I kept tolerance default 0,01 mm. Result is same as input - Degree 7, but 1 span. Overall curvature is improved, there's no sharp change over edit points anymore. On the other hand, position and flow of CVs is terrible and can be improved, but as said earlier - that's a different story for now.
Option 3: Increasing number of control points to create multiple spans. Keeping degree 3, but bumping the CP to 6, we will get 3 span curve as the result. Choosing any lower number of CPs will result in different shape, which is not needed. Checking Make piecewise Beziers we can see where the edit points were created. Unfortunately since we don't have enough CPs, we cannot maintain nice G2 over edit points.
Seeing the results, using multi-span curve would probably make most sense. Using several, small degree curves is better than one with twice as much degree. On the other hand, there was still sharp G2 continuity between each segments. Let's add Option 4: We can improve it bumping degree value to 5, CPs remain 8 to create 3 span curve. Since there are extra CVs, we can achieve G3 like continuity between each span.
I definitely need to test it more, to see what works the best for each use case. Also working on this case, I kinda don't like my input curve will be removed from selection box each time I hit proceed. I figure it out at the end, but having to select the input over and over again after fiddling with numbers is not so good.
"Also I don't know why we're adding extra CVs for start/end tangency" - Yes, the Approximation options for start/end derivative. If the curve exists, or it's an edge of not so good surface, it is wise to keep tangent continuity to start and end position. Since we cannot change that later (only manually move the CVs), it would be wise to keep the tangency continuity unharmed while creating new curve. If the tolerance can fix this, I will test it out. For me (with default tolerance) it looked like those options will always add two more CVs. Thanks :)
4. I understand the result, it looks like Split curve in 3 segments, but not the same length. There's probably some math behind the position of edit points, but I don't see it currently. It can definitely be useful for some applications, but it has no use for me. On the other hand, keep it there, one never knows when it will be useful someday for him.
5. Understand, but if you cannot edit them (I really don't want to edit them), I fail to see the upside of seeing them. Making the knot vector uniform changes the position of some of them, aligning them differently for lower degree values. But I don't think I find it useful in my applications. On the other hand, someone might and will be happy to have this option. I'm neutral on this one.
Final thought for now. The tool is really complex and can yield very different result based on the knowledge of the user. I would definitely like to see some very, very simple tool for beginners. Just pick a curve, set start/end values, add tolerance for curve deviation and hit OK. Speaking of deviation - it would be great if we can measure it after the creation. I believe it can be programmed quickly, splitting the curve into several points, creating normal lines to input curve and measuring them. The end result could be displayed as a Dihedral analysis, but with change from tangent degrees to mm (or inch if you use them) values. I would definitely like to see that. Expanding the thought - measuring distance between surfaces can be done using the same tool as well - somewhat similar to Thickness analysis. But that's another story.
Sorry for long post.
@S1mon The plumbing under your sink is angled and driven by gravity. Our system runs at negative atmosphere with 4" & 6" diameter stainless steel tubes and we're fighting cavitation and pressure loses throughout the plumbing distribution. The problem with negative pressure systems is there's not much pressure differential to drive the desirable flow rates before you change to a gas and then when it changes back you destroy your system.
I've been trying to figure this out for a few months and I'm starting to believe a "route" won't constrain a path well enough to make it useful for my project. Constraining a 3d trajectory like it's a series of links is more along the lines to what I'm looking for and the reason why designing plumbing in an assembly is working for me. Oddly, inverse kinematics is a must because it'll re-solve the layout after a change.
I checked to see if parasolids has a built-in inverse kinematics solver and it doesn't, I checked feature script for a solver function but it doesn't exist, DCubed nope. A sketch has 2D linkage solver, but it's not good enough. I did check and node has a inverse kinematic solver which I could add to my server, package up a job, compute & send back via the API, while this this sounds like fun, I don't have the time. Theres nothing in a part studio that'll allow 3D linkage design let alone inverse kinematics. Maybe this is changing.
It's out of scope to ask for the current "route" to become a linkage design tool in the part studio space. It'd be nice though.
I'm realizing that I'll do all my plumbing in an assembly using it's linkage solvers, it's really good and easy to accomplish. It's weird to call them plumbing links, but that's what they are. I'll be able to build a project with predictable changes which will allow me to minimize and optimize the design easily.
I'm going to build a library of plumbing schematic components that I can drag into an assembly & build representations of routes (a schematic). Then I'll build the tubes.
Another update to the feature today…
When Approximating spline edges there is a option to Show deviation. A marker is added to the display as well as an information bubble.
Note: Depending on the curve it may add some regeneration time, so a tip is to turn that option off when you are done, rather than leaving it as part of the feature regeneration. (This is a necessary limitation while we are developing this in pure FeatureScript. It is something we'd be able likely be able revisit when the feature is a native tool)
@GregBrown
Some more thoughts on the Control point curve feature:
I made a simple example of projecting two degree 3 Béziers, and then using Control point curve to clean up the result. Unfortunately the approximation algorithm doesn't seem optimal. In this case I made the two input curves so that the control points are at matching X coordinates. I was able to use Control point curve to manually create a projection that is also degree-3, and seems to match the 30 span degree-3 projected curve perfectly. The process tool in Control point curve only matches a curve which is ~110 mm from end to end with about 1 mm of error. Even with a slightly higher degree, or with start/end derivatives turned on, it's frustrating how much better manually projecting the curves works. I would hope that building in an approximation tool into the Project curve feature could result in a more intelligent algorithm which would do a better job.
See document.
oh this is exciting! 3D Sketch in the making
@GregBrown would you please add variable control to coordinate positioning and make this parametric? Right now I can create a variable but after changing the variable the curve does not update.
Here's another example of projecting two curves, and then using Control point curve to manually rebuild the curve by projecting control points compared to using the automatic processing as it stands in Control point curve.
"Sketch top" is a degree 5 curve with some construction curves at one end to make sure it will mirror across the right plane with a G3 connection. It's normal to the right plane at that end. "Sketch right" is a degree 3 curve. "Sketch right - manual elevate" is a little bit of a guess at how to rebuild "Sketch right" in order to get the control points to map between the two projected curves. In other words, I'm going from a degree 3 to 5 and forcing the Y coordinates of the control points the same. It gets a little weird because "Sketch top" has two control points on top of each other if they're projected onto the right plane. There may be a better way to hack this.
The end result is that my manual projected curve (colored in blue) is a degree 5 which is almost identical to the standard projected curve, and the automatic processed version (red) has a deviation of 0.7mm on a 100mm long curve. You can also see the curvature combs of my manual and the standard Projected one are almost on top of each other, but the automatic one has serious issues with tangency and curvature.
All of this is to say that adding some smarter rebuilding/approximation algorithms built into some of the standard curve features might be better than just doing "processing" as part of the input to Control point curve.
Similarly, offset curves can be approximated much more accurately with purpose-built algorithms than with a general approach. Here I have a simple 2D sketch using a degree 3 Bézier ("Sketch base curve"). "Sketch sketcher offset" is using the standard offset tool within Sketcher which in this case creates a degree 3 curve with 10 spans.
Using Control point curve/Process on the sketcher offset to get a single span degree 3 results in a curve which doesn't have the correct tangents and the parameterization could be better.
Manually building an approximate offset ("Sketch 1") using a modified version of the Tiller and Hanson algorithm results in a single span degree 3 curve which has the correct tangency and the curvature combs are very close to the 10-span version that a Sketch offset creates.
Depending on the complexity and degree of the inputs, finding the right algorithm could certainly be more complicated, but for many situations, knowing more about your inputs is going to result in a smarter approximation.
So it says right there in the opening sentence routing will do "pipe routing". So…..
let's keep trying.
Here's an assembly with 2 tanks. There's also a route, library & variable tabs.
I'm in the route part studio and there's a from/to route already defined.
Editing the route , "add on drag", use #offset to create another point.
With "add on drag" we create another point in our route.
It's the 2nd point in the stack and we need to reference the last point by add another #offset to a reference to the last point.
In the assembly, drag the 2nd tank to another location.
Update the context.
This is really cool. Remove the diagonal.
Make it pretty.
Most of the plumbing bits will come into an assembly because they're all downloaded geometry. I just don't see doing plumbing routes inside a part studio for plumbing. Inside an assembly, the BOM is correct and you can keep track of the items to build your plumbing routes.
I don't think I'll hang parts on the route created above, but will just assemble them like before.
To me, this is more of a visual and worth building to maintain the plumbing. This is only one route, what if there's 40 routes? How do you handle the layout/schematic for a large project?
Once figuring a few things out, I like this a lot. I'm still playing around trying to figure out how to constrain routes.
Today's observations:
Polyline routes will lose their orthogonality quickly.
The fastest, maybe not the best, is to delete the violated vertex.
And then, do it again.
As much fun as this is to do, it's getting old.
What would be nice, an enhancement request, add an alignment constraint to a segment.
You know a segment is aligned to an axis, please just make it so. This would allow high level changes with predictable results.
awesome new features!
I started playing around with it a little bit.
TIP: Perhaps for a future explanation/video, showing the 'add point' option under segments for 'interpolated spline' in routing curve might be very useful. otherwise people will just add lines to the end of the track but won't know how to create an additional control point in between.
BUG: When I uncheck the 'add point on axis drag' checkmark, and start dragging, it continues to add points. Screen capture available upon request.
fun usecase:
https://cad.onshape.com/documents/bd7be0eed8222d8883d87406/w/206de415247c061ce4959c3c/e/b01c59d857f572fa2b834b21?renderMode=0&uiState=66d6da5e17ff872f8c5e4b93
Will be catching up on some of the recent comments shortly! Thanks for all the ongoing discussion - we're absorbing everything…
For now though we just pushed a quick update to allow multi-edges in the Control point curve reapproximation.
Yes the "add point" becomes an "insert point" - just select something internal to the curve to be current. I did capture a nice video of doing this to my exhaust manifold (to add an additional bend. But your marble track is a lot more fun!
Please send the screen capture of the "add points on axis drag" issue. Has it occurred at other times or in any other documents, or was it specific to one case?
It's exciting to see the multi-edge option in Control point curve, although I'm still seeing some frustrating behavior with this.
I have an "Apple Round" constructed with an arc and two bridging curves (degree 7 with G3 on each end). While it is piecewise, it is very clean.
When I process these edges, I can't get the ends to taper to zero curvature. I've played with a variety of degrees/spans and with the keep start/end derivative on and off. Some settings (degree 11) result in really bizarre CP zig-zags.The deviation arrow seems to be thrown off by the multiple input curves. I get all kinds of strange results.
@S1mon picking up after Mr. Jackson, I like it! I experienced a similar zig-zag effect with multi-edge selection too. Seemingly the apple corner curve is high degree and very smooth to begin with, I'm not sure what value added the CPC would be in situation like this. I haven't tried yet but, thinking it would make something nice out of a set of lines and or arcs. An easy button for those less sophisticated to make smooth geo correctly.
@Nick_Holzem Andrew Jackson and I have had some good chats about "Apple Rounds". It's a subject I've been reverse engineering for ~20 years. Using earlier versions of Solidworks I would use Fitspline with two lines and a piece of an arc with some gaps. With the right offsets, Solidworks would interpolate between the arc and the lines and do something like this (which has some funky curvature wobbles due to the degree-3 multispan nature of the Fitspline approximation):
Eventually Solidworks added better curves, and now of course in Onshape we have a great Bridging curve which now does G3.
In some cases when making this type of pseudo-round you want the pure arc in the middle, but in others, you want a nice single spline which approximates the transitions and the arc. It really depends on the goals and what downstream modeling you're doing.
In the longer term, I hope there are some more intelligent controls over approximating/rebuilding curves. Sometimes you want to smooth things out a bunch and follow some of the Alias Golden Rules, and other times you want to reproduce some input curve(s) in a tightly controlled fashion.
What's an applecurve?
Apple products typically have curves on the corners which are arc-like in the middle and then transition smoothly (G3) to the parts around them. Unlike a basic fillet, or even Onshape's curvature continuous fillet options, it's very difficult to discern where the round stops and starts. Even in the shaded image below, you can see a sharp line on either side of the plain round (lower in each image) where the curvature instantaneously transitions to the flats next to it. The zebras show the abrupt transition clearly. The zebras have positional continuity (G0) which shows that the surface is G1 (tangent), but that's it.
2D Views:
@S1mon: thanks for the link to the Alias Golden Rules. looking through them deepened my understanding of proper surface modeling!