KSP-RO / ProceduralParts

A continuation of StretchySRBs, which is a continuation of StretchyTanks
71 stars 79 forks source link

Config option request (Custom Curves). #249

Closed Katniss218 closed 3 years ago

Katniss218 commented 4 years ago

Would it be feasible to allow the user to define custom curves for "smooth cone" type of part?

Because I find the current options (predefined set of shapes) quite limiting in what I can do with them.

The new system could work something like this: Imgur

The left side is the center of the part, the right side is the edge (distance defined as "max distance") With the player being able to drag these nodes (or add/remove nodes with a button).

Swamp-Ig commented 4 years ago

It would be possible, but someone would need to code it up. Coding the UI would require a fair bit of work.

Katniss218 commented 4 years ago

It would be possible, but someone would need to code it up. Coding the UI would require a fair bit of work.

The UI could be simplified to something like the current Procedural Fairings manual nose shape. With slider for number of cuts, and separate sliders for position & radius of the specific cut. Also could use the new grouping features (similarly to how ProcParts settings can be collapsed) for ease of use.

Swamp-Ig commented 4 years ago

It could, of course. It's all doable. It would need someone to do some work coding it up though which is more what the issue is.

I don't think an awful lot of new stuff has been done with the project since I worked on it back in I think 2015 or earlier. I've moved on to other stuff now so it won't be me doing the work.

Feel free to contribute if you like. I've got a heap of other ideas for stuff you could do if you had time to do it. I don't though, and I'm not sure that there's anyone else doing it.

DRVeyl commented 4 years ago

I've done a bit of a rework in my branch, mainly that brings in Textures Unlimited support while still allowing the existing texture method, and internally cleans up the AttachNode handling and shifts things to make use of the UIControl callbacks instead of constantly detecting changes in Update(). It has been testing pretty successfully and I think will merge in and release as 1.3.19.1 (for 1.7.3) and 2.0 (for 1.8+)

I responded on the Discord that I don't see work just to reduce part count being particularly useful here, but one point I agree on is with the bezier curves, making some changes to allow user-specified control points instead of only the pre-configured ones that are set in code.

Swamp-Ig commented 4 years ago

There's code in there to do bezier surface of revolution. I didn't put in custom curves because of the UI coding required. One the UI is there, if I remember correctly the bezier surfaces will just drop out.

DRVeyl commented 4 years ago

Your memory is correct. :)

raulpalominojugon commented 4 years ago

to simplify UI work, it could be just repeatable pairs of "length" and "ofset". so if you have a cone tank with 0m upper diameter and 1.25m lower diameter, and set custom curves to: length:0.4 ofset:0.3 length: 1 ofset:0.7 it will make an initial cone 0.4m tall and 0.3m base, followed by another section 1m tall, with upper diameter 0.3 and lower diameter 1m (initial + 0.7), and from there till the end of the tank growing up to 1.25m

Swamp-Ig commented 4 years ago

The UI also needs the tangent angle for the curve, and the weight, so it's not that simple.

The code is based on bezier curves. I think the available shapes are curves that are single segment beziers, with the idea being that that the set available was adequate for whatever you wanted if you joined a few parts together.

If you were going to throw work at it, maybe it would be better to have different extrude shapes. Then you can do procedural aircraft fuselages. Adapters between extrude shapes are much harder, you have to figure out the maths to mesh them and I'm not sure there's actually a general solution.

DRVeyl commented 3 years ago

Tacking onto a todo list. Completely custom curve: not really interested at this time. But simple PAW-based UI to individually manipulate the 4 bezier control points, while retaining the PAW selection through configurable options, and making those options MM-patchable I think is straight-forward enough to put some effort into.

DRVeyl commented 3 years ago

Customizing the 4 bezier control points is implemented in 2b6e3ebebbfbe4c7b0fd6ef4444570857398f698 Going to close this issue here, and leave more advanced topics like customizable extrude shapes for some other folks that are interested in contributing. There are some other Issues to track for other shape ideas.