add an overload to _SculptMesh for meshing from a list of coordinates
add conditional compilation for System.Drawing dependency0.6.8-post-fixes
parent
5145dfa53c
commit
3e22bb24f5
|
@ -25,12 +25,18 @@
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// to build without references to System.Drawing, comment this out
|
||||||
|
#define SYSTEM_DRAWING
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
|
#if SYSTEM_DRAWING
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Drawing.Imaging;
|
using System.Drawing.Imaging;
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace PrimMesher
|
namespace PrimMesher
|
||||||
{
|
{
|
||||||
|
@ -83,6 +89,7 @@ namespace PrimMesher
|
||||||
// return scaledImage;
|
// return scaledImage;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
#if SYSTEM_DRAWING
|
||||||
public SculptMesh SculptMeshFromFile(string fileName, SculptType sculptType, int lod, bool viewerMode)
|
public SculptMesh SculptMeshFromFile(string fileName, SculptType sculptType, int lod, bool viewerMode)
|
||||||
{
|
{
|
||||||
Bitmap bitmap = (Bitmap)Bitmap.FromFile(fileName);
|
Bitmap bitmap = (Bitmap)Bitmap.FromFile(fileName);
|
||||||
|
@ -97,6 +104,7 @@ namespace PrimMesher
|
||||||
_SculptMesh(bitmap, (SculptType)sculptType, lod, viewerMode != 0, mirror != 0, invert != 0);
|
_SculptMesh(bitmap, (SculptType)sculptType, lod, viewerMode != 0, mirror != 0, invert != 0);
|
||||||
bitmap.Dispose();
|
bitmap.Dispose();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// ** Experimental ** May disappear from future versions ** not recommeneded for use in applications
|
/// ** Experimental ** May disappear from future versions ** not recommeneded for use in applications
|
||||||
|
@ -201,6 +209,7 @@ namespace PrimMesher
|
||||||
calcVertexNormals(SculptType.plane, numXElements, numYElements);
|
calcVertexNormals(SculptType.plane, numXElements, numYElements);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if SYSTEM_DRAWING
|
||||||
public SculptMesh(Bitmap sculptBitmap, SculptType sculptType, int lod, bool viewerMode)
|
public SculptMesh(Bitmap sculptBitmap, SculptType sculptType, int lod, bool viewerMode)
|
||||||
{
|
{
|
||||||
_SculptMesh(sculptBitmap, sculptType, lod, viewerMode, false, false);
|
_SculptMesh(sculptBitmap, sculptType, lod, viewerMode, false, false);
|
||||||
|
@ -210,9 +219,16 @@ namespace PrimMesher
|
||||||
{
|
{
|
||||||
_SculptMesh(sculptBitmap, sculptType, lod, viewerMode, mirror, invert);
|
_SculptMesh(sculptBitmap, sculptType, lod, viewerMode, mirror, invert);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
public SculptMesh(List<List<Coord>> rows, SculptType sculptType, bool viewerMode, bool mirror, bool invert)
|
||||||
|
{
|
||||||
|
_SculptMesh(rows, sculptType, viewerMode, mirror, invert);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if SYSTEM_DRAWING
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// converts a bitmap to a list lists of coords, while scaling the image.
|
/// converts a bitmap to a list of lists of coords, while scaling the image.
|
||||||
/// the scaling is done in floating point so as to allow for reduced vertex position
|
/// the scaling is done in floating point so as to allow for reduced vertex position
|
||||||
/// quantization as the position will be averaged between pixel values. this routine will
|
/// quantization as the position will be averaged between pixel values. this routine will
|
||||||
/// likely fail if the bitmap width and height are not powers of 2.
|
/// likely fail if the bitmap width and height are not powers of 2.
|
||||||
|
@ -267,6 +283,7 @@ namespace PrimMesher
|
||||||
return rows;
|
return rows;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void _SculptMesh(Bitmap sculptBitmap, SculptType sculptType, int lod, bool viewerMode, bool mirror, bool invert)
|
void _SculptMesh(Bitmap sculptBitmap, SculptType sculptType, int lod, bool viewerMode, bool mirror, bool invert)
|
||||||
{
|
{
|
||||||
coords = new List<Coord>();
|
coords = new List<Coord>();
|
||||||
|
@ -285,13 +302,39 @@ namespace PrimMesher
|
||||||
int scale = (int)(1.0f / sourceScaleFactor);
|
int scale = (int)(1.0f / sourceScaleFactor);
|
||||||
if (scale < 1) scale = 1;
|
if (scale < 1) scale = 1;
|
||||||
|
|
||||||
List<List<Coord>> rows = bitmap2Coords(sculptBitmap, scale, mirror);
|
_SculptMesh(bitmap2Coords(sculptBitmap, scale, mirror), sculptType, viewerMode, mirror, invert);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
void _SculptMesh(List<List<Coord>> rows, SculptType sculptType, bool viewerMode, bool mirror, bool invert)
|
||||||
|
{
|
||||||
|
coords = new List<Coord>();
|
||||||
|
faces = new List<Face>();
|
||||||
|
normals = new List<Coord>();
|
||||||
|
uvs = new List<UVCoord>();
|
||||||
|
|
||||||
|
sculptType = (SculptType)(((int)sculptType) & 0x07);
|
||||||
|
|
||||||
|
if (mirror)
|
||||||
|
if (sculptType == SculptType.plane)
|
||||||
|
invert = !invert;
|
||||||
|
|
||||||
|
//float sourceScaleFactor = (float)(lod) / (float)Math.Sqrt(sculptBitmap.Width * sculptBitmap.Height);
|
||||||
|
|
||||||
|
//int scale = (int)(1.0f / sourceScaleFactor);
|
||||||
|
//if (scale < 1) scale = 1;
|
||||||
|
|
||||||
|
//List<List<Coord>> rows = bitmap2Coords(sculptBitmap, scale, mirror);
|
||||||
|
|
||||||
viewerFaces = new List<ViewerFace>();
|
viewerFaces = new List<ViewerFace>();
|
||||||
|
|
||||||
int width = sculptBitmap.Width / scale;
|
//int width = sculptBitmap.Width / scale;
|
||||||
// int height = sculptBitmap.Height / scale;
|
// int height = sculptBitmap.Height / scale;
|
||||||
|
|
||||||
|
int width = rows[0].Count;
|
||||||
|
int height = rows.Count;
|
||||||
|
|
||||||
int p1, p2, p3, p4;
|
int p1, p2, p3, p4;
|
||||||
|
|
||||||
int imageX, imageY;
|
int imageX, imageY;
|
||||||
|
|
Loading…
Reference in New Issue