def sphere(): minCoord = pgf.var_float(-1.) maxCoord = pgf.var_float(1.) minpt = pgf.vec3(minCoord, minCoord, minCoord) maxpt = pgf.vec3(maxCoord, maxCoord, maxCoord) box = pgf.box3(minpt, maxpt) npts = pgv.slideri32("Point count", 5, 50, 25) cloud = pgf.randomPointsInBox(box, npts) pgv.show("Point Cloud", cloud) sphere, *_ = pgf.boundingSphere(cloud) return sphere
import pygalfunc as pgf import pygalview as pgv minpt = pgf.var_vec3((-1., -1., -1.)) maxpt = pgf.var_vec3((1., 1., 1.)) box = pgf.box3(minpt, maxpt) npts = pgv.slideri32("Point count", 10, 1000, 100) cloud = pgf.randomPointsInBox(box, npts) hull = pgf.convexHullFromPoints(cloud) pgv.show("Convex Hull", hull) pgv.show("Points", cloud)
import pygalfunc as pgf import pygalview as pgv minpt = pgf.var_vec3((-1., -1., 0.)) maxpt = pgf.var_vec3((1., 1., 0.)) box = pgf.box3(minpt, maxpt) npts = pgv.slideri32("Point count", 10, 1000, 25) cloud = pgf.randomPointsInBox(box, npts) circ, center, radius = pgf.boundingCircle(cloud) pgv.show("cloud", pgf.pointCloud3d(cloud)) pgv.show("circ", circ) pgv.print("Center", center) pgv.print("Radius", radius) pgv.runCommands("2d")
maxpt = pgf.var_vec3((.5, .5, 0.)) box2 = pgf.box2(pgf.var_vec2((-.5, -.5)), pgf.var_vec2((.5, .5))) box3 = pgf.box3(minpt, maxpt) npts = pgv.slideri32("Point count", 5, 50, 25) cloud = pgf.randomPointsInBox(box3, npts) edgeLen = pgf.var_float(.01) rect = pgf.rectangleMesh(plane, box2, edgeLen) distances = pgf.distance(pgf.graft(pgf.vertices(rect)), cloud) sortedDists = pgf.sort(distances, distances) maxDist = pgf.listItem(sortedDists, pgf.sub(pgf.listLength(sortedDists), pgf.var_int(1))) scheme = pgf.var_vec3([ (0., 0., 1.), (0., 1., 0.), (1., 1., 0.), (1., 0., 0.) ]) colors = pgf.mapValueToColor(maxDist, pgf.var_vec2((.5, 1.2)), scheme) colored = pgf.meshWithVertexColors(rect, colors) circ, *_ = pgf.boundingCircle(cloud) # pgv.show("rectangle", rect) pgv.show("cloud", cloud) pgv.show("colored", colored) pgv.show("circle", circ) pgv.runCommands("2d")
import pygalfunc as pgf import pygalview as pgv POINTS = [ (0, 0, 0), (1, 0, 0), (1, 1, 0), (-.3, 1, 0), (0, -1, 0), ] pts = pgf.var_vec3(POINTS) nums = pgf.toString(pgf.series(pgf.var_int(0), pgf.var_int(1), pgf.listLength(pts))) idxPt = pgf.listItem(pts, pgv.slideri32("Index", 0, len(POINTS) - 1, 0)) circ, *_ = pgf.boundingCircle(pts) pgv.show("indices", pgv.tags(nums, pts)) pgv.show("circle", circ) pgv.show("points", pts) pgv.print("Point at index", idxPt)
import pygalfunc as pgf import pygalview as pgv relpath = pgf.var_string("../assets/bunny.obj") path = pgf.absPath(relpath) mesh = pgf.loadObjFile(path) scale = pgf.var_float(10.0) scaled = pgf.scale(mesh, scale) center = pgv.sliderVec3("center", 0., 1., 0.) radius = pgv.sliderf32("radius", 0., 1., .5) sphere = pgf.sphere(center, radius) resultMesh, resultIndices, numResults = pgf.meshSphereQuery(scaled, sphere) pgv.print("Number of results", numResults) pgv.show("Queried faces", resultMesh) pgv.show("Sphere", sphere)
import pygalfunc as pgf import pygalview as pgv # relpath = pgf.var_string("../assets/bunny_large.obj") relpath = pgv.textField("relpath") path = pgf.absPath(relpath) mesh = pgf.loadObjFile(path) scale = pgf.var_float(10.0) scaled = pgf.scale(mesh, scale) pt = pgv.sliderVec3("point", 0., 1., .5) norm = pgv.sliderVec3("normal", 0., 1., .5) plane = pgf.plane(pt, norm) clipped = pgf.clipMesh(scaled, plane) area = pgf.area(clipped) centroid = pgf.centroid(clipped) pgv.show("Plane", plane) pgv.show("Clipped Mesh", clipped) pgv.print("Original triangle count", pgf.numFaces(scaled)) pgv.print("Final triangle count", pgf.numFaces(clipped)) pgv.print("Mesh Area", area) pgv.print("Mesh Centroid", centroid)
import pygalfunc as pgf import pygalview as pgv relpath = pgf.var_string("../assets/bunny.obj") path = pgf.absPath(relpath) mesh = pgf.loadObjFile(path) scale = pgf.var_float(10.0) scaled = pgf.scale(mesh, scale) box = pgf.bounds(scaled) npts = pgv.slideri32("Point count", 1000, 25000, 100) inpts = pgf.randomPointsInBox(box, npts) outpts = pgf.closestPoints(scaled, inpts) pgv.show("Box", box) pgv.show("Mesh", scaled) pgv.show("Query Points", inpts) pgv.show("Closest Points", outpts)
import pygalfunc as pgf import pygalview as pgv relpath = pgf.var_string("../assets/bunny_large.obj") # relpath = pgv.textField("Relative file path"); path = pgf.absPath(relpath) mesh = pgf.loadObjFile(path) box = pgf.bounds(mesh) pgv.show("mesh", mesh) pgv.show("bounds", box) pgv.runCommands(""" perspective off wireframe on """)
def mesh(): relpath = pgf.var_string("../assets/bunny_large.obj") # relpath = pgv.textField("Relative file path"); path = pgf.absPath(relpath) return pgf.loadObjFile(path) m = mesh() s = sphere() # The bounds function is overloaded for both mesh and sphere. meshbbox = pgf.bounds(m) spbbox = pgf.bounds(s) pgv.show("mesh", m) pgv.show("circ", s) pgv.show("mbbox", meshbbox) pgv.show("cbbox", spbbox) ia = pgv.slideri32("int a", 5, 50, 25) ib = pgv.slideri32("int b", 5, 50, 25) fa = pgv.sliderf32("float a", 5., 50., 25.) fb = pgv.sliderf32("float b", 5., 50., 25.) # add function is overloaded for both floats and ints. fsum = pgf.add(fa, fb) isum = pgf.add(ia, ib) pgv.print("fsum", fsum) pgv.print("isum", isum)
import pygalfunc as pgf import pygalview as pgv relpath = pgf.var_string("../assets/bunny_large.obj") # relpath = pgv.textField("Relative file path"); path = pgf.absPath(relpath) mesh = pgf.loadObjFile(path) box = pgf.bounds(mesh) pgv.show("mesh", mesh) pgv.show("bounds", box) pgv.show("centroid", pgf.centroid(mesh)) pgv.runCommands(""" perspective off wireframe on """)
import pygalfunc as pgf import pygalview as pgv minpt = pgf.var_vec3((-1., -1., -1.)) maxpt = pgf.var_vec3((1., 1., 1.)) box = pgf.box3(minpt, maxpt) npts = pgv.slideri32("Point count", 10, 1000, 25) cloud = pgf.randomPointsInBox(box, npts) sphere, *_ = pgf.boundingSphere(cloud) pgv.show("cloud", cloud) pgv.show("sphere", sphere)
import pygalfunc as pgf import pygalview as pgv minpt = pgf.var_vec3((-1., -1., -1.)) maxpt = pgf.var_vec3((1., 1., 1.)) box = pgf.box3(minpt, maxpt) npts = pgv.slideri32("Point count", 10, 1000, 100) cloud = pgf.randomPointsInBox(box, npts) pgv.show("Box", box) pgv.show("Points", cloud)
(1, 1, 0), (-.3, 1, 0), (0, -1, 0), ] GLYPHDATA = [ "/home/rnjth94/works/YouTube/GAL_BoundingCircle/receiverDishGlyph.png", "/home/rnjth94/works/YouTube/GAL_BoundingCircle/transmitterGlyph.png" ] def initGlyphs(): return pgv.loadGlyphs(GLYPHDATA) if __name__ == "__main__": glyphs = initGlyphs() pts = pgf.var_vec3(POINTS) cloudGlyphs = pgf.var_int([glyphs[0] for _ in range(len(POINTS))]) idxPt = pgf.listItem(pts, pgv.slideri32("Index", 0, len(POINTS) - 1, 0)) circ, center, radius = pgf.boundingCircle(pts) center3 = pgf.vec3FromVec2(center) centerGlyph = pgf.var_int(glyphs[1]) pgv.show("glyph1", pgv.glyphs(cloudGlyphs, pts)) pgv.show("glyph2", pgv.glyphs(centerGlyph, center3)) pgv.show("circle", circ) pgv.show("points", pts) pgv.show("center", center3) pgv.print("Point at index", idxPt)