LDraw.org Discussion Forums

Full Version: LDCad 1.6 suggestions/plans
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3 4
Hi all,

As the current 1.5 beta 2a version seems to be reasonably stable I decided to start work on the 1.6 version. I have a number of personal targets for this version, namely:

"must have's":
  • More scripting (macro's, model generation through script etc)
  • Allow hot key customization (this is also needed for my macro/script extension plans)
  • Region selection (2d/3d rectangle/circle)
  • Part bin group management / creation.
  • MSAA LDraw rendering (this actually already works, so I might include it in the definite 1.5 version too).

"nice to have":
  • POVRay animation export.
  • Blender animation export.

But I'm also open for any ideas / suggestions users might have so please don't hesitate to post some of yours in this thread.
I'd like to see:
- An OSX version.
- A more OS native "look and feel"

P.S.
It's been a bit since I used the flexible part feature, are fixed length bendable parts possible?
I personally would appreciate the following:

- In program GUI color editor.
- A simpler animation method.
- Instruction creation tool or wizard.
- Multi monitor support. (Editor screen on one screen, tools etc on another.)
I'd like to see scriptless animation. Something like SR3D Builder had. I understand that that would be probably quite difficult, but it's something that would be very nice, especially in combination with your own suggested blender export I can see myself trying to animate some Technic models.

This is a whishlist right? Wink
Orion Pobursky Wrote:It's been a bit since I used the flexible part feature, are fixed length bendable parts possible?
Yes but it is currently undocumented. It's done through the part's header dialog (press enter in its own editor while nothing is selected). There you'll find the 'length constrains' panel on the 'path' tabpage.

You can also limit the number of segments on the path skin it self to get the same effect. But the constrains method is meant to be used combined with BOM generation etc, although this isn't used at the moment.
Merlijn Wissink Wrote:I'd like to see scriptless animation. Something like SR3D Builder had. I understand that that would be probably quite difficult, but it's something that would be very nice, especially in combination with your own suggested blender export I can see myself trying to animate some Technic models.
You mean automatic kinetics? This is something I would like to implement some day, but as I'm not sure on how to do that yet I'm concentrating on the scripting api hoping it will become possible to write a kinetics solver through (thirdparty) scripts. This way you will be able to animating anything and not be limited to how much the hard coded solver 'understands' of it.
Maybe it has already been discussed. But what about Lsynth support for flexible parts.
What I don't like with current way of implementing flexible parts is that it generates the part using primitives, not using subparts as Lsynth do. Therefor I cannot make LGEO replacements for PovRay renders.
You can mimic LSynth behavior by using the 'static' or 'dynamic' placement methods for path skin. Using this combined with (un)official (sub)parts should behave almost the same as LSynth placement wise.

See any of the 'LQ' templates for an example.
I have another suggestion: being able to make a flexible net. I mean parts like these. I imagine something in the same way as current flexible parts, but with 4 end points (the 4 corners of the net) and points in the middle to make it a 'valley' shape or a 'hill' shape.

Ok, it might be quite difficult to make and it's probably a bit of a 'niche', but it would be nice to have nonetheless Wink
Hello Roland.

I've summarized what we have already discussed in (several) different threads:

* to be able to select a snap point (of any brick in the model) as the origin of coordinates
* for each brick (or brick group or submodel): to be able to select one of its snap points as the brick center
NOTE: I know we define snap objects, not points. That's a question how to deal with this. The idea behind is: to be able to select one antistud in the model, one stud on the brick and then connect them with a 'C' key. Another usage: mark a hinge snap point as the coordinates origin to be able to rotate the brick (or brick group or submodel) around this point.

* snapping while rotation: while turning the brick, adjust the rotation angle to snap (do not move the brick, only rotate) - useful for triangles etc.

* snapping for templates - for example Hose Rigid 3mm snapping with Clips or Minifig Hands, regardless how it is bent

* to be able to activate and deactivate 'used' snap objects. The idea is to select only from free studs (etc.) when putting new brick to the model. However, some snap objects are bigger and more bricks may be snapped on it, for example Technic Axle. That's why user needs to be able to activate and deactivate this limitation.

* support of buffer exchange and arrows editing: to be able to add and edit arrows in 3D model space - in a way LPub understands them so we can create instructions like this. More comfortable GUI than it is in MLCAD would be highly appreciated Smile (Maybe agree with LPub3D maintainer on a new syntax, too?)

* grid step lesser than 1 - good for part (EDIT: snap data) editing
Milan Vančura Wrote:[...]
* snapping for templates - for example Hose Rigid 3mm snapping with Clips or Minifig Hands, regardless how it is bent
[...]

+1 for this one Smile
Especially when the clips are rotated in a weird way, it's quite a lot of work to line up the rigid hose or flex-axles with the current version. Also because those flexible parts can move/transform a little when doing something somwhere else on the same part. If you'd implement such a snapping feature for flexible parts, you'd probably need to implement a way to 'lock the snap' (just like in real life), if you understand what I mean...
Quote:count can be used to indicate e.g. the number of brick of this kind present in a offical set or something. If above 0 it will be displayed in the parts cell. Future versions of LDCad will do more useful stuff with this property for now its only a FYI thing.
...do something useful with the "count" property?

BTW, is it possible to structure a bit an official set parts bin (add some sub-bins for multi-thousand parts sets)?
I used 1.5 a bit and I did not see the following:

Would it be possible to display the HELP line in the part when you click on "Properties"?

If there is placement information inside it would be nice to quickly access it.
Merlijn Wissink Wrote:
Milan Vančura Wrote:[...]
* snapping for templates - for example Hose Rigid 3mm snapping with Clips or Minifig Hands, regardless how it is bent
[...]

+1 for this one Smile
Especially when the clips are rotated in a weird way, it's quite a lot of work to line up the rigid hose or flex-axles with the current version. Also because those flexible parts can move/transform a little when doing something somwhere else on the same part. If you'd implement such a snapping feature for flexible parts, you'd probably need to implement a way to 'lock the snap' (just like in real life), if you understand what I mean...
Snap points inclusion on generated parts (inherited from the donorparts) is pending, I'll put it on the must have list.
Philippe Hurbain Wrote:
Quote:count can be used to indicate e.g. the number of brick of this kind present in a offical set or something. If above 0 it will be displayed in the parts cell. Future versions of LDCad will do more useful stuff with this property for now its only a FYI thing.
...do something useful with the "count" property?
My initial plan for this was to have it decrease the numbers baded on the current model so you could build a model and end up with zero parts in the bin when finished. I've also been playing with the idea to keep an inventory of your real life parts and have those decrease based on the current model. That way you would know if you can build something or not using your real life stuff. the later would need some kind of tool to enter your collection. I'll put the set decreasing feature back on the to do list.

Philippe Hurbain Wrote:BTW, is it possible to structure a bit an official set parts bin (add some sub-bins for multi-thousand parts sets)?
Yes you can do that by using a group of the 'dirlist' kind or a 'basic' one referencing the subgroups but those groups need to be outside the sets folder or they will show up twice.
Gerald Lasser Wrote:I used 1.5 a bit and I did not see the following:

Would it be possible to display the HELP line in the part when you click on "Properties"?

If there is placement information inside it would be nice to quickly access it.
I was considering to use the source window for that. It was supposed to work with an option you can use to assign what to display in a certain source window (current model, selected part, some locked part/model). But I dropped that feature for the 1.5 version thinking it should first be 'perfect' combined with just the current model/part.
Merlijn Wissink Wrote:I have another suggestion: being able to make a flexible net. I mean parts like these. I imagine something in the same way as current flexible parts, but with 4 end points (the 4 corners of the net) and points in the middle to make it a 'valley' shape or a 'hill' shape.

Ok, it might be quite difficult to make and it's probably a bit of a 'niche', but it would be nice to have nonetheless Wink
I did consider adding a cloth generator but it never came further then a bit of resource on how to dynamically define/generate such things. I might revisit it when all other major things are done (in version 1.7 or higher).
Quote:Yes you can do that by using a group of the 'dirlist' kind or a 'basic' one referencing the subgroups
Actually I hoped for something like 'catlist' but applied to a static list (similar to a set pbg) generating automatically subcategories.
Or maybe a filter group that uses another group or static item list as a source instead of the inventory? I'll put this on the nice to have list Smile
Hello Roland.

This is my suggestion how GUI may look:

[Image: 23886570890_1665736064_n.jpg]
LDCad features suggested - an example video by Milan Vančura, on Flickr
Yes, that's more or less the idea Wink
You have a very efficient way of selling concepts! Agreed, these would be very useful.
Roland Melkert Wrote:
Philippe Hurbain Wrote:...do something useful with the "count" property?
My initial plan for this was to have it decrease the numbers based on the current model so you could build a model and end up with zero parts in the bin when finished.
Yes, that would be very useful for alternative models building (and contests)! I prefer to have it "stupid only" - no policy set like disabling pieces with '0' count etc. Just show the current result of (original_count minus used_count), red if negative.
Nice-to-have extension: a function to select pieces in the model which are not from this list.
EDIT: About thee import of this kind of data: I vote for a brickstore (BSX) format import function. This way one can use brickstock directly with LDCad (and import sets data or personal lists there so you do not need to think about that) and also rebrickable.com offers an export to BSX format.
Milan Vančura Wrote:[Image: 23886570890_1665736064_n.jpg]
LDCad features suggested - an example video by Milan Vančura, on Flickr
Very nice video some very creative editing / magic right there Smile

I'll add 'using snap points as selection center' to my to do list. Rotation snapping is a whole lot more difficult though, I'm also not sure it can be done using the current snapping calculations. So I might delay that to the second generation snapping calculations I want to include in 1.7 or higher.

Thanks for your insight Milan.
Milan Vančura Wrote:Yes, that would be very useful for alternative models building (and contests)! I prefer to have it "stupid only" - no policy set like disabling pieces with '0' count etc. Just show the current result of (original_count minus used_count), red if negative.
Nice-to-have extension: a function to select pieces in the model which are not from this list.
Could always make that an option.

Milan Vančura Wrote:EDIT: About thee import of this kind of data: I vote for a brickstore (BSX) format import function. This way one can use brickstock directly with LDCad (and import sets data or personal lists there so you do not need to think about that) and also rebrickable.com offers an export to BSX format.
I'll probably add multiple ways or maybe even make it possible trough scripted/plugin imports as part of the scripting extensions I have planned for 1.6
Quote:* grid step lesser than 1
In the same spirit I'd like to have possibility to define angle grid with more precision. 22.5° grid is really missing.
Maybe some alignment tools? I often use the combo select target -> shift+o -> select part to align -> shift+c -> deselect -> shift+o to align chains path points on gears so some streamlining of this process could be useful but not mandatory...
Philippe Hurbain Wrote:22.5° grid is really missing.

+1

/Max
Quote:Yes but it is currently undocumented. It's done through the part's header dialog (press enter in its own editor while nothing is selected). There you'll find the 'length constrains' panel on the 'path' tabpage.
I played a bit with this, nice feature! Two questions nonetheless:
- we can visually see that maximum length is exceeded, but nothing tells clearly that the part is too short?
(edit): Actually there is some visual clue: one end of the part (cable) looks folded on itself if target length is not reached.
- do the fields "part name" and "part description" do something already, or is it something planned for future release?
Roland Melkert Wrote:Very nice video some very creative editing / magic right there Smile

I'll add 'using snap points as selection center' to my to do list. Rotation snapping is a whole lot more difficult though, I'm also not sure it can be done using the current snapping calculations. So I might delay that to the second generation snapping calculations I want to include in 1.7 or higher.
I'm glad you enjoyed my video. It worked even better than I hoped - you understood the idea even I made a mistake in the video description - yes, the feature I wish to have is exactly how you described it: "using snap points as selection center". Thanks for correcting (or ignoring Wink ) my mistake.
BTW Milan, what do you use to capture screen video, camstudio? something else?
Maybe a bit unrelated to this topic, but the rare times I need to make a screen-capture, I use OBS.
Altough it's more targeted at (game) streaming, it works perfectly fine for just capturing the screen. It has loads of options and it is completely free. Smile
Thanks Merlijn for a tip, I try OBS.


Philippe, the fair answer would be "the first app my Linux distro found for me" Smile The name is "vokoscreen" and it's very basic but works well. Then, I made all video cuts and titles in openshot (version 1), using also Inkscape for nicer titles.
Milan Vančura Wrote:* support of buffer exchange and arrows editing: to be able to add and edit arrows in 3D model space - in a way LPub understands them so we can create instructions like this. More comfortable GUI than it is in MLCAD would be highly appreciated Smile (Maybe agree with LPub3D maintainer on a new syntax, too?)

Please, does anybody have an idea how GUI for this should look? Video not needed Smile but at least some ideas. I though about something like a feature of more parallel groups of hidden parts and a subwindow with a list of them and a chance to give them names (like "front wheels assembly" in the example above). But now, I feel this is not enough for all kinds of usage. Like, for example, modern Technic instructions putting some part to the temporary position in the model at first and move/rotate it to the final position several steps later.

What would be the best GUI to handle this in LDCad? (Second question is a cooperation with LPub but let's concentrate on the first one.)
Philippe Hurbain Wrote:we can visually see that maximum length is exceeded, but nothing tells clearly that the part is too short?
(edit): Actually there is some visual clue: one end of the part (cable) looks folded on itself if target length is not reached.
This might be a bug, I'll have to check. It should show a thin white/blue line for the remaining unused space.

Philippe Hurbain Wrote:do the fields "part name" and "part description" do something already, or is it something planned for future release?
They are meant to be used to map the dynamic part to an official/virtual static LDraw part. This part will then be shown in the part lists instead of the shaped one. But this is not yet fully implemented as it kinda waits on the other part inventory features I initially planned for 1.4 or something, but delayed in favor of more 'interesting' features Smile
Milan Vančura Wrote:Please, does anybody have an idea how GUI for this should look? Video not needed Smile but at least some ideas. I though about something like a feature of more parallel groups of hidden parts and a subwindow with a list of them and a chance to give them names (like "front wheels assembly" in the example above). But now, I feel this is not enough for all kinds of usage. Like, for example, modern Technic instructions putting some part to the temporary position in the model at first and move/rotate it to the final position several steps later.

What would be the best GUI to handle this in LDCad? (Second question is a cooperation with LPub but let's concentrate on the first one.)
I never used buffer exchange myself but as it has also been asked by email I have been looking into it. Inititally I thought it allowed for sections of code to be push/popped but it seems it always act on the entire subfile. So I probably could work with a bitmask on the to be rendered lines (giving 32 or 64 buffers) or something. GUI wise it's would propably work best combined with the source window.
I don't think you need any special GUI for that. It's just more how the software handles it. In MLCad, all buffer exchanged parts are shown to the user in editor mode. When you use a lot of buffer exchange, the model becomes quite a mess with all kinds of random parts (and arrows) everywhere.

It would be much easier if the editor itself had support for buffer exchange. That it really only shows what you would see in the step you're working on. If you know what I mean, my explanation is maybe a bit vague...

Aside from that, the 'current' buffer exchange is somehwat limited. I've had some annoying experiences with it in the past because it works not very intuitive (although that might also have to do with MLCad, I can't work very well with MLCad) and it's missing some features I'd really like. But, I suppose this is not the place to develop a new syntax Wink
Thanks, I'll give it a try!
Roland Melkert Wrote:I never used buffer exchange myself but as it has also been asked by email I have been looking into it. Inititally I thought it allowed for sections of code to be push/popped but it seems it always act on the entire subfile. So I probably could work with a bitmask on the to be rendered lines (giving 32 or 64 buffers) or something. GUI wise it's would propably work best combined with the source window.
I'm not 100% sure I understand you. A very good explanation is at LPub tutorial page. Simply said, the "store" and "retrieve" pair of commands is used to forget everything between them and continue after retrieve with the model as it was in time of "save" command. Another example is in the tutorial I linked above.

How to make this comfortable and easy to understand in LDCad?
I do not want to see both new and replaced parts at the same time, in following steps. Neither I want to hide them manually, one by one. How to deal with all this automatically?
About arrows: do you think, Roland, it is possible to prepare an arrow editor?

Another question is: Is this syntax enough? - more details are in my answer to Merlijn's comment lower
Merlijn Wissink Wrote:Aside from that, the 'current' buffer exchange is somehwat limited. I've had some annoying experiences with it in the past because it works not very intuitive (although that might also have to do with MLCad, I can't work very well with MLCad) and it's missing some features I'd really like. But, I suppose this is not the place to develop a new syntax Wink
I hope it is Smile Or, better said, even this is too much for LDCad 1.6, we shall discuss this anyway, for future. It's the best time, I believe, because there is a maintainer of LPub again, after several years, so we have a partner for discussions.

Buffer exchange works for immediate replacements of everything from this step. But, sometimes, the situation is more complicated. Especially with Technic models instructions. Look at this example, steps 45-48. There is a submodel containing some (long) pins and a bendable front part, now straight. After this submodel is attached to the main model there is a step with arrows showing how to push those long pins, then another step showing pins in the new location and the front part of the (sub)model bent to the new angle and soft axles bent as well, connected with that front part.

This is near to impossible to create with bufferexchange commands because they are too "heavy" - they force you to replace everything or nothing, they can't work with parts of submodels in the main model etc. It's like an attempt to fix your watches with a jackhammer. I believe we need more subtle and precise commands.
Quote:This might be a bug, I'll have to check. It should show a thin white/blue line for the remaining unused space.
I do see a red/white line when I pull too far, but if the part is shorter that its defined length there is no "remaining unused space" - so I see no white/blue line.
I also tried with a closed rubber band, and if the length is shorter than defined there is also some folding on itself at band seam.

Speaking of rubber bands, maybe it should be interesting to make length tolerance assymetrical: a rubber band can't be shorter than its unextended length, but can be stretched up to say 100%.

(edit): Still about rubber bands, I find it a bit annoying that LDCad only shows theoretical length, not actual one.
A related question, is there an easy way to get the length of a flexible part while editing it in nested mode? Ideally in real time, but dhowing lengh when idle would be already nice, currently I found no other way than going back to normal editing mode.
Philippe Hurbain Wrote:I see no white/blue line.
It could have sworn there was a white/blue line somewhere in there but I checked the source
Code:
path.generateFallBackLine(fallbackRD, path.getLenUsed(), path.getLenReal(), TLDColor(15), TLDColor(4));
And you are right it's a red/white one only, I've must have changed it a some point Smile


Philippe Hurbain Wrote:Speaking of rubber bands, maybe it should be interesting to make length tolerance assymetrical: a rubber band can't be shorter than its unextended length, but can be stretched up to say 100%.

(edit): Still about rubber bands, I find it a bit annoying that LDCad only shows theoretical length, not actual one.
A related question, is there an easy way to get the length of a flexible part while editing it in nested mode? Ideally in real time, but dhowing lengh when idle would be already nice, currently I found no other way than going back to normal editing mode.
The real-life part length is something the constraint description was intended for, I will polish that feature at some point. The current length of any generated part should also be given in the part bin cell hints, but I just discovered this only works for parts without a open editing session. I'll correct this in the definitive 1.5 version.
Milan Vančura Wrote:I hope it is Smile Or, better said, even this is too much for LDCad 1.6, we shall discuss this anyway, for future. It's the best time, I believe, because there is a maintainer of LPub again, after several years, so we have a partner for discussions.

Buffer exchange works for immediate replacements of everything from this step. But, sometimes, the situation is more complicated. Especially with Technic models instructions. Look at this example, steps 45-48. There is a submodel containing some (long) pins and a bendable front part, now straight. After this submodel is attached to the main model there is a step with arrows showing how to push those long pins, then another step showing pins in the new location and the front part of the (sub)model bent to the new angle and soft axles bent as well, connected with that front part.

This is near to impossible to create with bufferexchange commands because they are too "heavy" - they force you to replace everything or nothing, they can't work with parts of submodels in the main model etc. It's like an attempt to fix your watches with a jackhammer. I believe we need more subtle and precise commands.
Maybe I'm over simplyfinig it but the first thing that springs to me is adding an option to groups to control in which step(s) it should be shown. This combined with the nested use of groups (and the planned multi layered use of groups) should make it possible to hide/show anything when needed. But it would only be really useful if LPub would also be able to use it.
Milan Vančura Wrote:I'm not 100% sure I understand you. A very good explanation is at LPub tutorial page. Simply said, the "store" and "retrieve" pair of commands is used to forget everything between them and continue after retrieve with the model as it was in time of "save" command. Another example is in the tutorial I linked above.
Thanks I'll take a look at those pages and see if I can think of something useful Smile[/quote]
A basic tutorial for BufferExchange can be found on my site:

http://www.holly-wood.it/mlcad/advanced1...r_exchange

w.
Hopefully an easy one.

Roland, happy new year. Love your program. I am in the process of converting models from LDD to LDraw and have discovered your program and am really liking it. However, some of my LDD models are quite large. What I need is the right click ability from LDD. I need to be able to set a new rotation centerpoint.

Currently, it seems like the camera centerpoint is fixed in the center of the bounding box for the whole model. I need to be able to pick a brick and make it the new camera centerpoint (since some of my models are geographically quite large and spread out) and zoom in tight on that one area and spin around it to work. If this is already a capability, please forgive my ignorance. I am still learning all of the details of the interface. It does seem like I can achieve an approximation of what I am looking for by switching back and forth between 2D and 3D modes (using 2D mode to gain a new camera centerpoint), but it would be nice to have the centerpoint function on the right click popup for a brick (allowing it to be set directly from 3D mode).

Oh ya... in the normal course of editing I would be looking to use this ability with the SPN rotation style... but I imagine the concept could work the same for both styles.
Hi OldT1mer, welcome here!
I don't know if this does exactly what you want, but "c" key centers the view on current selection.
I think it is what he meant.
But, aside from that. I personally didn't knew about the feature hiding behind the C key. It's actually quite useful. Smile
Awesome! Thank you, Philippe. That is exactly what I was looking for.

C is for center... that's good enough for me. Smile
You can also move the view around by using shift+right mouse button.

And 'c' also work while dragging a new part into the model, it will center on the current mouse location that way.
Pages: 1 2 3 4