To LUGNET HomepageTo LUGNET News HomepageTo LUGNET Guide Homepage
 Help on Searching
 
Post new message to lugnet.cadOpen lugnet.cad in your NNTP NewsreaderTo LUGNET News Traffic PageSign In (Members)
 CAD / 11652
11651  |  11653
Subject: 
Re: Quick way to mirror-image a model?
Newsgroups: 
lugnet.cad
Date: 
Thu, 24 Jun 2004 15:09:39 GMT
Viewed: 
3955 times
  
In lugnet.cad, Carl Nelson wrote:
What about a flag for default behavior?  I've been coding to ignore
ones with default rotations,

Why?  I have a slow PC, and running the mirwiz.exe program is
nearly instantaneous.  It's a lookup and 2 matrix multiplies per
part.  If the exception matrix lookup fails, use the default matrix.
It would take extra, unneeded code to ignore things.  Resist the
urge...

but there are plenty of parts (especially slopes) that need a
(-1 0 0 0 1 0 0 0 1) rotation

Stop saying rotation.  It makes me think you're not doing it right.
That's a mirror matrix.

applied when reflected front-to-back
and it would be nice to have a flag to distinguish those needing
default behavior from those where the true correction matrix is
(-1 0 0 0 1 0 0 0 1).

If you *always* do the same matrix math there's no need to
distinguish.  If you're not, then you're making extra busy work
for yourself and possibly introducing bugs.  Here's the pseudo code.

  for (*ALL* parts in the subfile)
  {
    float m[4][4];  // Tempory working matrix.
    float md[4][4] = { // Default = left-right mirror
      {-1.0,0.0,0.0,0.0},
      {0.0,1.0,0.0,0.0},
      {0.0,0.0,1.0,0.0},
      {0.0,0.0,0.0,1.0}
    };
    float *me = md; // Init exception mirror to left-right (the default).
    float *mp = md; // Init global subfile mirror to left-right.

    for( i=0; i< numExceptions; i++ )
    {
       if (exception[i] matches this part)
       {
  // Use the matrix from the exception list (instead of md).
  me = exception[i].matrix
  // Also use the substitute partname
  strcpy(datname, exception[i].datname);
  break;
}
    }
    M4M4Mul(m,LinePtr->v,me); // Run the initial mirror on the part
    M4M4Mul(LinePtr->v,mp,m); // Apply global subfile mirror to part

    // NOTE: You can set mp to mirror across whatever plane you want.
    //       The example here mirrors the subfile across the YZ plane.
  }

It's simple and it's all done with mirrors, except for a few weird
parts which might contain a rotation and/or translation component
mixed in with the mirroring in the me matrix.

So far I've only found a few door parts that need a translation
component.  See http://ldglite.sf.net/mirror.ini for details on
the doors.

Enjoy,

Don



Message has 1 Reply:
  Re: Quick way to mirror-image a model?
 
(...) Why process something as an exception when the default behavior is needed? It's all in what one sees as extra, unneeded code. ;-) Though I just did some timing and I don't see any performance differences between ignoring them and not. (...) (...) (20 years ago, 24-Jun-04, to lugnet.cad)

Message is in Reply To:
  Re: Quick way to mirror-image a model?
 
What about a flag for default behavior? I've been coding to ignore ones with default rotations, but there are plenty of parts (especially slopes) that need a (-1 0 0 0 1 0 0 0 1) rotation applied when reflected front-to-back and it would be nice to (...) (20 years ago, 24-Jun-04, to lugnet.cad)

65 Messages in This Thread:

















Entire Thread on One Page:
Nested:  All | Brief | Compact | Dots
Linear:  All | Brief | Compact

This Message and its Replies on One Page:
Nested:  All | Brief | Compact | Dots
Linear:  All | Brief | Compact
    

Custom Search

©2005 LUGNET. All rights reserved. - hosted by steinbruch.info GbR