#pragma once #ifdef _WIN32 #ifdef WIREROUTINGDLL_EXPORTS // VisualStudio DLL 项目模板会将 _EXPORTS 添加到定义预处理器宏。 #define BVH_API __declspec(dllexport) // _WIN32 #else #define BVH_API __declspec(dllimport) #endif #else #define BVH_API #endif #include "ReadXML.h" #include #include #include #include #include #include #include using namespace std; extern bool BVH_API PointInTri(Point3 &P, Point3 &P0, Point3 &P1, Point3 &P2); struct BVH_API Triangle { P p[3]; void getbox(P &_min, P &_max); void print(); }; extern bool BVH_API cmpt0(const Triangle &a, const Triangle &b); extern bool BVH_API cmpt1(const Triangle &a, const Triangle &b); extern bool BVH_API cmpt2(const Triangle &a, const Triangle &b); struct BVH_API O_AABB { P _min; P _max; int l, r; O_AABB(); O_AABB(const P &min, const P &max); bool insig(double x, double a, double b); bool inbox(const P &p); bool hit(P &p1, P &p2); }; struct BVH_API BVH { int trinum, tot, root; Triangle tri[MaxSTL]; O_AABB ab[400010]; BVH(); void update(int x); void build(int &x, int l, int r, int k); bool TriSegIntersection(Point3 &P0, Point3 &P1, Point3 &P2, Point3 &A, Point3 &B); bool TriSegIntersection(Triangle &t, Point3 &A, Point3 &B); bool query(int x, int l, int r, P &A, P &B); bool iscollect(P &A, P &B); void read_stl(string filename); };