Text archives Help
- From: abe@sci.utah.edu
- To: manta@sci.utah.edu
- Subject: [MANTA] r951 - in trunk: Interface Model/Readers fox/afr_demo/Engine/Control fox/afr_demo/Engine/ImageTraversers
- Date: Wed, 22 Feb 2006 01:44:51 -0700 (MST)
Author: abe
Date: Wed Feb 22 01:44:50 2006
New Revision: 951
Modified:
trunk/Interface/MantaInterface.h
trunk/Model/Readers/CMakeLists.txt
trunk/Model/Readers/V3C1.cc
trunk/Model/Readers/V3C1.h
trunk/fox/afr_demo/Engine/Control/AFRPipeline.cc
trunk/fox/afr_demo/Engine/Control/AFRPipeline.h
trunk/fox/afr_demo/Engine/ImageTraversers/AFRImageTraverser.cc
Log:
Added addParallelOneShot callback to MantaInterface. This functionality is
used by the grid building code.
M Interface/MantaInterface.h
Added Parallel One Shot callbacks to the AfrPipeline.
M fox/afr_demo/Engine/Control/AFRPipeline.cc
M fox/afr_demo/Engine/Control/AFRPipeline.h
M fox/afr_demo/Engine/ImageTraversers/AFRImageTraverser.cc
Fixed linking error with loading functions in V3C1.cc
M Model/Readers/V3C1.cc
M Model/Readers/V3C1.h
M Model/Readers/CMakeLists.txt
Modified: trunk/Interface/MantaInterface.h
==============================================================================
--- trunk/Interface/MantaInterface.h (original)
+++ trunk/Interface/MantaInterface.h Wed Feb 22 01:44:50 2006
@@ -128,6 +128,8 @@
};
virtual void addOneShotCallback(Whence whence, long frame,
CallbackBase_2Data<int, int>* callback) =
0;
+ virtual void addParallelOneShotCallback(Whence whence, long frame,
+ CallbackBase_2Data<int, int>* callback) = 0;
virtual void registerSetupCallback(SetupCallback*) = 0;
virtual void registerSerialAnimationCallback(CallbackBase_3Data<int,
int, bool&>*) = 0;
virtual void registerParallelAnimationCallback(CallbackBase_3Data<int,
int, bool&>*) = 0;
Modified: trunk/Model/Readers/CMakeLists.txt
==============================================================================
--- trunk/Model/Readers/CMakeLists.txt (original)
+++ trunk/Model/Readers/CMakeLists.txt Wed Feb 22 01:44:50 2006
@@ -8,6 +8,8 @@
Readers/BART/parse.cc
Readers/BART/quat.c
Readers/PlyReader.cc
+ Readers/V3C1.h
+ Readers/V3C1.cc
)
Modified: trunk/Model/Readers/V3C1.cc
==============================================================================
--- trunk/Model/Readers/V3C1.cc (original)
+++ trunk/Model/Readers/V3C1.cc Wed Feb 22 01:44:50 2006
@@ -29,43 +29,52 @@
#include <Model/Readers/V3C1.h>
#include <Core/Util/Endian.h>
+#include <Core/Exceptions/InputError.h>
#include <SCIRun/Core/Containers/Array1.h>
+#include <SCIRun/Core/Exceptions/ErrnoException.h>
#include <string>
+#include <errno.h>
using namespace SCIRun;
using namespace std;
using namespace Manta;
-size_t fread_64(void *ptr, size_t size, size_t nitems, FILE *stream);
+namespace V3c1 {
+ size_t fread_64(void *ptr, size_t size, size_t nitems, FILE *stream);
+};
///////////////////////////////////////////////////////////////////////////////
// Endian swapping for V3C1 structs.
-template<>
-inline V3C1Triangle endian_swap( const V3C1Triangle &in ) {
+namespace Manta {
+ template<>
+ inline V3C1Triangle endian_swap( const V3C1Triangle &in ) {
+
+ V3C1Triangle out;
+
+ out.vertex[0] = endian_swap( in.vertex[0] );
+ out.vertex[1] = endian_swap( in.vertex[1] );
+ out.vertex[2] = endian_swap( in.vertex[2] );
+ out.color = endian_swap( in.color );
- V3C1Triangle out;
-
- out.vertex[0] = endian_swap( in.vertex[0] );
- out.vertex[1] = endian_swap( in.vertex[1] );
- out.vertex[2] = endian_swap( in.vertex[2] );
- out.color = endian_swap( in.color );
+ return out;
+ }
}
-
///////////////////////////////////////////////////////////////////////////////
-//
-void v3c1_load_triangles( Array1<V3C1Triangle> &array, const string &prefix
) {
-
+//
+extern "C"
+void Manta::v3c1_load_triangles( Array1<V3C1Triangle> &array, const string
&prefix ) {
+
// Attempt to open the input file.
FILE *file;
- ((file = fopen( prefix.c_str(), "rb" )) == 0) {
+ if ((file = fopen( prefix.c_str(), "rb" )) == 0) {
throw ErrnoException( "Error opening .v3c1 file.", errno,
__FILE__, __LINE__ );
}
-
+
// Determine input file size.
fseek(file, 0, SEEK_END);
size_t file_size = ftell(file);
@@ -80,7 +89,7 @@
array.resize( array_size );
// Read in the datafile.
- size_t total_read = fread_64( &array[0], sizeof(V3C1Triangle),
+ size_t total_read = V3c1::fread_64( &array[0], sizeof(V3C1Triangle),
array_size, file );
if (total_read != array_size) {
@@ -97,8 +106,9 @@
}
///////////////////////////////////////////////////////////////////////////////
-//
-void v3c1_load_normals ( Array1<V3C1Normal> &array, const string &prefix
) {
+//
+extern "C"
+void Manta::v3c1_load_normals ( Array1<V3C1Normal> &array, const string
&prefix ) {
throw InputError( "Not finished" );
}
@@ -106,20 +116,22 @@
///////////////////////////////////////////////////////////////////////////////
// FREAD 64 FREAD 64 FREAD 64 FREAD 64 FREAD 64 FREAD 64 FREAD 64
FREAD
///////////////////////////////////////////////////////////////////////////////
-size_t fread_64(void *ptr, size_t size, size_t nitems, FILE *stream)
-{
- long long chunkSize = 0x7fffffff;
- long long remaining = size*nitems;
- while (remaining > 0) {
- long long toRead = remaining>chunkSize?chunkSize:remaining;
- long long result;
- if ((result = fread(ptr, toRead, 1, stream)) != 1) {
- fprintf(stderr, "read error: %ld != %ld",
- toRead, result);
- return 0;
- }
- remaining -= toRead;
- ptr = (char*)ptr + toRead;
- }
- return nitems;
+namespace V3c1 {
+ size_t fread_64(void *ptr, size_t size, size_t nitems, FILE *stream)
+ {
+ long long chunkSize = 0x7fffffff;
+ long long remaining = size*nitems;
+ while (remaining > 0) {
+ long long toRead = remaining>chunkSize?chunkSize:remaining;
+ long long result;
+ if ((result = fread(ptr, toRead, 1, stream)) != 1) {
+ fprintf(stderr, "read error: %ld != %ld",
+ toRead, result);
+ return 0;
+ }
+ remaining -= toRead;
+ ptr = (char*)ptr + toRead;
+ }
+ return nitems;
+ }
}
Modified: trunk/Model/Readers/V3C1.h
==============================================================================
--- trunk/Model/Readers/V3C1.h (original)
+++ trunk/Model/Readers/V3C1.h Wed Feb 22 01:44:50 2006
@@ -33,9 +33,14 @@
*/
#include <MantaTypes.h>
+#include <Core/Color/Color.h>
#include <Core/Geometry/VectorT.h>
+
+#include <SCIRun/Core/Util/Assert.h>
#include <SCIRun/Core/Containers/Array1.h>
+#include <string>
+
namespace Manta {
/////////////////////////////////////////////////////////////////////////////
@@ -68,8 +73,9 @@
// Load data into arrays of corresponding type and correct endianness if
// necessary.
- void v3c1_load_triangles( SCIRun::Array1<V3C1Triangle> &array, const
string &prefix );
- void v3c1_load_normals ( SCIRun::Array1<V3C1Normal> &array, const
string &prefix );
+
+ extern "C" void v3c1_load_triangles( SCIRun::Array1<V3C1Triangle> &array,
const std::string &prefix );
+ extern "C" void v3c1_load_normals ( SCIRun::Array1<V3C1Normal> &array,
const std::string &prefix );
};
Modified: trunk/fox/afr_demo/Engine/Control/AFRPipeline.cc
==============================================================================
--- trunk/fox/afr_demo/Engine/Control/AFRPipeline.cc (original)
+++ trunk/fox/afr_demo/Engine/Control/AFRPipeline.cc Wed Feb 22 01:44:50
2006
@@ -200,6 +200,19 @@
callbackLock.writeUnlock();
}
+void AFRPipeline::addParallelOneShotCallback(Whence whence, long frame,
+ CallbackBase_2Data<int, int>* callback)
+{
+ callbackLock.writeLock();
+
+ if(whence == MantaInterface::Relative) {
+ frame += animFrameState.frameNumber;
+ }
+
+ parallelOneShots.insert(OneShotMapType::value_type(frame, callback));
+ callbackLock.writeUnlock();
+}
+
void AFRPipeline::registerSetupCallback(SetupCallback* callback)
{
setupCallbacks.push_back(callback);
@@ -732,6 +745,15 @@
void AFRPipeline::doParallelAnimationCallbacks(bool& changed, int proc, int
numProcs)
{
+ // Parallel one shot callbacks.
+ ParallelOneShotMapType::iterator iter = parallelOneShots.begin();
+ while(iter != parallelOneShots.end() && iter->first <
animFrameState.frameNumber){
+ iter->second->call(proc, numProcs);
+ delete iter->second;
+ parallelOneShots.erase(iter);
+ iter = parallelOneShots.begin();
+ }
+
// All threads do the parallel animation callbacks
for(ACallbackMapType::iterator iter = parallelAnimationCallbacks.begin();
iter != parallelAnimationCallbacks.end(); iter++){
Modified: trunk/fox/afr_demo/Engine/Control/AFRPipeline.h
==============================================================================
--- trunk/fox/afr_demo/Engine/Control/AFRPipeline.h (original)
+++ trunk/fox/afr_demo/Engine/Control/AFRPipeline.h Wed Feb 22 01:44:50
2006
@@ -147,6 +147,8 @@
// Callbacks
virtual void addOneShotCallback(Whence whence, long frame,
CallbackBase_2Data<int, int>* callback);
+ virtual void addParallelOneShotCallback(Whence whence, long frame,
+ CallbackBase_2Data<int, int>* callback);
virtual void registerSetupCallback(SetupCallback*);
virtual void registerSerialAnimationCallback(CallbackBase_3Data<int,
int, bool&>*);
virtual void registerParallelAnimationCallback(CallbackBase_3Data<int,
int, bool&>*);
@@ -244,6 +246,8 @@
// Callbacks
typedef multimap<long, CallbackBase_2Data<int, int>*, less<long> >
OneShotMapType;
OneShotMapType oneShots;
+ typedef multimap<long, CallbackBase_2Data<int, int>*, less<long> >
ParallelOneShotMapType;
+ ParallelOneShotMapType parallelOneShots;
typedef vector<CallbackBase_2Data<int, int>*> PRCallbackMapType;
typedef vector<CallbackBase_3Data<int, int, bool&>*> ACallbackMapType;
PRCallbackMapType parallelPreRenderCallbacks;
Modified: trunk/fox/afr_demo/Engine/ImageTraversers/AFRImageTraverser.cc
==============================================================================
--- trunk/fox/afr_demo/Engine/ImageTraversers/AFRImageTraverser.cc
(original)
+++ trunk/fox/afr_demo/Engine/ImageTraversers/AFRImageTraverser.cc Wed
Feb 22 01:44:50 2006
@@ -167,9 +167,14 @@
const Kdtree::Triangle &triangle =
kdtree->getFace( face_index );
// now project the triangle into imagespace
- const Vector p1(triangle.v[0].x(), triangle.v[0].y(),
triangle.v[0].z());
- const Vector p2(triangle.v[1].x(), triangle.v[1].y(),
triangle.v[1].z());
- const Vector p3(triangle.v[2].x(), triangle.v[2].y(),
triangle.v[2].z());
+ // const Vector p1(triangle.v[0].x(), triangle.v[0].y(),
triangle.v[0].z());
+ // const Vector p2(triangle.v[1].x(), triangle.v[1].y(),
triangle.v[1].z());
+ // const Vector p3(triangle.v[2].x(), triangle.v[2].y(),
triangle.v[2].z());
+
+ const Vector p1 = triangle.v;
+ const Vector p2 = triangle.v + triangle.edge1;
+ const Vector p3 = triangle.v + triangle.edge2;
+
Vector rp;
const AFRCamera *camera = dynamic_cast<const AFRCamera *>(
context.camera );
// rp = ((AFRCamera*)context.camera)->project(p1);
- [MANTA] r951 - in trunk: Interface Model/Readers fox/afr_demo/Engine/Control fox/afr_demo/Engine/ImageTraversers, abe, 02/22/2006
Archive powered by MHonArc 2.6.16.