AxisAlignedBoundingBox DatabaseIO::get_bounding_box(const Ioss::ElementBlock *eb) const { if (elementBlockBoundingBoxes.empty()) { // Calculate the bounding boxes for all element blocks... std::vector<double> coordinates; Ioss::NodeBlock * nb = get_region()->get_node_blocks()[0]; nb->get_field_data("mesh_model_coordinates", coordinates); ssize_t nnode = nb->get_property("entity_count").get_int(); ssize_t ndim = nb->get_property("component_degree").get_int(); Ioss::ElementBlockContainer element_blocks = get_region()->get_element_blocks(); size_t nblock = element_blocks.size(); std::vector<double> minmax; minmax.reserve(6 * nblock); for (auto &block : element_blocks) { double xmin, ymin, zmin, xmax, ymax, zmax; if (block->get_database()->int_byte_size_api() == 8) { std::vector<int64_t> connectivity; block->get_field_data("connectivity_raw", connectivity); calc_bounding_box(ndim, nnode, coordinates, connectivity, xmin, ymin, zmin, xmax, ymax, zmax); } else { std::vector<int> connectivity; block->get_field_data("connectivity_raw", connectivity); calc_bounding_box(ndim, nnode, coordinates, connectivity, xmin, ymin, zmin, xmax, ymax, zmax); } minmax.push_back(xmin); minmax.push_back(ymin); minmax.push_back(zmin); minmax.push_back(-xmax); minmax.push_back(-ymax); minmax.push_back(-zmax); } util().global_array_minmax(minmax, Ioss::ParallelUtils::DO_MIN); for (size_t i = 0; i < element_blocks.size(); i++) { Ioss::ElementBlock * block = element_blocks[i]; const std::string & name = block->name(); AxisAlignedBoundingBox bbox(minmax[6 * i + 0], minmax[6 * i + 1], minmax[6 * i + 2], -minmax[6 * i + 3], -minmax[6 * i + 4], -minmax[6 * i + 5]); elementBlockBoundingBoxes[name] = bbox; } } return elementBlockBoundingBoxes[eb->name()]; }
AbstractForm::AbstractForm(string name, vector<Point> points) { #ifdef DEBUG_AF printf("CONSTRUCTOR: %s\n", __PRETTY_FUNCTION__); #endif this->name = name; this->points = vector<Point>(points); number_of_points = points.size(); this->id = total_number_of_abstract_forms++; dx = 0; dy = 0; min_x = 0; max_x = 0; min_y = 0; max_y = 0; fits_with_optimal_rotation = false; size_of_area = 0; convex_hull.reserve(number_of_points); calc_bounding_box(); #ifdef DEBUG_AF printf("Created abstractForm with bounding box %.2f/%.2f - %.2f/%.2f\n", min_x, min_y, min_x + dx, min_y + dy); #endif convex_hull = vector<int>(); update_values(); }
void AbstractForm::erase_point_at_index(int index) { points.erase(points.begin()+index); calc_bounding_box(); update_values(); }