Skip to content

Instantly share code, notes, and snippets.

@xgarnaud
Last active July 2, 2020 20:20
Show Gist options
  • Save xgarnaud/617de4c73d8e0a916b4963d39adfd0eb to your computer and use it in GitHub Desktop.
Save xgarnaud/617de4c73d8e0a916b4963d39adfd0eb to your computer and use it in GitHub Desktop.
#include <iostream>
#include <csg.hpp>
#include <meshing.hpp>
#include "test_geom.h"
int main(int argc, char *argv[]) {
std::shared_ptr<netgen::CSGeometry> geom = read_geometry("sphereincube.geo");
// std::shared_ptr<netgen::CSGeometry> geom = build_geometry();
std::cout << "Save " << std::endl;
geom->Save(std::cout);
std::cout << "MeshFile " << std::endl;
geom->SaveToMeshFile(std::cout);
std::shared_ptr<netgen::Mesh> mesh = std::make_shared<netgen::Mesh>();
mesh->SetGeometry(geom);
geom->FindIdenticSurfaces(1e-8 * geom->MaxSize());
netgen::MeshingParameters params;
params.maxh = .4;
params.minh = .1;
// // params.delaunay = 0;
// params.grading = 0.1;
geom->GenerateMesh(mesh, params);
std::cout << mesh->GetNP() << std::endl;
std::cout << mesh->GetNFD() << std::endl;
for (int k = 1; k <= mesh->GetNFD(); k++) {
netgen::FaceDescriptor &fd = mesh->GetFaceDescriptor(k);
std::cout << fd.GetBCName() << std::endl;
}
std::cout << "ok" << std::endl;
}
CXX ?= g++
NETGEN_INC := $(NETGEN_DIR)/Resources/include/
NETGEN_INC1 := $(NETGEN_DIR)/Resources/include/include
NETGEN_LIB := $(NETGEN_DIR)/MacOS
CXXFLAGS := -std=c++17 -O0 -g -fsanitize=address -I$(NETGEN_INC) -I$(NETGEN_INC1)
LDFLAGS := -L$(NETGEN_DIR)/MacOS -lcsg -lmesh -lngcore -fsanitize=address
SRCS := main.cc test_geom.cc
OBJS := ${SRCS:.cc=.o}
%.o: %.cc Makefile
$(CXX) $(CXXFLAGS) -c $<
prog: $(OBJS)
$(CXX) $(LDFLAGS) -o $@ $^
run: prog
DYLD_LIBRARY_PATH=$(NETGEN_DIR)/MacOS:$(LD_LIBRARY_PATH) ./prog
dbg: prog
lldb -O "env DYLD_LIBRARY_PATH=$(NETGEN_DIR)/MacOS:$(LD_LIBRARY_PATH)" ./prog
#include "test_geom.h"
namespace netgen {
extern CSGeometry *ParseCSG(istream &istr, CSGeometry *instance = nullptr);
}
std::shared_ptr<netgen::CSGeometry> read_geometry(const std::string &fname) {
std::shared_ptr<netgen::CSGeometry> geom =
std::make_shared<netgen::CSGeometry>();
std::ifstream file(fname);
netgen::ParseCSG(file, geom.get());
file.close();
geom->FindIdenticSurfaces(1e-8 * geom->MaxSize());
return geom;
}
std::shared_ptr<netgen::CSGeometry> build_geometry() {
netgen::Point3d center(0., 0., 0.);
double radius = 1.;
netgen::Sphere *sphere_in = new netgen::Sphere(center, radius);
sphere_in->SetBCName("in");
netgen::Solid *solid_in = new netgen::Solid(sphere_in);
solid_in->SetName("sphere_in");
netgen::Sphere *sphere_out = new netgen::Sphere(center, 2 * radius);
sphere_in->SetBCName("out");
netgen::Solid *solid_out = new netgen::Solid(sphere_out);
solid_out->SetName("sphere_out");
netgen::Solid *hole = new netgen::Solid(netgen::Solid::SUB, solid_in);
netgen::Solid *solid =
new netgen::Solid(netgen::Solid::SECTION, solid_out, hole);
netgen::Solid *root = new netgen::Solid(netgen::Solid::ROOT, solid);
netgen::Flags flags;
std::shared_ptr<netgen::CSGeometry> geom =
std::make_shared<netgen::CSGeometry>();
geom->AddSurfaces(sphere_in);
geom->AddSurfaces(sphere_out);
geom->SetSolid("Root", root);
geom->SetTopLevelObject(root);
geom->SetFlags("Root", flags);
geom->FindIdenticSurfaces(1e-8 * geom->MaxSize());
return geom;
}
#pragma once
#include <csg.hpp>
std::shared_ptr<netgen::CSGeometry> read_geometry(const std::string &fname);
std::shared_ptr<netgen::CSGeometry> build_geometry();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment