This repository has been archived on 2025-04-11. You can view files and clone it, but cannot push or open issues or pull requests.
proceduralcity/source/CompFab.cpp

150 lines
2.5 KiB
C++
Raw Normal View History

2016-11-24 12:33:20 -06:00
//
// CompFab.cpp
// voxelizer
//
// Created by David Levin on 2/3/14.
//
//
#include "../include/CompFab.h"
using namespace CompFab;
CompFab::Vec3Struct::Vec3Struct()
{
m_x = m_y = m_z = 0.0;
}
CompFab::Vec3Struct::Vec3Struct(double x, double y, double z)
{
m_x = x;
m_y = y;
m_z = z;
}
void CompFab::Vec3Struct::normalize() {
double magnitude = sqrt(m_x*m_x+m_y*m_y+m_z*m_z);
if(magnitude > EPSILON)
{
m_x /= magnitude;
m_y /= magnitude;
m_z /= magnitude;
}
}
//Data Types
CompFab::Vec3iStruct::Vec3iStruct()
{
m_x = m_y = m_z = 0;
}
CompFab::Vec3iStruct::Vec3iStruct(int x, int y, int z)
{
m_x = x;
m_y = y;
m_z = z;
}
CompFab::Vec2fStruct::Vec2fStruct()
{
m_x = m_y = 0.0;
}
CompFab::Vec2fStruct::Vec2fStruct(float x, float y)
{
m_x = x;
m_y = y;
}
CompFab::RayStruct::RayStruct()
{
m_origin[0] = m_origin[1] = m_origin[2] = 0.0;
m_direction[0] = 1.0;
m_direction[1] = m_direction[2] = 0.0;
}
CompFab::RayStruct::RayStruct(Vec3 &origin, Vec3 &direction)
{
m_origin = origin;
m_direction = direction;
}
CompFab::TriangleStruct::TriangleStruct(Vec3 &v1, Vec3 &v2,Vec3 &v3)
{
m_v1 = v1;
m_v2 = v2;
m_v3 = v3;
}
CompFab::Vec3 CompFab::operator-(const Vec3 &v1, const Vec3 &v2)
{
Vec3 v3;
v3[0] = v1[0] - v2[0];
v3[1] = v1[1] - v2[1];
v3[2] = v1[2] - v2[2];
return v3;
}
CompFab::Vec3 CompFab::operator+(const Vec3 &v1, const Vec3 &v2)
{
Vec3 v3;
v3[0] = v1[0] + v2[0];
v3[1] = v1[1] + v2[1];
v3[2] = v1[2] + v2[2];
return v3;
}
//Cross Product
Vec3 CompFab::operator%(const Vec3 &v1, const Vec3 &v2)
{
Vec3 v3;
v3[0] = v1[1]*v2[2] - v1[2]*v2[1];
v3[1] = v1[2]*v2[0] - v1[0]*v2[2];
v3[2] = v1[0]*v2[1] - v1[1]*v2[0];
return v3;
}
//Dot Product
double CompFab::operator*(const Vec3 &v1, const Vec3 &v2)
{
return v1.m_x*v2.m_x + v1.m_y*v2.m_y+v1.m_z*v2.m_z;
}
//Grid structure for Voxels
CompFab::VoxelGridStruct::VoxelGridStruct(Vec3 corner, unsigned int numX, unsigned int numY, unsigned int numZ, double spacing)
{
m_corner = corner;
m_numX = numX;
m_numY = numY;
m_numZ = numZ;
m_size = numX*numY*numZ;
m_spacing = spacing;
//Allocate Memory
m_insideArray = new bool[m_size];
for(unsigned int ii=0; ii<m_size; ++ii)
{
m_insideArray[ii] = false;
}
}
CompFab::VoxelGridStruct::~VoxelGridStruct()
{
delete[] m_insideArray;
}