OpenSim/Region/Physics/OdePlugin/OdeScene.cs
/// <summary>
/// Routine to figure out if we need to mesh this prim with our mesher
/// </summary>
/// <param name="pbs"></param>
/// <returns></returns>
Routine to figure out if we need to mesh this prim with our mesher
Routine to figure out if we need to mesh this prim with our mesher
internal bool needsMeshing(PrimitiveBaseShape pbs)
        {
            int iPropertiesNotSupportedDefault = 0;
            if (pbs.SculptEntry && !meshSculptedPrim)
            {
#if SPAM
                m_log.Warn("NonMesh");
#endif
                return false;
            }
            if (!forceSimplePrimMeshing && !pbs.SculptEntry)
            {
                if ((pbs.ProfileShape == ProfileShape.Square && pbs.PathCurve == (byte)Extrusion.Straight)
                    || (pbs.ProfileShape == ProfileShape.HalfCircle && pbs.PathCurve == (byte)Extrusion.Curve1
                    && pbs.Scale.X == pbs.Scale.Y && pbs.Scale.Y == pbs.Scale.Z))
                {
                    if (pbs.ProfileBegin == 0 && pbs.ProfileEnd == 0
                        && pbs.ProfileHollow == 0
                        && pbs.PathTwist == 0 && pbs.PathTwistBegin == 0
                        && pbs.PathBegin == 0 && pbs.PathEnd == 0
                        && pbs.PathTaperX == 0 && pbs.PathTaperY == 0
                        && pbs.PathScaleX == 100 && pbs.PathScaleY == 100
                        && pbs.PathShearX == 0 && pbs.PathShearY == 0)
                    {
#if SPAM
                    m_log.Warn("NonMesh");
#endif
                        return false;
                    }
                }
            }
            if (pbs.ProfileHollow != 0)
                iPropertiesNotSupportedDefault++;
            if ((pbs.PathBegin != 0) || pbs.PathEnd != 0)
                iPropertiesNotSupportedDefault++;
            if ((pbs.PathTwistBegin != 0) || (pbs.PathTwist != 0))
                iPropertiesNotSupportedDefault++; 
            if ((pbs.ProfileBegin != 0) || pbs.ProfileEnd != 0)
                iPropertiesNotSupportedDefault++;
            if ((pbs.PathScaleX != 100) || (pbs.PathScaleY != 100))
                iPropertiesNotSupportedDefault++;
            if ((pbs.PathShearX != 0) || (pbs.PathShearY != 0))
                iPropertiesNotSupportedDefault++;
            if (pbs.ProfileShape == ProfileShape.Circle && pbs.PathCurve == (byte)Extrusion.Straight)
                iPropertiesNotSupportedDefault++;
            if (pbs.ProfileShape == ProfileShape.HalfCircle && pbs.PathCurve == (byte)Extrusion.Curve1 && (pbs.Scale.X != pbs.Scale.Y || pbs.Scale.Y != pbs.Scale.Z || pbs.Scale.Z != pbs.Scale.X))
                iPropertiesNotSupportedDefault++;
            if (pbs.ProfileShape == ProfileShape.HalfCircle && pbs.PathCurve == (byte) Extrusion.Curve1)
                iPropertiesNotSupportedDefault++;
            if ((pbs.ProfileCurve & 0x07) == (byte)ProfileShape.Square)
            {
                if (pbs.PathCurve == (byte)Extrusion.Curve1)
                {
                    iPropertiesNotSupportedDefault++;
                }
            }
            else if ((pbs.ProfileCurve & 0x07) == (byte)ProfileShape.Circle)
            {
                if (pbs.PathCurve == (byte)Extrusion.Straight)
                {
                    iPropertiesNotSupportedDefault++;
                }
                else if (pbs.PathCurve == (byte)Extrusion.Curve1)
                {
                    iPropertiesNotSupportedDefault++;
                }
            }
            else if ((pbs.ProfileCurve & 0x07) == (byte)ProfileShape.HalfCircle)
            {
                if (pbs.PathCurve == (byte)Extrusion.Curve1 || pbs.PathCurve == (byte)Extrusion.Curve2)
                {
                    iPropertiesNotSupportedDefault++;
                }
            }
            else if ((pbs.ProfileCurve & 0x07) == (byte)ProfileShape.EquilateralTriangle)
            {
                if (pbs.PathCurve == (byte)Extrusion.Straight)
                {
                    iPropertiesNotSupportedDefault++;
                }
                else if (pbs.PathCurve == (byte)Extrusion.Curve1)
                {
                    iPropertiesNotSupportedDefault++;
                }
            }
            if (pbs.SculptEntry && meshSculptedPrim)
                iPropertiesNotSupportedDefault++;
            if (iPropertiesNotSupportedDefault == 0)
            {
#if SPAM
                m_log.Warn("NonMesh");
#endif
                return false;
            }
#if SPAM
            m_log.Debug("Mesh");
#endif
            return true; 
        }
