Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kicad-source-mirror
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
kicad-source-mirror
Commits
ae57c469
Commit
ae57c469
authored
Apr 13, 2015
by
Brian Sidebotham
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move S3D_MESH* to smart pointer to fix CID 108646
parent
c519eea1
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
74 additions
and
89 deletions
+74
-89
3d_mesh_model.cpp
3d-viewer/3d_mesh_model.cpp
+8
-15
3d_mesh_model.h
3d-viewer/3d_mesh_model.h
+10
-3
modelparsers.h
3d-viewer/modelparsers.h
+9
-8
vrml_v1_modelparser.cpp
3d-viewer/vrml_v1_modelparser.cpp
+6
-6
vrml_v2_modelparser.cpp
3d-viewer/vrml_v2_modelparser.cpp
+39
-39
vrmlmodelparser.cpp
3d-viewer/vrmlmodelparser.cpp
+0
-8
x3dmodelparser.cpp
3d-viewer/x3dmodelparser.cpp
+2
-10
No files found.
3d-viewer/3d_mesh_model.cpp
View file @
ae57c469
...
...
@@ -68,13 +68,6 @@ S3D_MESH::S3D_MESH()
S3D_MESH
::~
S3D_MESH
()
{
for
(
unsigned
int
idx
=
0
;
idx
<
childs
.
size
();
idx
++
)
{
if
(
childs
[
idx
]
)
{
delete
childs
[
idx
];
}
}
}
...
...
3d-viewer/3d_mesh_model.h
View file @
ae57c469
...
...
@@ -30,6 +30,8 @@
#ifndef __3D_MESH_MODEL_H__
#define __3D_MESH_MODEL_H__
#include <memory>
#include <boost/shared_ptr.hpp>
#include <vector>
#define GLM_FORCE_RADIANS
#include <gal/opengl/glm/glm.hpp>
...
...
@@ -37,9 +39,14 @@
#include "3d_material.h"
#include "CBBox.h"
class
S3D_MESH
;
/** A smart pointer to an S3D_MESH object */
typedef
boost
::
shared_ptr
<
S3D_MESH
>
S3D_MESH_PTR
;
/** A container of smar S3D_MESH object pointers */
typedef
std
::
vector
<
S3D_MESH_PTR
>
S3D_MESH_PTRS
;
class
S3D_MESH
{
public
:
...
...
@@ -60,7 +67,7 @@ public:
std
::
vector
<
S3D_VERTEX
>
m_PerFaceNormalsNormalized
;
std
::
vector
<
S3D_VERTEX
>
m_PerVertexNormalsNormalized
;
std
::
vector
<
int
>
m_MaterialIndex
;
std
::
vector
<
S3D_MESH
*
>
childs
;
S3D_MESH_PTRS
childs
;
S3D_VERTEX
m_translation
;
glm
::
vec4
m_rotation
;
...
...
3d-viewer/modelparsers.h
View file @
ae57c469
...
...
@@ -30,6 +30,7 @@
#define MODELPARSERS_H
#include <map>
#include <memory>
#include <vector>
#include <wx/string.h>
#include <3d_mesh_model.h>
...
...
@@ -75,7 +76,7 @@ public:
return
false
;
};
std
::
vector
<
S3D_MESH
*
>
childs
;
S3D_MESH_PTRS
childs
;
private
:
S3D_MASTER
*
master
;
...
...
@@ -127,7 +128,7 @@ public:
private
:
wxString
m_Filename
;
S3D_MESH
*
m_model
;
S3D_MESH
_PTR
m_model
;
std
::
vector
<
wxString
>
vrml_materials
;
std
::
vector
<
wxString
>
vrml_points
;
...
...
@@ -143,7 +144,7 @@ private:
typedef
std
::
map
<
std
::
string
,
std
::
vector
<
glm
::
vec3
>
>
VRML2_COORDINATE_MAP
;
typedef
std
::
map
<
std
::
string
,
S3D_MESH
*
>
VRML2_DEF_GROUP_MAP
;
typedef
std
::
map
<
std
::
string
,
S3D_MESH
_PTR
>
VRML2_DEF_GROUP_MAP
;
/**
* class VRML2_MODEL_PARSER
...
...
@@ -164,7 +165,7 @@ public:
* @param aTransformationModel a model with translation, rotation and scale to apply to default root
* @return bool - true if finnished with success
*/
bool
Load
(
const
wxString
&
aFilename
,
S3D_MESH
*
aTransformationModel
);
bool
Load
(
const
wxString
&
aFilename
,
S3D_MESH
_PTR
aTransformationModel
);
/**
* Return string representing VRML2 file in vrml2 format
...
...
@@ -174,7 +175,7 @@ public:
wxString
VRML2_representation
();
private
:
int
loadFileModel
(
S3D_MESH
*
transformationModel
);
int
loadFileModel
(
S3D_MESH
_PTR
transformationModel
);
int
read_Transform
();
int
read_DEF
();
int
read_DEF_Coordinate
();
...
...
@@ -211,7 +212,7 @@ private:
bool
m_normalPerVertex
;
bool
colorPerVertex
;
S3D_MESH
*
m_model
;
///< It stores the current model that the parsing is adding data
S3D_MESH
_PTR
m_model
;
///< It stores the current model that the parsing is adding data
FILE
*
m_file
;
wxFileName
m_Filename
;
VRML2_COORDINATE_MAP
m_defCoordinateMap
;
...
...
@@ -266,7 +267,7 @@ private:
bool
m_normalPerVertex
;
bool
colorPerVertex
;
S3D_MESH
*
m_model
;
S3D_MESH
_PTR
m_model
;
FILE
*
m_file
;
wxString
m_Filename
;
S3D_MODEL_PARSER
*
m_ModelParser
;
...
...
3d-viewer/vrml_v1_modelparser.cpp
View file @
ae57c469
...
...
@@ -51,7 +51,7 @@ VRML1_MODEL_PARSER::VRML1_MODEL_PARSER( S3D_MODEL_PARSER* aModelParser )
{
m_ModelParser
=
aModelParser
;
m_Master
=
m_ModelParser
->
GetMaster
();
m_model
=
NULL
;
m_model
.
reset
()
;
m_file
=
NULL
;
m_normalPerVertex
=
true
;
colorPerVertex
=
true
;
...
...
@@ -88,7 +88,7 @@ bool VRML1_MODEL_PARSER::Load( const wxString& aFilename )
if
(
strcmp
(
text
,
"Separator"
)
==
0
)
{
m_model
=
new
S3D_MESH
(
);
m_model
.
reset
(
new
S3D_MESH
()
);
m_ModelParser
->
childs
.
push_back
(
m_model
);
read_separator
();
}
...
...
@@ -122,18 +122,18 @@ int VRML1_MODEL_PARSER::read_separator()
}
else
if
(
strcmp
(
text
,
"Separator"
)
==
0
)
{
S3D_MESH
*
parent
=
m_model
;
S3D_MESH
_PTR
parent
(
m_model
.
get
()
)
;
S3D_MESH
*
new_mesh_model
=
new
S3D_MESH
(
);
S3D_MESH
_PTR
new_mesh_model
(
new
S3D_MESH
()
);
m_model
->
childs
.
push_back
(
new_mesh_model
);
m_model
=
new_mesh_model
;
m_model
.
reset
(
new_mesh_model
.
get
()
)
;
// recursive
read_separator
();
m_model
=
parent
;
m_model
.
reset
(
parent
.
get
()
)
;
}
else
if
(
(
*
text
!=
'}'
)
)
{
...
...
3d-viewer/vrml_v2_modelparser.cpp
View file @
ae57c469
...
...
@@ -54,7 +54,7 @@ VRML2_MODEL_PARSER::VRML2_MODEL_PARSER( S3D_MODEL_PARSER* aModelParser )
{
m_ModelParser
=
aModelParser
;
m_Master
=
m_ModelParser
->
GetMaster
();
m_model
=
NULL
;
m_model
.
reset
()
;
m_file
=
NULL
;
m_normalPerVertex
=
true
;
colorPerVertex
=
true
;
...
...
@@ -98,7 +98,7 @@ bool VRML2_MODEL_PARSER::Load( const wxString& aFilename )
// Switch the locale to standard C (needed to print floating point numbers)
LOCALE_IO
toggle
;
loadFileModel
(
NULL
);
loadFileModel
(
S3D_MESH_PTR
()
);
fclose
(
m_file
);
...
...
@@ -107,7 +107,7 @@ bool VRML2_MODEL_PARSER::Load( const wxString& aFilename )
}
bool
VRML2_MODEL_PARSER
::
Load
(
const
wxString
&
aFilename
,
S3D_MESH
*
aTransformationModel
)
bool
VRML2_MODEL_PARSER
::
Load
(
const
wxString
&
aFilename
,
S3D_MESH
_PTR
aTransformationModel
)
{
if
(
aTransformationModel
)
{
...
...
@@ -141,7 +141,7 @@ bool VRML2_MODEL_PARSER::Load( const wxString& aFilename, S3D_MESH *aTransformat
}
int
VRML2_MODEL_PARSER
::
loadFileModel
(
S3D_MESH
*
aTransformationModel
)
int
VRML2_MODEL_PARSER
::
loadFileModel
(
S3D_MESH
_PTR
aTransformationModel
)
{
char
text
[
BUFLINE_SIZE
];
...
...
@@ -156,9 +156,9 @@ int VRML2_MODEL_PARSER::loadFileModel( S3D_MESH *aTransformationModel )
if
(
strcmp
(
text
,
"Transform"
)
==
0
)
{
m_model
=
new
S3D_MESH
(
);
m_model
.
reset
(
new
S3D_MESH
()
);
S3D_MESH
*
save_ptr
=
m_model
;
S3D_MESH
_PTR
save_ptr
(
m_model
)
;
if
(
read_Transform
()
==
0
)
{
...
...
@@ -167,12 +167,12 @@ int VRML2_MODEL_PARSER::loadFileModel( S3D_MESH *aTransformationModel )
if
(
((
m_model
->
m_Point
.
size
()
==
0
)
||
(
m_model
->
m_CoordIndex
.
size
()
==
0
))
&&
(
m_model
->
childs
.
size
()
==
0
)
)
{
delete
m_model
;
m_model
.
reset
()
;
wxLogTrace
(
traceVrmlV2Parser
,
m_debugSpacer
+
wxT
(
"loadFileModel: skipping model with no points or childs"
)
);
}
else
{
if
(
aTransformationModel
)
if
(
aTransformationModel
.
get
()
!=
NULL
)
{
m_model
->
m_translation
=
aTransformationModel
->
m_translation
;
m_model
->
m_rotation
=
aTransformationModel
->
m_rotation
;
...
...
@@ -187,14 +187,14 @@ int VRML2_MODEL_PARSER::loadFileModel( S3D_MESH *aTransformationModel )
}
else
{
delete
m_model
;
m_model
.
reset
()
;
}
}
else
if
(
strcmp
(
text
,
"DEF"
)
==
0
)
{
m_model
=
new
S3D_MESH
(
);
m_model
.
reset
(
new
S3D_MESH
()
);
S3D_MESH
*
save_ptr
=
m_model
;
S3D_MESH
_PTR
save_ptr
(
m_model
)
;
if
(
read_DEF
()
==
0
)
{
...
...
@@ -203,12 +203,12 @@ int VRML2_MODEL_PARSER::loadFileModel( S3D_MESH *aTransformationModel )
if
(
((
m_model
->
m_Point
.
size
()
==
0
)
||
(
m_model
->
m_CoordIndex
.
size
()
==
0
))
&&
(
m_model
->
childs
.
size
()
==
0
)
)
{
delete
m_model
;
m_model
.
reset
()
;
wxLogTrace
(
traceVrmlV2Parser
,
m_debugSpacer
+
wxT
(
"loadFileModel: skipping model with no points or childs"
)
);
}
else
{
if
(
aTransformationModel
)
if
(
aTransformationModel
.
get
()
!=
NULL
)
{
m_model
->
m_translation
=
aTransformationModel
->
m_translation
;
m_model
->
m_rotation
=
aTransformationModel
->
m_rotation
;
...
...
@@ -223,14 +223,14 @@ int VRML2_MODEL_PARSER::loadFileModel( S3D_MESH *aTransformationModel )
}
else
{
delete
m_model
;
m_model
.
reset
()
;
}
}
else
if
(
strcmp
(
text
,
"Shape"
)
==
0
)
{
m_model
=
new
S3D_MESH
(
);
m_model
.
reset
(
new
S3D_MESH
()
);
S3D_MESH
*
save_ptr
=
m_model
;
S3D_MESH
_PTR
save_ptr
=
m_model
;
if
(
read_Shape
()
==
0
)
{
...
...
@@ -239,12 +239,12 @@ int VRML2_MODEL_PARSER::loadFileModel( S3D_MESH *aTransformationModel )
if
(
((
m_model
->
m_Point
.
size
()
==
0
)
||
(
m_model
->
m_CoordIndex
.
size
()
==
0
))
&&
(
m_model
->
childs
.
size
()
==
0
)
)
{
delete
m_model
;
m_model
.
reset
()
;
wxLogTrace
(
traceVrmlV2Parser
,
m_debugSpacer
+
wxT
(
"loadFileModel: skipping model with no points or childs"
)
);
}
else
{
if
(
aTransformationModel
)
if
(
aTransformationModel
.
get
()
!=
NULL
)
{
m_model
->
m_translation
=
aTransformationModel
->
m_translation
;
m_model
->
m_rotation
=
aTransformationModel
->
m_rotation
;
...
...
@@ -261,7 +261,7 @@ int VRML2_MODEL_PARSER::loadFileModel( S3D_MESH *aTransformationModel )
}
else
{
delete
m_model
;
m_model
.
reset
()
;
}
}
}
...
...
@@ -279,7 +279,7 @@ int VRML2_MODEL_PARSER::loadFileModel( S3D_MESH *aTransformationModel )
for
(
VRML2_DEF_GROUP_MAP
::
iterator
groupIt
=
m_defGroupMap
.
begin
();
groupIt
!=
m_defGroupMap
.
end
();
++
groupIt
)
{
wxString
groupName
=
groupIt
->
first
;
S3D_MESH
*
ptrModel
=
groupIt
->
second
;
S3D_MESH
_PTR
ptrModel
(
groupIt
->
second
)
;
if
(
((
ptrModel
->
m_Point
.
size
()
==
0
)
||
(
ptrModel
->
m_CoordIndex
.
size
()
==
0
))
&&
...
...
@@ -326,9 +326,9 @@ int VRML2_MODEL_PARSER::read_Transform()
if
(
strcmp
(
text
,
"Transform"
)
==
0
)
{
m_model
=
new
S3D_MESH
(
);
m_model
.
reset
(
new
S3D_MESH
()
);
S3D_MESH
*
save_ptr
=
m_model
;
S3D_MESH
_PTR
save_ptr
(
m_model
)
;
if
(
read_Transform
()
==
0
)
{
...
...
@@ -337,7 +337,7 @@ int VRML2_MODEL_PARSER::read_Transform()
if
(
((
m_model
->
m_Point
.
size
()
==
0
)
||
(
m_model
->
m_CoordIndex
.
size
()
==
0
))
&&
(
m_model
->
childs
.
size
()
==
0
)
)
{
delete
m_model
;
m_model
.
reset
()
;
wxLogTrace
(
traceVrmlV2Parser
,
m_debugSpacer
+
wxT
(
"read_Transform: skipping model with no points or childs"
)
);
}
else
...
...
@@ -352,7 +352,7 @@ int VRML2_MODEL_PARSER::read_Transform()
}
else
{
delete
m_model
;
m_model
.
reset
()
;
}
}
else
if
(
strcmp
(
text
,
"translation"
)
==
0
)
...
...
@@ -463,14 +463,14 @@ int VRML2_MODEL_PARSER::read_Transform()
else
if
(
strcmp
(
text
,
"Shape"
)
==
0
)
{
// Save the pointer
S3D_MESH
*
parent
=
m_model
;
S3D_MESH
_PTR
parent
(
m_model
)
;
S3D_MESH
*
new_mesh_model
=
new
S3D_MESH
(
);
S3D_MESH
_PTR
new_mesh_model
(
new
S3D_MESH
()
);
// Assign the current pointer
m_model
=
new_mesh_model
;
S3D_MESH
*
save_ptr
=
m_model
;
S3D_MESH
_PTR
save_ptr
=
m_model
;
if
(
read_Shape
()
==
0
)
{
...
...
@@ -481,7 +481,7 @@ int VRML2_MODEL_PARSER::read_Transform()
if
(
((
m_model
->
m_Point
.
size
()
==
0
)
||
(
m_model
->
m_CoordIndex
.
size
()
==
0
))
&&
(
m_model
->
childs
.
size
()
==
0
)
)
{
delete
m_model
;
m_model
.
reset
()
;
wxLogTrace
(
traceVrmlV2Parser
,
m_debugSpacer
+
wxT
(
"read_Transform: Shape, skipping model with no points or childs"
)
);
}
else
...
...
@@ -496,14 +496,14 @@ int VRML2_MODEL_PARSER::read_Transform()
}
else
{
delete
m_model
;
m_model
.
reset
()
;
wxLogTrace
(
traceVrmlV2Parser
,
m_debugSpacer
+
wxT
(
"read_Transform: Shape, discard child."
)
);
}
}
else
{
delete
m_model
;
m_model
.
reset
()
;
}
m_model
=
parent
;
...
...
@@ -540,7 +540,7 @@ int VRML2_MODEL_PARSER::read_Transform()
return
-
1
;
}
S3D_MESH
*
ptrModel
=
groupIt
->
second
;
S3D_MESH
_PTR
ptrModel
(
groupIt
->
second
)
;
if
(
((
ptrModel
->
m_Point
.
size
()
==
0
)
||
(
ptrModel
->
m_CoordIndex
.
size
()
==
0
))
&&
(
ptrModel
->
childs
.
size
()
==
0
)
)
...
...
@@ -778,14 +778,14 @@ int VRML2_MODEL_PARSER::read_DEF()
wxLogTrace
(
traceVrmlV2Parser
,
m_debugSpacer
+
wxT
(
"Shape"
)
);
// Save the pointer
S3D_MESH
*
parent
=
m_model
;
S3D_MESH
_PTR
parent
=
m_model
;
S3D_MESH
*
new_mesh_model
=
new
S3D_MESH
(
);
S3D_MESH
_PTR
new_mesh_model
(
new
S3D_MESH
()
);
// Assign the current pointer
m_model
=
new_mesh_model
;
S3D_MESH
*
save_ptr
=
m_model
;
S3D_MESH
_PTR
save_ptr
=
m_model
;
if
(
read_Shape
()
==
0
)
{
...
...
@@ -794,7 +794,7 @@ int VRML2_MODEL_PARSER::read_DEF()
if
(
((
m_model
->
m_Point
.
size
()
==
0
)
||
(
m_model
->
m_CoordIndex
.
size
()
==
0
))
&&
(
m_model
->
childs
.
size
()
==
0
)
)
{
delete
m_model
;
m_model
.
reset
()
;
wxLogTrace
(
traceVrmlV2Parser
,
m_debugSpacer
+
wxT
(
"read_DEF: Shape, skipping model with no points or childs"
)
);
}
else
...
...
@@ -809,7 +809,7 @@ int VRML2_MODEL_PARSER::read_DEF()
}
else
{
delete
m_model
;
m_model
.
reset
()
;
}
m_model
=
parent
;
...
...
@@ -824,9 +824,9 @@ int VRML2_MODEL_PARSER::read_DEF()
wxLogTrace
(
traceVrmlV2Parser
,
m_debugSpacer
+
wxT
(
"Group %s"
),
tagName
);
// Save the pointer
S3D_MESH
*
parent
=
m_model
;
S3D_MESH
_PTR
parent
=
m_model
;
S3D_MESH
*
new_mesh_model
=
new
S3D_MESH
(
);
S3D_MESH
_PTR
new_mesh_model
(
new
S3D_MESH
()
);
// Assign the current pointer
m_model
=
new_mesh_model
;
...
...
@@ -848,7 +848,7 @@ int VRML2_MODEL_PARSER::read_DEF()
}
else
{
delete
m_model
;
m_model
.
reset
()
;
}
// Restore current model pointer
...
...
3d-viewer/vrmlmodelparser.cpp
View file @
ae57c469
...
...
@@ -45,14 +45,6 @@ VRML_MODEL_PARSER::VRML_MODEL_PARSER( S3D_MASTER* aMaster ) :
VRML_MODEL_PARSER
::~
VRML_MODEL_PARSER
()
{
for
(
unsigned
int
idx
=
0
;
idx
<
childs
.
size
();
idx
++
)
{
if
(
childs
[
idx
]
)
{
delete
childs
[
idx
];
childs
[
idx
]
=
0
;
}
}
}
bool
VRML_MODEL_PARSER
::
Load
(
const
wxString
&
aFilename
)
...
...
3d-viewer/x3dmodelparser.cpp
View file @
ae57c469
...
...
@@ -52,20 +52,12 @@ static const wxChar* traceX3DParser = wxT( "KI_TRACE_X3D_PARSER" );
X3D_MODEL_PARSER
::
X3D_MODEL_PARSER
(
S3D_MASTER
*
aMaster
)
:
S3D_MODEL_PARSER
(
aMaster
)
{
m_model
=
NULL
;
m_model
.
reset
()
;
}
X3D_MODEL_PARSER
::~
X3D_MODEL_PARSER
()
{
for
(
unsigned
int
idx
=
0
;
idx
<
childs
.
size
();
idx
++
)
{
if
(
childs
[
idx
]
)
{
delete
childs
[
idx
];
childs
[
idx
]
=
0
;
}
}
}
...
...
@@ -102,7 +94,7 @@ bool X3D_MODEL_PARSER::Load( const wxString& aFilename )
node_it
!=
transforms
.
end
();
node_it
++
)
{
m_model
=
new
S3D_MESH
(
);
m_model
.
reset
(
new
S3D_MESH
()
);
childs
.
push_back
(
m_model
);
readTransform
(
*
node_it
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment