roamingstudio, on 12 August 2010 - 08:29 AM, said:
Im not sure how the pieces are defined in the dB, and their orientation / translation matrices (I would assume they use the Homogenious type 4x4 rotational matrices) then a mirror would be valid for the mesh of an object - but not for a specific part. E.g. if you do a mirror in Autodesk the mesh of the object is correctly mirrored - but the part is new. To keep with valid bricks, the mirror function would need to know how to also turn elements through 180 degrees and realign with the original bricks.
If the part data base was updated with a list of valid 'mirror' objects it could be foreced to work - but then the mirror would only be valid in one or two specific dimensions. E.g. a mirror of a wing along the two straight edges could work (if mirror along plane X, then substitute with part Y) - but an arbitrary mirror would not.
There could also be cases where mirror along plane X results in re-using part X, but remembering to rotate it by 180 degrees (e.g. with 2x2 corner brick) AND realign the axes to the other bricks (assuming the origin of the brick mesh is not in the centre of the brick).
So short answer: Mirroring sounds easy, would be a great feature, and would give a nightmare for the programmers / implementation team.
I don't see it should be that difficult. It could at least be constrained - like doing a 'copy', but the bricks are the other way around.
Programmatically, yes, bricks elements would have to have two flags:
1. is it mirrorable? (ie, does a it look the same when mirrored? MOST do, but some don't (laser guns/scanners for instance - minifig hair, and AFAIK, the "robot" minifig arm used in the agents set ONLY came in a right-arm version). In those cases, the element would either be transposed (copied, not mirrored) or if it didn't fit into the mirrored assembly, just ignored with a message indicating so.
2. does it have a mirror counterpart? (classic example being wing pieces) if so, then the counterpart piece is used instead.
I don't see any need for making things any more complex than they need be -no need for having to specify the mirror line, just have a standard where it's mirrored in the orthogonal axis closest to the current view, and have it able to be rotated using the arrow keys before placement, just like the copy function.
Also - I think LDD would benefit from some sort of numbered layer system. Now, I'm fairly new to LDD, (but not new to CAD packages by any stretch of the imagination), and I haven't fully explored the usage of groups in this, but maybe they could be integrated somehow.
The way it would work is this:
-new parts inserted would be inserted on the logical 'layer number' that was selected at that time.
-any parts can be assigned different layers, regardless of their shape or colour
-layers can be turned on and off independantly for visibility (thus expanding the 'hide' command to something useful)
-the layers (if used in an intuitive manner by the user) can then be utilised when it's time to make the instruction guide. (I saw a couple of people mention this needed streamlining, I agree). For example, you could have a setting that mandates each layer be made an instruction step. (although, if the parts on one layer were too numerous, the guide-making routine could break these down to subassemblies)
for those who may not be familiar with CAD system definition of a layer (a-la AutoCAD, etc) it's merely a collection of parts that can be changed as a collective independently of other pieces. It doesn't necessarily have any bearing on where the pieces are physically located. (ie, layer 2 doesn't have to be physically above layer 1, etc).
The best example of using layers is to think of 'genuine' Lego instructions. The new parts introduced at each step could be considered a layer.
Or, think of the example of building a house - each course of bricks might be on a separate layer.
Or, for more complex examples, subassemblies might each be on a separate layer. A car bonnet, roof, door, etc might all be separate layers.
While on the subject of the 'hide' command, an "undo hide" command will be REALLY useful. How many times have you gone to pick a few elements to hide and clicked a brick you didn't want hidden? I have. I want to be able to "hide: click click click click.. Doh, unhide that one, click click click..."