internal bool needsMeshing ( PrimitiveBaseShape pbs ) { int iPropertiesNotSupportedDefault = 0 ; if ( pbs . SculptEntry && ! meshSculptedPrim ) { if SPAM m_log . Warn ( " " ) ; endif return false ; } if ( ! forceSimplePrimMeshing && ! pbs . SculptEntry ) { if ( ( pbs . ProfileShape == ProfileShape . Square && pbs . PathCurve == ( byte ) Extrusion . Straight ) || ( pbs . ProfileShape == ProfileShape . HalfCircle && pbs . PathCurve == ( byte ) Extrusion . Curve1 && pbs . Scale . X == pbs . Scale . Y && pbs . Scale . Y == pbs . Scale . Z ) ) { if ( pbs . ProfileBegin == 0 && pbs . ProfileEnd == 0 && pbs . ProfileHollow == 0 && pbs . PathTwist == 0 && pbs . PathTwistBegin == 0 && pbs . PathBegin == 0 && pbs . PathEnd == 0 && pbs . PathTaperX == 0 && pbs . PathTaperY == 0 && pbs . PathScaleX == 100 && pbs . PathScaleY == 100 && pbs . PathShearX == 0 && pbs . PathShearY == 0 ) { if SPAM m_log . Warn ( " " ) ; endif return false ; } } } if ( pbs . ProfileHollow != 0 ) iPropertiesNotSupportedDefault ++ ; if ( ( pbs . PathBegin != 0 ) || pbs . PathEnd != 0 ) iPropertiesNotSupportedDefault ++ ; if ( ( pbs . PathTwistBegin != 0 ) || ( pbs . PathTwist != 0 ) ) iPropertiesNotSupportedDefault ++ ; if ( ( pbs . ProfileBegin != 0 ) || pbs . ProfileEnd != 0 ) iPropertiesNotSupportedDefault ++ ; if ( ( pbs . PathScaleX != 100 ) || ( pbs . PathScaleY != 100 ) ) iPropertiesNotSupportedDefault ++ ; if ( ( pbs . PathShearX != 0 ) || ( pbs . PathShearY != 0 ) ) iPropertiesNotSupportedDefault ++ ; if ( pbs . ProfileShape == ProfileShape . Circle && pbs . PathCurve == ( byte ) Extrusion . Straight ) iPropertiesNotSupportedDefault ++ ; if ( pbs . ProfileShape == ProfileShape . HalfCircle && pbs . PathCurve == ( byte ) Extrusion . Curve1 && ( pbs . Scale . X != pbs . Scale . Y || pbs . Scale . Y != pbs . Scale . Z || pbs . Scale . Z != pbs . Scale . X ) ) iPropertiesNotSupportedDefault ++ ; if ( pbs . ProfileShape == ProfileShape . HalfCircle && pbs . PathCurve == ( byte ) Extrusion . Curve1 ) iPropertiesNotSupportedDefault ++ ; if ( ( pbs . ProfileCurve & 0x07 ) == ( byte ) ProfileShape . Square ) { if ( pbs . PathCurve == ( byte ) Extrusion . Curve1 ) { iPropertiesNotSupportedDefault ++ ; } } else if ( ( pbs . ProfileCurve & 0x07 ) == ( byte ) ProfileShape . Circle ) { if ( pbs . PathCurve == ( byte ) Extrusion . Straight ) { iPropertiesNotSupportedDefault ++ ; } else if ( pbs . PathCurve == ( byte ) Extrusion . Curve1 ) { iPropertiesNotSupportedDefault ++ ; } } else if ( ( pbs . ProfileCurve & 0x07 ) == ( byte ) ProfileShape . HalfCircle ) { if ( pbs . PathCurve == ( byte ) Extrusion . Curve1 || pbs . PathCurve == ( byte ) Extrusion . Curve2 ) { iPropertiesNotSupportedDefault ++ ; } } else if ( ( pbs . ProfileCurve & 0x07 ) == ( byte ) ProfileShape . EquilateralTriangle ) { if ( pbs . PathCurve == ( byte ) Extrusion . Straight ) { iPropertiesNotSupportedDefault ++ ; } else if ( pbs . PathCurve == ( byte ) Extrusion . Curve1 ) { iPropertiesNotSupportedDefault ++ ; } } if ( pbs . SculptEntry && meshSculptedPrim ) iPropertiesNotSupportedDefault ++ ; if ( iPropertiesNotSupportedDefault == 0 ) { if SPAM m_log . Warn ( " " ) ; endif return false ; } if SPAM m_log . Debug ( " " ) ; endif return true ; }
Routine to figure out if we need to mesh this prim with our mesher
Routine to figure out if we need to mesh this prim with our mesher
// most of this is redundant now as the mesher will return null if it cant mesh a prim // but we still need to check for sculptie meshing being enabled so this is the most // convenient place to do it for now... //    //if (pbs.PathCurve == (byte)Primitive.PathCurve.Circle && pbs.ProfileCurve == (byte)Primitive.ProfileCurve.Circle && pbs.PathScaleY <= 0.75f) //    //m_log.Debug("needsMeshing: " + " pathCurve: " + pbs.PathCurve.ToString() + " profileCurve: " + pbs.ProfileCurve.ToString() + " pathScaleY: " + Primitive.UnpackPathScale(pbs.PathScaleY).ToString()); // if it's a standard box or sphere with no cuts, hollows, twist or top shear, return false since ODE can use an internal representation for the prim // test for torus // ProfileCurve seems to combine hole shape and profile curve so we need to only compare against the lower 3 bits
None
pbs
PrimitiveBaseShape
None