summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorleo2002-12-22 22:12:32 +0000
committerleo2002-12-22 22:12:32 +0000
commit840eda45cae86d81772ce2e8c2b466bff124e2ee (patch)
tree39517aa41fe164ccc516bcecda071f8ad59250ee /common
parentaa72a5ebcc423829f042539f27bede420a1c576c (diff)
Fixed piece import bug.
git-svn-id: http://svn.leocad.org/trunk@326 c7d43263-9d01-0410-8a33-9dba5d9f93d6
Diffstat (limited to 'common')
-rwxr-xr-xcommon/library.cpp15
-rwxr-xr-xcommon/library.h1
2 files changed, 9 insertions, 7 deletions
diff --git a/common/library.cpp b/common/library.cpp
index 2e5f0c6..daa2c85 100755
--- a/common/library.cpp
+++ b/common/library.cpp
@@ -1392,6 +1392,7 @@ static void CreateMesh(group_t* pGroup, lineinfo_t* info, LC_LDRAW_PIECE* piece)
lineinfo_t *a, *b;
int i, j, k, v;
unsigned int count[256][3], vert = 0;
+ unsigned int quads = 0;
unsigned char* bytes;
memset (count, 0, sizeof(count));
@@ -1407,12 +1408,15 @@ static void CreateMesh(group_t* pGroup, lineinfo_t* info, LC_LDRAW_PIECE* piece)
if (count[i][0] || count[i][1] || count[i][2])
k++;
+ quads += count[i][2] * 4;
+
if (i == 16) i = -1;
if (i == 15) i = 23;
}
- if (piece->verts_count > 65535)
+ if (piece->verts_count > 65535 || quads > 65535)
{
+ piece->long_info = true;
unsigned long* drawinfo;
pGroup->infosize = sizeof(unsigned long)*(vert + (k*4)+1) + 2;
pGroup->drawinfo = malloc(pGroup->infosize);
@@ -1429,13 +1433,10 @@ static void CreateMesh(group_t* pGroup, lineinfo_t* info, LC_LDRAW_PIECE* piece)
*drawinfo = i;
drawinfo++;
- printf("%d ", i);
-
for (j = 4; j > 1; j--)
{
*drawinfo = count[i][j-2]*j;
drawinfo++;
- printf("%d ", count[i][j-2]*j);
if (count[i][j-2] != 0)
{
@@ -1469,11 +1470,10 @@ static void CreateMesh(group_t* pGroup, lineinfo_t* info, LC_LDRAW_PIECE* piece)
if (i == 16) i = -1;
if (i == 15) i = 23;
}
-
- printf("\n");
}
else
{
+ piece->long_info = false;
unsigned short* drawinfo;
pGroup->infosize = sizeof(unsigned short)*(vert + (k*4)+1) + 2;
pGroup->drawinfo = malloc(pGroup->infosize);
@@ -2031,6 +2031,7 @@ bool ReadLDrawPiece(const char* filename, LC_LDRAW_PIECE* piece)
}
piece->verts = verts;
+ piece->long_info = false;
piece->verts_count = unique;
// Main group
@@ -2158,7 +2159,7 @@ bool SaveLDrawPiece(LC_LDRAW_PIECE* piece)
{
if (*bytes == LC_MESH)
{
- if (piece->verts_count > 65535)
+ if (piece->long_info)
{
unsigned long colors, *p;
p = (unsigned long*)(bytes + 1);
diff --git a/common/library.h b/common/library.h
index d24c029..54fd137 100755
--- a/common/library.h
+++ b/common/library.h
@@ -121,6 +121,7 @@ typedef struct
{
float* verts;
unsigned int verts_count;
+ bool long_info;
connection_t* connections;
group_t* groups;
texture_t* textures;