Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
OpenWalnut Core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
44
Issues
44
List
Boards
Labels
Service Desk
Milestones
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
OpenWalnut
OpenWalnut Core
Commits
a73d8acb
Commit
a73d8acb
authored
Oct 07, 2010
by
schurade
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[CHANGE] moved the fiber drawable to graphics engine to make it available for other modules
parent
d29d5594
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
102 additions
and
133 deletions
+102
-133
src/graphicsEngine/WFiberDrawable.cpp
src/graphicsEngine/WFiberDrawable.cpp
+22
-55
src/graphicsEngine/WFiberDrawable.h
src/graphicsEngine/WFiberDrawable.h
+40
-48
src/kernel/WFiberSelector.cpp
src/kernel/WFiberSelector.cpp
+15
-10
src/kernel/WFiberSelector.h
src/kernel/WFiberSelector.h
+0
-14
src/modules/fiberDisplay/WMFiberDisplay.cpp
src/modules/fiberDisplay/WMFiberDisplay.cpp
+23
-4
src/modules/fiberDisplay/WMFiberDisplay.h
src/modules/fiberDisplay/WMFiberDisplay.h
+2
-2
No files found.
src/
modules/fiberDisplay
/WFiberDrawable.cpp
→
src/
graphicsEngine
/WFiberDrawable.cpp
View file @
a73d8acb
...
...
@@ -24,8 +24,8 @@
#include <vector>
#include "../
../dataHandler/WDataSetFibers
.h"
#include "../../kernel/WKernel.h"
#include "../
kernel/WKernel
.h"
#include "WFiberDrawable.h"
// The constructor here does nothing. One thing that may be necessary is
...
...
@@ -35,9 +35,7 @@
// time (that is, the vertices drawn change from time to time).
WFiberDrawable
::
WFiberDrawable
()
:
osg
::
Drawable
(),
m_useTubes
(
false
),
m_globalColoring
(
true
),
m_customColoring
(
false
)
m_useTubes
(
false
)
{
setSupportsDisplayList
(
false
);
// This contructor intentionally left blank. Duh.
...
...
@@ -85,35 +83,17 @@ void WFiberDrawable::drawImplementation( osg::RenderInfo& renderInfo ) const //N
void
WFiberDrawable
::
drawFibers
(
osg
::
RenderInfo
&
renderInfo
)
const
//NOLINT
{
boost
::
shared_ptr
<
std
::
vector
<
size_t
>
>
startIndexes
=
m_dataset
->
getLineStartIndexes
();
boost
::
shared_ptr
<
std
::
vector
<
size_t
>
>
pointsPerLine
=
m_dataset
->
getLineLengths
();
boost
::
shared_ptr
<
std
::
vector
<
float
>
>
verts
=
m_dataset
->
getVertices
();
boost
::
shared_ptr
<
std
::
vector
<
float
>
>
tangents
=
m_dataset
->
getTangents
();
boost
::
shared_ptr
<
std
::
vector
<
float
>
>
colors
;
if
(
m_customColoring
)
{
colors
=
colors
=
m_dataset
->
getColorScheme
(
"Custom Color"
)
->
getColor
();
}
else
{
colors
=
(
m_globalColoring
?
m_dataset
->
getGlobalColors
()
:
m_dataset
->
getLocalColors
()
);
}
boost
::
shared_ptr
<
std
::
vector
<
bool
>
>
active
=
m_fiberSelector
->
getBitfield
();
osg
::
State
&
state
=
*
renderInfo
.
getState
();
state
.
disableAllVertexArrays
();
state
.
setVertexPointer
(
3
,
GL_FLOAT
,
0
,
&
(
*
verts
)[
0
]
);
state
.
setColorPointer
(
3
,
GL_FLOAT
,
0
,
&
(
*
colors
)[
0
]
);
state
.
setNormalPointer
(
GL_FLOAT
,
0
,
&
(
*
tangents
)[
0
]
);
for
(
size_t
i
=
0
;
i
<
active
->
size
();
++
i
)
state
.
setVertexPointer
(
3
,
GL_FLOAT
,
0
,
&
(
*
m_
verts
)[
0
]
);
state
.
setColorPointer
(
3
,
GL_FLOAT
,
0
,
&
(
*
m_
colors
)[
0
]
);
state
.
setNormalPointer
(
GL_FLOAT
,
0
,
&
(
*
m_
tangents
)[
0
]
);
for
(
size_t
i
=
0
;
i
<
m_
active
->
size
();
++
i
)
{
if
(
(
*
active
)[
i
]
)
if
(
(
*
m_
active
)[
i
]
)
{
state
.
glDrawArraysInstanced
(
GL_LINE_STRIP
,
(
*
startIndexes
)[
i
],
(
*
pointsPerLine
)[
i
],
1
);
state
.
glDrawArraysInstanced
(
GL_LINE_STRIP
,
(
*
m_startIndexes
)[
i
],
(
*
m_
pointsPerLine
)[
i
],
1
);
}
}
...
...
@@ -123,38 +103,20 @@ void WFiberDrawable::drawFibers( osg::RenderInfo& renderInfo ) const //NOLINT
void
WFiberDrawable
::
drawTubes
()
const
{
boost
::
shared_ptr
<
std
::
vector
<
size_t
>
>
startIndexes
=
m_dataset
->
getLineStartIndexes
();
boost
::
shared_ptr
<
std
::
vector
<
size_t
>
>
pointsPerLine
=
m_dataset
->
getLineLengths
();
boost
::
shared_ptr
<
std
::
vector
<
float
>
>
verts
=
m_dataset
->
getVertices
();
boost
::
shared_ptr
<
std
::
vector
<
float
>
>
tangents
=
m_dataset
->
getTangents
();
boost
::
shared_ptr
<
std
::
vector
<
float
>
>
colors
;
if
(
m_customColoring
)
{
colors
=
m_dataset
->
getColorScheme
(
"Custom Color"
)
->
getColor
();
}
else
for
(
size_t
i
=
0
;
i
<
m_active
->
size
();
++
i
)
{
colors
=
(
m_globalColoring
?
m_dataset
->
getGlobalColors
()
:
m_dataset
->
getLocalColors
()
);
}
boost
::
shared_ptr
<
std
::
vector
<
bool
>
>
active
=
m_fiberSelector
->
getBitfield
();
for
(
size_t
i
=
0
;
i
<
active
->
size
();
++
i
)
{
if
(
active
->
at
(
i
)
)
if
(
(
*
m_active
)[
i
]
)
{
glBegin
(
GL_QUAD_STRIP
);
int
idx
=
startIndexes
->
at
(
i
)
*
3
;
for
(
size_t
k
=
0
;
k
<
pointsPerLine
->
at
(
i
);
++
k
)
int
idx
=
m_
startIndexes
->
at
(
i
)
*
3
;
for
(
size_t
k
=
0
;
k
<
m_
pointsPerLine
->
at
(
i
);
++
k
)
{
glNormal3f
(
tangents
->
at
(
idx
),
tangents
->
at
(
idx
+
1
),
tangents
->
at
(
idx
+
2
)
);
glColor3f
(
colors
->
at
(
idx
),
colors
->
at
(
idx
+
1
),
colors
->
at
(
idx
+
2
)
);
glNormal3f
(
m_tangents
->
at
(
idx
),
m_tangents
->
at
(
idx
+
1
),
m_
tangents
->
at
(
idx
+
2
)
);
glColor3f
(
m_colors
->
at
(
idx
),
m_colors
->
at
(
idx
+
1
),
m_
colors
->
at
(
idx
+
2
)
);
glTexCoord1f
(
-
1.0
f
);
glVertex3f
(
verts
->
at
(
idx
),
verts
->
at
(
idx
+
1
),
verts
->
at
(
idx
+
2
)
);
glVertex3f
(
m_verts
->
at
(
idx
),
m_verts
->
at
(
idx
+
1
),
m_
verts
->
at
(
idx
+
2
)
);
glTexCoord1f
(
1.0
f
);
glVertex3f
(
verts
->
at
(
idx
),
verts
->
at
(
idx
+
1
),
verts
->
at
(
idx
+
2
)
);
glVertex3f
(
m_verts
->
at
(
idx
),
m_verts
->
at
(
idx
+
1
),
m_
verts
->
at
(
idx
+
2
)
);
idx
+=
3
;
//
}
...
...
@@ -162,3 +124,8 @@ void WFiberDrawable::drawTubes() const
}
}
}
void
WFiberDrawable
::
setDataset
(
boost
::
shared_ptr
<
const
WDataSetFibers
>
dataset
)
{
m_dataset
=
dataset
;
}
src/
modules/fiberDisplay
/WFiberDrawable.h
→
src/
graphicsEngine
/WFiberDrawable.h
View file @
a73d8acb
...
...
@@ -35,12 +35,8 @@
#include <osg/ShapeDrawable>
#include <osg/Group>
#include "../../kernel/WFiberSelector.h"
class
WDataSetFibers
;
/**
*
TODO(schurade): Document this!
*
Class implements an osg::Drawable that paints fiber representations either using lines or tubes
*/
class
WFiberDrawable
:
public
osg
::
Drawable
{
...
...
@@ -108,49 +104,46 @@ public:
void
setUseTubes
(
bool
flag
);
/**
* Set the coloring modes of the fibers.
*
* \param globalColoring If true is given global coloring is applied ( default ), else local coloring
* Set the bounding box of all fibers.
* \param bb The new bounding box.
*/
void
set
ColoringMode
(
bool
globalColoring
);
void
set
BoundingBox
(
const
osg
::
BoundingBox
&
bb
);
/**
* Set the use of custom colors
*
* \param custom
* setter
* \param bitField selected fibers to draw
*/
void
set
CustomColoring
(
bool
custom
);
void
set
Bitfield
(
boost
::
shared_ptr
<
std
::
vector
<
bool
>
>
bitField
);
/**
* In which mode coloring for the fibers is applied.
*
* \return True for global, false for local coloring
* setter
* \param idx
*/
bool
getColoringMode
()
const
;
void
setStartIndexes
(
boost
::
shared_ptr
<
std
::
vector
<
size_t
>
>
idx
)
;
/**
*
Set the bounding box of all fibers.
* \param
bb The new bounding box.
*
setter
* \param
ppl
*/
void
set
BoundingBox
(
const
osg
::
BoundingBox
&
bb
);
void
set
PointsPerLine
(
boost
::
shared_ptr
<
std
::
vector
<
size_t
>
>
ppl
);
/**
* setter
* \param
bitField selected fibers to draw
* \param
verts
*/
void
set
Bitfield
(
boost
::
shared_ptr
<
std
::
vector
<
bool
>
>
bitField
);
void
set
Verts
(
boost
::
shared_ptr
<
std
::
vector
<
float
>
>
verts
);
/**
* setter
* \param
selector the selector object which provides the bitfield for fiber selection
* \param
tangents
*/
void
set
Selector
(
boost
::
shared_ptr
<
WFiberSelector
>
selector
);
void
set
Tangents
(
boost
::
shared_ptr
<
std
::
vector
<
float
>
>
tangents
);
/**
* setter
* \param color
s
* \param color
*/
void
setC
ustomColors
(
boost
::
shared_ptr
<
std
::
vector
<
float
>
>
colors
);
void
setC
olor
(
boost
::
shared_ptr
<
std
::
vector
<
float
>
>
color
);
protected:
private:
...
...
@@ -172,54 +165,53 @@ private:
bool
m_useTubes
;
//!< flag
bool
m_globalColoring
;
//!< True indicates global, false local coloring
bool
m_customColoring
;
//!< True indicates use of custom colors
boost
::
shared_ptr
<
std
::
vector
<
bool
>
>
m_active
;
//!< pointer to the bitfield of active fibers
boost
::
shared_ptr
<
WFiberSelector
>
m_fiberSelector
;
//!< the selector object which provides the bitfield for fiber selection
boost
::
shared_ptr
<
std
::
vector
<
size_t
>
>
m_startIndexes
;
//!< pointer to the field of line start indexes
boost
::
shared_ptr
<
std
::
vector
<
size_t
>
>
m_pointsPerLine
;
//!< pointer to the field of points per line
boost
::
shared_ptr
<
std
::
vector
<
float
>
>
m_verts
;
//!< pointer to the field of vertexes
boost
::
shared_ptr
<
std
::
vector
<
float
>
>
m_tangents
;
//!< pointer to the field of line tangents
boost
::
shared_ptr
<
std
::
vector
<
float
>
>
m_colors
;
//!< pointer to the field of colors per vertex
};
inline
void
WFiberDrawable
::
set
Dataset
(
boost
::
shared_ptr
<
const
WDataSetFibers
>
dataset
)
inline
void
WFiberDrawable
::
set
UseTubes
(
bool
flag
)
{
m_
dataset
=
dataset
;
m_
useTubes
=
flag
;
}
inline
void
WFiberDrawable
::
set
UseTubes
(
bool
flag
)
inline
void
WFiberDrawable
::
set
BoundingBox
(
const
osg
::
BoundingBox
&
bb
)
{
m_useTubes
=
flag
;
setBound
(
bb
)
;
}
inline
void
WFiberDrawable
::
set
ColoringMode
(
bool
globalColoring
)
inline
void
WFiberDrawable
::
set
Bitfield
(
boost
::
shared_ptr
<
std
::
vector
<
bool
>
>
bitField
)
{
m_
globalColoring
=
globalColoring
;
m_
active
=
bitField
;
}
inline
bool
WFiberDrawable
::
getColoringMode
()
const
inline
void
WFiberDrawable
::
setStartIndexes
(
boost
::
shared_ptr
<
std
::
vector
<
size_t
>
>
idx
)
{
return
m_globalColoring
;
m_startIndexes
=
idx
;
}
inline
void
WFiberDrawable
::
set
CustomColoring
(
bool
custom
)
inline
void
WFiberDrawable
::
set
PointsPerLine
(
boost
::
shared_ptr
<
std
::
vector
<
size_t
>
>
ppl
)
{
m_
customColoring
=
custom
;
m_
pointsPerLine
=
ppl
;
}
inline
void
WFiberDrawable
::
set
BoundingBox
(
const
osg
::
BoundingBox
&
bb
)
inline
void
WFiberDrawable
::
set
Verts
(
boost
::
shared_ptr
<
std
::
vector
<
float
>
>
verts
)
{
setBound
(
bb
)
;
m_verts
=
verts
;
}
inline
void
WFiberDrawable
::
set
Bitfield
(
boost
::
shared_ptr
<
std
::
vector
<
bool
>
>
bitField
)
inline
void
WFiberDrawable
::
set
Tangents
(
boost
::
shared_ptr
<
std
::
vector
<
float
>
>
tangents
)
{
m_
active
=
bitField
;
m_
tangents
=
tangents
;
}
inline
void
WFiberDrawable
::
set
Selector
(
boost
::
shared_ptr
<
WFiberSelector
>
select
or
)
inline
void
WFiberDrawable
::
set
Color
(
boost
::
shared_ptr
<
std
::
vector
<
float
>
>
col
or
)
{
m_
fiberSelector
=
select
or
;
m_
colors
=
col
or
;
}
#endif // WFIBERDRAWABLE_H
src/kernel/WFiberSelector.cpp
View file @
a73d8acb
...
...
@@ -136,28 +136,33 @@ void WFiberSelector::recalculate()
{
if
(
m_branches
.
empty
()
)
{
m_outputBitfield
=
boost
::
shared_ptr
<
std
::
vector
<
bool
>
>
(
new
std
::
vector
<
bool
>
(
m_size
,
true
)
);
return
;
m_workerBitfield
=
boost
::
shared_ptr
<
std
::
vector
<
bool
>
>
(
new
std
::
vector
<
bool
>
(
m_size
,
true
)
);
}
else
{
m_workerBitfield
=
boost
::
shared_ptr
<
std
::
vector
<
bool
>
>
(
new
std
::
vector
<
bool
>
(
m_size
,
false
)
);
}
for
(
std
::
list
<
boost
::
shared_ptr
<
WSelectorBranch
>
>::
iterator
iter
=
m_branches
.
begin
();
iter
!=
m_branches
.
end
();
++
iter
)
{
boost
::
shared_ptr
<
std
::
vector
<
bool
>
>
bf
=
(
*
iter
)
->
getBitField
();
for
(
s
ize_t
i
=
0
;
i
<
m_size
;
++
i
)
for
(
s
td
::
list
<
boost
::
shared_ptr
<
WSelectorBranch
>
>::
iterator
iter
=
m_branches
.
begin
();
iter
!=
m_branches
.
end
();
++
iter
)
{
(
*
m_workerBitfield
)[
i
]
=
(
*
m_workerBitfield
)[
i
]
|
(
*
bf
)[
i
];
boost
::
shared_ptr
<
std
::
vector
<
bool
>
>
bf
=
(
*
iter
)
->
getBitField
();
for
(
size_t
i
=
0
;
i
<
m_size
;
++
i
)
{
(
*
m_workerBitfield
)[
i
]
=
(
*
m_workerBitfield
)[
i
]
|
(
*
bf
)[
i
];
}
}
}
for
(
size_t
i
=
0
;
i
<
m_size
;
++
i
)
{
(
*
m_outputBitfield
)[
i
]
=
(
*
m_workerBitfield
)[
i
];
}
m_dirty
=
false
;
m_outputBitfield
=
m_workerBitfield
;
//
m_outputBitfield = m_workerBitfield;
}
void
WFiberSelector
::
setDirty
()
{
recalculate
();
m_dirty
=
true
;
}
src/kernel/WFiberSelector.h
View file @
a73d8acb
...
...
@@ -102,20 +102,6 @@ protected:
*/
void
slotRemoveBranch
(
boost
::
shared_ptr
<
WRMBranch
>
branch
);
/**
* setter
* \param colors
*/
void
setCustomColors
(
boost
::
shared_ptr
<
std
::
vector
<
float
>
>
colors
);
/**
* getter
* \return colors
*/
boost
::
shared_ptr
<
std
::
vector
<
float
>
>
getCustomColors
();
private:
/**
* update the bitfield when there was a change in the roi structure
...
...
src/modules/fiberDisplay/WMFiberDisplay.cpp
View file @
a73d8acb
...
...
@@ -282,14 +282,20 @@ void WMFiberDisplay::create()
osg
::
ref_ptr
<
osg
::
Group
>
osgNodeNew
=
osg
::
ref_ptr
<
osg
::
Group
>
(
new
osg
::
Group
);
m_fiberDrawable
=
osg
::
ref_ptr
<
WFiberDrawable
>
(
new
WFiberDrawable
);
m_fiberDrawable
->
setSelector
(
m_fiberSelector
);
m_fiberDrawable
->
setBoundingBox
(
osg
::
BoundingBox
(
m_dataset
->
getBoundingBox
().
first
[
0
],
m_dataset
->
getBoundingBox
().
first
[
1
],
m_dataset
->
getBoundingBox
().
first
[
2
],
m_dataset
->
getBoundingBox
().
second
[
0
],
m_dataset
->
getBoundingBox
().
second
[
1
],
m_dataset
->
getBoundingBox
().
second
[
2
]
)
);
m_fiberDrawable
->
setDataset
(
m_dataset
);
m_fiberDrawable
->
setStartIndexes
(
m_dataset
->
getLineStartIndexes
()
);
m_fiberDrawable
->
setPointsPerLine
(
m_dataset
->
getLineLengths
()
);
m_fiberDrawable
->
setVerts
(
m_dataset
->
getVertices
()
);
m_fiberDrawable
->
setTangents
(
m_dataset
->
getTangents
()
);
m_fiberDrawable
->
setColor
(
m_dataset
->
getGlobalColors
()
);
m_fiberDrawable
->
setBitfield
(
m_fiberSelector
->
getBitfield
()
);
m_fiberDrawable
->
setUseDisplayList
(
false
);
m_fiberDrawable
->
setDataVariance
(
osg
::
Object
::
DYNAMIC
);
...
...
@@ -395,8 +401,21 @@ void WMFiberDisplay::toggleColoring()
{
if
(
m_coloring
->
changed
()
||
m_customColoring
->
changed
()
)
{
m_fiberDrawable
->
setColoringMode
(
m_coloring
->
get
(
true
)
);
m_fiberDrawable
->
setCustomColoring
(
m_customColoring
->
get
(
true
)
);
if
(
m_customColoring
->
get
(
true
)
)
{
m_fiberDrawable
->
setColor
(
m_dataset
->
getColorScheme
(
"Custom Color"
)
->
getColor
()
);
}
else
{
if
(
m_coloring
->
get
(
true
)
)
{
m_fiberDrawable
->
setColor
(
m_dataset
->
getGlobalColors
()
);
}
else
{
m_fiberDrawable
->
setColor
(
m_dataset
->
getLocalColors
()
);
}
}
}
}
...
...
src/modules/fiberDisplay/WMFiberDisplay.h
View file @
a73d8acb
...
...
@@ -30,6 +30,8 @@
#include <osg/Geode>
#include "../../dataHandler/WDataSetFibers.h"
#include "../../graphicsEngine/WFiberDrawable.h"
#include "../../graphicsEngine/WROI.h"
#include "../../graphicsEngine/WROIBox.h"
#include "../../graphicsEngine/WShader.h"
...
...
@@ -38,8 +40,6 @@
#include "../../kernel/WModule.h"
#include "../../kernel/WModuleInputData.h"
#include "WFiberDrawable.h"
/**
* Module for drawing fibers
*
...
...
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