From f8ba149e19600027dbff28b77ba7620915ec5bcc Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Mon, 26 May 2003 10:05:52 +0000 Subject: [PATCH] Added 3dc plugin for reading Arias 3D point clouds. --- Make/makedirdefs | 2 +- VisualStudio/VisualStudio.dsw | 18 ++++ VisualStudio/osgPlugins/3dc/3dc.dsp | 109 +++++++++++++++++++++ src/osgPlugins/3dc/GNUmakefile | 13 +++ src/osgPlugins/3dc/ReaderWriter3DC.cpp | 127 +++++++++++++++++++++++++ 5 files changed, 268 insertions(+), 1 deletion(-) create mode 100644 VisualStudio/osgPlugins/3dc/3dc.dsp create mode 100644 src/osgPlugins/3dc/GNUmakefile create mode 100644 src/osgPlugins/3dc/ReaderWriter3DC.cpp diff --git a/Make/makedirdefs b/Make/makedirdefs index 0fc7f6020..c7fdd810e 100644 --- a/Make/makedirdefs +++ b/Make/makedirdefs @@ -46,9 +46,9 @@ PLUGIN_DIRS = \ tgz\ txp\ zip\ + 3dc\ ive -# 3dc\ # comment in if you have Performer installed. # PLUGIN_DIRS += pfb diff --git a/VisualStudio/VisualStudio.dsw b/VisualStudio/VisualStudio.dsw index 6c0c2e8a4..7e1d9f2d2 100644 --- a/VisualStudio/VisualStudio.dsw +++ b/VisualStudio/VisualStudio.dsw @@ -1677,6 +1677,24 @@ Package=<4> ############################################################################### +Project: "osgPlugin 3dc"=.\osgPlugins\3dc\3dc.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name Core osg + End Project Dependency + Begin Project Dependency + Project_Dep_Name Core osgDB + End Project Dependency +}}} + +############################################################################### + Project: "osgPlugin pnm"=.\osgPlugins\pnm\pnm.dsp - Package Owner=<4> Package=<5> diff --git a/VisualStudio/osgPlugins/3dc/3dc.dsp b/VisualStudio/osgPlugins/3dc/3dc.dsp new file mode 100644 index 000000000..d5e9370a0 --- /dev/null +++ b/VisualStudio/osgPlugins/3dc/3dc.dsp @@ -0,0 +1,109 @@ +# Microsoft Developer Studio Project File - Name="osgPlugin 3dc" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=osgPlugin 3dc - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "3dc.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "3dc.mak" CFG="osgPlugin 3dc - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "osgPlugin 3dc - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "osgPlugin 3dc - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "osgPlugin 3dc - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "../../../lib" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c +# ADD CPP /nologo /MD /W3 /GR /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 /nologo /dll /pdb:none /machine:I386 /nodefaultlib:"LIBC" /out:"../../../bin/osgdb_3dc.dll" /libpath:"../../../lib" +# SUBTRACT LINK32 /nodefaultlib + +!ELSEIF "$(CFG)" == "osgPlugin 3dc - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "../../../lib" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /W3 /Gm /vmg /vd0 /GR /GX /Zi /Od /I "../../../include" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "WIN32" /D "_DEBUG" /YX /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 /nologo /dll /debug /machine:I386 /nodefaultlib:"LIBC" /out:"../../../bin/osgdb_3dcd.dll" /pdbtype:sept /libpath:"../../../lib" +# SUBTRACT LINK32 /nodefaultlib + +!ENDIF + +# Begin Target + +# Name "osgPlugin 3dc - Win32 Release" +# Name "osgPlugin 3dc - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=..\..\..\src\osgPlugins\3dc\ReaderWriter3DC.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/src/osgPlugins/3dc/GNUmakefile b/src/osgPlugins/3dc/GNUmakefile new file mode 100644 index 000000000..5b3356e47 --- /dev/null +++ b/src/osgPlugins/3dc/GNUmakefile @@ -0,0 +1,13 @@ +TOPDIR = ../../.. +include $(TOPDIR)/Make/makedefs + +CXXFILES =\ + ReaderWriter3DC.cpp\ + +LIBS += $(OSG_LIBS) $(OTHER_LIBS) + +TARGET_BASENAME = 3dc +include $(TOPDIR)/Make/cygwin_plugin_def +PLUGIN = $(PLUGIN_PREFIX)$(TARGET_BASENAME).$(PLUGIN_EXT) + +include $(TOPDIR)/Make/makerules diff --git a/src/osgPlugins/3dc/ReaderWriter3DC.cpp b/src/osgPlugins/3dc/ReaderWriter3DC.cpp new file mode 100644 index 000000000..6ce967081 --- /dev/null +++ b/src/osgPlugins/3dc/ReaderWriter3DC.cpp @@ -0,0 +1,127 @@ +#include +#include +#include + +#include +#include + +#include +#include + + +using namespace osg; + +class ReaderWriter3DC : public osgDB::ReaderWriter +{ + public: + virtual const char* className() { return "3DC point cloud reader"; } + + virtual bool acceptsExtension(const std::string& extension) + { + return osgDB::equalCaseInsensitive(extension,"3dc") || + osgDB::equalCaseInsensitive(extension,"asc"); + } + + virtual ReadResult readNode(const std::string& fileName, const osgDB::ReaderWriter::Options*) + { + std::string ext = osgDB::getFileExtension(fileName); + if (!acceptsExtension(ext)) return ReadResult::FILE_NOT_HANDLED; + + std::cout << "try to read file "<0) + { + ++num; + + osg::Vec3 pos,normal; + int r,g,b; + + int a = sscanf(line,"%f %f %f %d %d %d %f %f %f", + &pos.x(),&pos.y(),&pos.z(), + &r,&g,&b, + &normal.x(),&normal.y(),&normal.z()); + + + if (a) + { + vertices->push_back(pos); + normals->push_back(normal); + colours->push_back(osg::UByte4(r,g,b,255)); + //colours->push_back(osg::Vec4((float)r/255.0f,(float)g/255.0f,(float)b/255.0f,1.0f)); + + } + } + + + //std::cout << "["<setVertexArray(vertices); + geometry->setNormalArray(normals); + geometry->setNormalBinding(osg::Geometry::BIND_PER_VERTEX); + geometry->setColorArray(colours); + geometry->setColorBinding(osg::Geometry::BIND_PER_VERTEX); + geometry->addPrimitiveSet(new osg::DrawArrays(GL_POINTS,0,vertices->size())); + + osg::Geode* geode = new osg::Geode; + geode->addDrawable(geometry); + + return geode; + + } + +}; + +// now register with Registry to instantiate the above +// reader/writer. +osgDB::RegisterReaderWriterProxy g_readerWriter_3DX_Proxy;