Ejemplo n.º 1
0
 def __init__(self, tbarmesh, xlo, xhi, ylo, yhi, boxwidth):
     self.tbarmesh = tbarmesh
     self.xpart = Partition1(xlo, xhi, int(math.ceil(
         (xhi - xlo) / boxwidth)))
     self.ypart = Partition1(ylo, yhi, int(math.ceil(
         (yhi - ylo) / boxwidth)))
     self.boxes = [[TriangleBox() for iy in range(self.ypart.nparts)]
                   for ix in range(self.xpart.nparts)]
Ejemplo n.º 2
0
 def __init__(self, fname):
     fin = open(fname)
     probepts = [list(map(float, l.split()[:3])) for l in fin]
     pxs = sorted(list(set(p[0] for p in probepts)))
     pys = sorted(list(set(p[1] for p in probepts)))
     parx = Partition1(pxs[0], pxs[-1], len(pxs) - 1)
     pary = Partition1(pys[0], pys[-1], len(pys) - 1)
     perrx = max(a - b for a, b in zip(parx.vs, pxs))
     perry = max(a - b for a, b in zip(pary.vs, pys))
     minz, maxz = min(p[2] for p in probepts), max(p[2] for p in probepts)
     print("Minmax z", minz, maxz, "Error on probe partition evenness XY",
           perrx, perry)
     parx.vs = pxs
     pary.vs = pys
     self.probeptsmap = dict(((p[0], p[1]), p[2]) for p in probepts)
     self.parx, self.pary = parx, pary
Ejemplo n.º 3
0
    def BuildPixelGridStructures(self, optionwidthpixels, optionheightpixels):
        # grids partitions defining the interval width of each pixel
        self.xpixels = Partition1(self.xlo, self.xhi, optionwidthpixels)
        if optionheightpixels == 0:
            heightpixels = int(optionwidthpixels/(self.xhi - self.xlo)*(self.yhi - self.ylo) + 1)
            newyhi = heightpixels*(self.xhi - self.xlo)/optionwidthpixels + self.ylo
            if self.optionverbose:
                print("Revising yhi from %.3f to %.3f to for a whole number of pixels" % (self.yhi, newyhi))
            self.yhi = newyhi
        else:
            heightpixels = optionheightpixels
        self.ypixels = Partition1(self.ylo, self.yhi, heightpixels)

        xpixwid = self.xpixels.vs[1] - self.xpixels.vs[0]
        ypixwid = self.ypixels.vs[1] - self.ypixels.vs[0]
        
        if self.optionverbose:
            print("numxpixels=%d  each width=%.3f  x0=%0.3f" % (self.xpixels.nparts, xpixwid, self.xpixels.vs[0]))
            print("numypixels=%d  each height=%.3f  y0=%0.3f" % (self.ypixels.nparts, ypixwid, self.ypixels.vs[0]))
        
        # partitions with interval boundaries down middle of each pixel with extra line each side for convenience
        self.xpixmidsE = Partition1(self.xlo - xpixwid*0.5, self.xhi + xpixwid*0.5, self.xpixels.nparts + 1)
        self.ypixmidsE = Partition1(self.ylo - ypixwid*0.5, self.yhi + ypixwid*0.5, self.ypixels.nparts + 1)
def MakeSlice(z):
    rex = rd + 2.5
    bm = barmesh.BarMesh()
    bm.BuildRectBarMesh(Partition1(tbm.xlo-rex, tbm.xhi+rex, 45), Partition1(tbm.ylo-rex, tbm.yhi+rex, 37), z)
    bms = barmeshcell.barmeshslicer(bm, iaballoffset, rd=rd, contourdotdiff=0.95, contourdelta=0.05, lamendgap=0.001)

    bms.initializecutsanddistances()

    currentcolour = -1

    ncount = 0
    while bms.barpolycuts:
        currentcolour += 1
        if currentcolour > bm.maxcellcolour:
            currentcolour = 0
        bms.splitbarpolyscolour(currentcolour)
        ncount += 1
        if ncount == 20:
            print("breaking with", len(bms.barpolycuts))
            break

    #print([bc.GetCellMark().cellcolour  for bc in bms.barpolycuts])
    print("totaltime:", bms.totalproctime, "triangletime:", bms.trianglehacktime)
    sendactivity("contours", contours=mainfunctions.BarMeshContoursF(bm, barmesh.PZ_BEYOND_R)[0])
