Another thought is to have an actual g group with only a single face (using an invisible material/texture) with only three vertices. Find the longest distance between the three, and that becomes the arbitrary axis for rotation, or vector for translation if it is a rail. This face does not get "cleaned" by SH3D, and would prevent needing changes elsewhere handling stray vertices.
OK, so I can export a .obj file from blender containing (the "g" naming is irrelevant as this was just a test): ... (snipped cube) ... g Axis_Plane v -1.036215 -0.870979 0.409455 v 1.036215 0.870979 -0.409455 I can import this into SH3D without error, but it looks like SH3D is cleaning the geometry, and removes them. But anyway, that is how I would suggest determining the axis - it would just need SH3D to use them instead of nuking them. I searched "how to rotate in 3d around an arbitrary axis" and...
First time I read this, I think I didn't understand. My idea was to not use part of the visual objects structure to define the hinge. Instead have a separate group (as in obj group) that only consists of two 3D points - also with a special name following the existing scheme. These two points define the axis of rotation for the other sub-parts. The points/axis is rotated by the furniture's main rotation, and then are applied to the hinged sub-parts. My 3D geometry is somewhat basic, and maybe I don't...
Hinge/Rail parts do not account for objects rotational transformation
Fixed link
Export/reimport of multiple hinged objects synchronises the hinges
Damn, sorry, it was not the online version. This was desktop Version 7.0, OpenJDK 11.0.10, 64 bit.
It wasn't the paste that behaved oddly. I had no problem with not pasting to a hidden tab. It was the grouping action that grouped the objects, but the group was placed on the hidden tab. This made the grouped items "disappear". In reality they were pasted to the hidden tab. Something I missed to say was this was on levels at the same elevation, where the hidden tab is the active tab, but the objects were still selectable/moveable/etc. Create three levels, 0, 1 & 2. Place a box on level 0, a box...