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
Example #2
0
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)
Example #3
0
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")
Example #4
0
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")
Example #5
0
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)
Example #6
0
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)
Example #8
0
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)
Example #9
0
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)
Example #11
0
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
""")
Example #12
0
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)
Example #13
0
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)
Example #14
0
    (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)