extract explicit mesh with topology information from implicit surfaces with boolean operations, and do surface/volume integrating on them.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

40 lines
1.1 KiB

#pragma once
#include <sstream>
template <typename T>
void throw_LA_ASSERT(const T msg, const char* file, int line)
{
std::ostringstream oss;
oss << "Robustness error: " << file << " line: " << line << " " << msg;
throw std::runtime_error(oss.str());
}
#define LA_GET_3RD_ARG_HELPER(arg1, arg2, arg3, ...) arg3
#define LA_Assert_1(cond) \
if (!(cond)) { throw_LA_ASSERT("", __FILE__, __LINE__); }
#define LA_Assert_2(cond, msg) \
if (!(cond)) { throw_LA_ASSERT(msg, __FILE__, __LINE__); }
#if (_MSC_VER && !(__clang__ || __GNUC__)) // special VS variadics
#define LA_MSVS_EXPAND(x) x
#define LA_ASSERT(...) \
LA_MSVS_EXPAND(LA_GET_3RD_ARG_HELPER(__VA_ARGS__, LA_Assert_2, LA_Assert_1)) \
LA_MSVS_EXPAND((__VA_ARGS__))
#else
#define LA_ASSERT(...) LA_GET_3RD_ARG_HELPER(__VA_ARGS__, LA_Assert_2, LA_Assert_1)(__VA_ARGS__)
#endif
#ifndef RELEASE_BRANCH
#define ROBUST_ASSERT(x) \
do { \
LA_ASSERT(x); \
} while (0)
#else
#define ROBUST_ASSERT(x) ((void)0)
#endif