1 /**************************************************************************** 2 ** 3 ** Copyright (c) 2008-2020 C.B. Barber. All rights reserved. 4 ** $Id: //main/2019/qhull/src/libqhullcpp/QhullUser.h#7 $$Change: 3010 $ 5 ** $DateTime: 2020/07/30 22:14:11 $$Author: bbarber $ 6 ** 7 ****************************************************************************/ 8 9 #ifndef QhullUser_H 10 #define QhullUser_H 11 12 #include "libqhull_r/qhull_ra.h" 13 #include "libqhullcpp/QhullPoint.h" 14 #include "libqhullcpp/PointCoordinates.h" 15 16 #include <stdarg.h> 17 #include <string> 18 #include <vector> 19 #include <istream> 20 #include <ostream> 21 #include <sstream> 22 23 namespace orgQhull{ 24 25 #//!\name Defined here 26 //! QhullUser -- custom C++ interfaces into Qhull (via qh_fprintf) 27 class QhullUser; 28 // qh_fprintf is defined below. It replaces libqhull_r/userprintf_r.c 29 30 #//!\name Used here 31 class QhullQh; 32 33 class QhullUser{ 34 35 private: 36 #//!\name Fields 37 QhullQh * qh_qh; //!< QhullQh/qhT for access to libqhull_r 38 void * previous_user; //!< previous qh.cpp_user, restored on deconstruction 39 std::vector<std::vector<double> > doubles_vector; //! vectors for capturing ints and doubles 40 std::vector<std::vector<int> > ints_vector; 41 std::vector<int> fprintf_ints; 42 std::vector<double> fprintf_doubles; 43 std::vector<int> fprintf_codes; 44 std::vector<std::string> fprintf_strings; 45 int num_facets; 46 int num_neighbors; 47 int num_numbers; 48 int num_points; 49 int num_results; 50 int num_ridges; 51 int num_vectors; 52 int num_vertices; 53 int qhull_dim; 54 int delaunay_dim; //! ints for capturing fprintf fields 55 56 public: 57 #//!\name Construct 58 QhullUser(QhullQh *qqh); 59 ~QhullUser(); 60 private: // Disable default constructor, copy constructor, and assignment 61 QhullUser(); 62 QhullUser(const QhullUser &); 63 QhullUser & operator=(const QhullUser &); 64 private: 65 66 public: 67 #//!\name GetSet 68 void appendCode(int msgCode) { fprintf_codes.push_back(msgCode); } 69 void appendDouble(double a) { fprintf_doubles.push_back(a); } 70 void appendInt(int i) { fprintf_ints.push_back(i); } 71 void appendAndClearDoubles() { doubles_vector.push_back(fprintf_doubles); fprintf_doubles.clear(); } 72 void appendAndClearInts() { ints_vector.push_back(fprintf_ints); fprintf_ints.clear(); } 73 void clear(); 74 void clearDoubles() { fprintf_doubles.clear(); } 75 void clearDoublesVector() { doubles_vector.clear(); } 76 void clearInts() { fprintf_ints.clear(); } 77 void clearIntsVector() { ints_vector.clear(); } 78 const std::vector<int> &codes() const { return fprintf_codes; } 79 int delaunayDim() const { return delaunay_dim; } 80 const std::vector<std::vector<double> > &doublesVector() const { return doubles_vector; } 81 const std::vector<double> &doubles() const { return fprintf_doubles; } 82 int firstCode() const { return (fprintf_codes.size() == 0 ? -1 : fprintf_codes[0]); } 83 const std::vector<int> &ints() const { return fprintf_ints; } 84 const std::vector<std::vector<int> > &intsVector() const { return ints_vector; } 85 int numDoubles() const { return (int)doubles_vector.size(); } 86 int numFacets() const { return num_facets; } 87 int numInts() const { return (int)ints_vector.size(); } 88 int numNeighbors() const { return num_neighbors; } 89 int numNumbers() const { return num_numbers; } 90 int numPoints() const { return num_points; } 91 int numResults() const { return num_results; } 92 int numRidges() const { return num_ridges; } 93 int numVectors() const { return num_vectors; } 94 int numVertices() const { return num_vertices; } 95 QhullQh * qh() const { return qh_qh; } 96 int qhullDim() const { return qhull_dim; } 97 void setDelaunayDim(int i) { delaunay_dim= i; } 98 void setNumFacets(int i) { num_facets= i; } 99 void setNumResults(int i) { num_results= i; } 100 void setNumRidges(int i) { num_ridges= i; } 101 void setNumNeighbors(int i) { num_neighbors= i; } 102 void setNumNumbers(int i) { num_numbers= i; } 103 void setNumPoints(int i) { num_points= i; } 104 void setNumVectors(int i) { num_vectors= i; } 105 void setNumVertices(int i) { num_vertices= i; } 106 void setQhullDim(int i) { qhull_dim= i; } 107 108 #//!\name Methods 109 void captureOn(); 110 void captureOff(); 111 };//class QhullUser 112 113 }//namespace orgQhull 114 115 #endif // QhullUser_H 116