Ejemplo n.º 5
0
fname = "/home/goatchurch/geom3d/barmesh/stlsamples/V29D_Fixed.stl"
bitmapx = 2500
bitmapy = 900
tstart = time.time()


def spinztox(t):
    return (t[2], t[1], -t[0])


tbarmesh = TriangleBarMesh(fname, spinztox)
#sendactivity("clearalltriangles")
#sendactivity(codetriangles=tbarmesh.GetBarMeshTriangles())
trizcut = TriZCut(tbarmesh)  # this is slow because it builds the boxing

ypixes = Partition1(tbarmesh.ylo - 0.2, tbarmesh.yhi + 0.2, bitmapy - 1)
zpix0 = tbarmesh.zlo - 0.1
zfactopix = ypixes.nparts / (ypixes.vs[-1] - ypixes.vs[0])
#zfactopix *= 0.5

# this is in Z (note rotation by spinztox)
# (here we can make a loop for each slice)
for ix in range(0, 51):
    lx = ix / 50.0
    xslice = Along(lx, tbarmesh.xlo, tbarmesh.xhi)

    fname = "/home/goatchurch/geom3d/bitmapslices/whistle/slice%05d.png" % int(
        xslice * 1000)
    pngslice = PNGslice(fname, bitmapx, bitmapy)
    for iy, y in enumerate(ypixes.vs):
        ztcuts = trizcut.TriSurfCut(xslice, y)
iaballoffset = implicitareaballoffset.ImplicitAreaBallOffset(tbm)

imp.reload(barmesh)
imp.reload(triangleboxing)
imp.reload(mainfunctions)
imp.reload(barmeshcell)

sendactivity("clearalltriangles")
sendactivity("clearallcontours")
sendactivity("clearallpoints")


# initial rectbarmesh
rd = 1.5
rex = rd + 2.5
xpart = Partition1(tbm.xlo-rex, tbm.xhi+rex, 45)
ypart = Partition1(tbm.ylo-rex, tbm.yhi+rex, 37)
bm = barmesh.BarMesh()
bm.BuildRectBarMesh(xpart, ypart, z)
rd2 = max(xpart.vs[1]-xpart.vs[0], ypart.vs[1]-ypart.vs[0], rd*1.5) + 0.1
bms = barmeshcell.barmeshslicer(bm, iaballoffset, rd=rd, rd2=rd2, contourdotdiff=0.95, contourdelta=0.05, lamendgap=0.001)

bms.initializecutsanddistances()
bms.plotslicer(sendactivity)
sendactivity("points", points=bms.getbarendclos(bm.bars), materialnumber=2)


currentcolour = -1


Ejemplo n.º 7
0
transmaps = {"unit": lambda t: t, "swapyz": lambda t: (t[0], -t[2], t[1])}
tbm = TriangleBarMesh(options.stlfile, transmaps[options.transform])

if options.diskheight >= 0.0:
    iaoffset = implicitareacyloffset.ImplicitAreaCylOffset(tbm)
else:
    iaoffset = implicitareaballoffset.ImplicitAreaBallOffset(tbm)

# substitute in the numpy version.  (with some accessor this could be used before construction of iaoffset)
from tribarmes import NTriangleBarMesh  # could be in prep for any OpenCL stuff
if NTriangleBarMesh:
    print("substituting NTriangleBarMesh!")
    iaoffset.tbarmesh = NTriangleBarMesh(iaoffset.tbarmesh)

rex = options.rad + 2.5
xpart = Partition1(tbm.xlo - rex, tbm.xhi + rex, 145)
ypart = Partition1(tbm.ylo - rex, tbm.yhi + rex, 137)
zlevels = []
for i in range(0, options.nslices):
    lam = (i + 0.5) / options.nslices
    zlevels.append((tbm.zlo - options.rad) * (1 - lam) +
                   (tbm.zhi + options.rad) * lam)

fnameout = options.outputfile or (re.sub("\.stl$(?i)", "", options.stlfile) +
                                  ".tap")
ftapeout = open(fnameout, "w")
b2dcontournormals = False

sumtotalproctime = 0
for z in zlevels:
    if options.diskheight >= 0.0: