Example #1
0
def add_tube(prev, x, y):
    cylA = create_cylinder(r=3.155, h=8.6)

    cube = vtk.vtkCubeSource()
    cube.SetXLength(.75)
    cube.SetYLength(6.6)
    cube.SetZLength(13.6)
    cube.SetCenter(0, 1, 0)

    bA = vtkboolPython.vtkPolyDataBooleanFilter()
    bA.SetInputConnection(cylA.GetOutputPort())
    bA.SetInputConnection(1, cube.GetOutputPort())
    bA.SetOperModeToUnion()

    cylB = create_cylinder(r=2.405, h=8.6)

    bB = vtkboolPython.vtkPolyDataBooleanFilter()
    bB.SetInputConnection(bA.GetOutputPort())
    bB.SetInputConnection(1, cylB.GetOutputPort())
    bB.SetOperModeToDifference()

    tr = vtk.vtkTransform()
    tr.Translate(x, y, 4.3)
    tr.RotateX(90)

    tf = vtk.vtkTransformPolyDataFilter()
    tf.SetTransform(tr)
    tf.SetInputConnection(bB.GetOutputPort())

    bC = vtkboolPython.vtkPolyDataBooleanFilter()
    bC.SetInputConnection(prev.GetOutputPort())
    bC.SetInputConnection(1, tf.GetOutputPort())
    bC.SetOperModeToUnion()

    return bC
Example #2
0
def add_stud(prev, x, y):
    cylA = create_cylinder(r=2.5, h=2.)

    trA = vtk.vtkTransform()
    trA.Translate(x, y, 10.6)
    trA.RotateX(90)

    tfA = vtk.vtkTransformPolyDataFilter()
    tfA.SetTransform(trA)
    tfA.SetInputConnection(cylA.GetOutputPort())

    bA = vtkboolPython.vtkPolyDataBooleanFilter()
    bA.SetInputConnection(prev.GetOutputPort())
    bA.SetInputConnection(1, tfA.GetOutputPort())
    bA.SetOperModeToUnion()

    cylB = create_cylinder(r=1.5, h=1.)

    trB = vtk.vtkTransform()
    trB.Translate(x, y, 9.1)
    trB.RotateX(90)

    tfB = vtk.vtkTransformPolyDataFilter()
    tfB.SetTransform(trB)
    tfB.SetInputConnection(cylB.GetOutputPort())

    bB = vtkboolPython.vtkPolyDataBooleanFilter()
    bB.SetInputConnection(bA.GetOutputPort())
    bB.SetInputConnection(1, tfB.GetOutputPort())
    bB.SetOperModeToDifference()

    return bB
Example #3
0
def add_stud(prev, x, y):
    cylA = create_cylinder(r=2.5, h=2.)

    trA = vtk.vtkTransform()
    trA.Translate(x, y, 10.6)
    trA.RotateX(90)

    tfA = vtk.vtkTransformPolyDataFilter()
    tfA.SetTransform(trA)
    tfA.SetInputConnection(cylA.GetOutputPort())

    bA = vtkboolPython.vtkPolyDataBooleanFilter()
    bA.SetInputConnection(prev.GetOutputPort())
    bA.SetInputConnection(1, tfA.GetOutputPort())
    bA.SetOperModeToUnion()
    bA.DecPolysOff()

    cylB = create_cylinder(r=1.5, h=1.)

    trB = vtk.vtkTransform()
    trB.Translate(x, y, 9.1)
    trB.RotateX(90)

    tfB = vtk.vtkTransformPolyDataFilter()
    tfB.SetTransform(trB)
    tfB.SetInputConnection(cylB.GetOutputPort())

    bB = vtkboolPython.vtkPolyDataBooleanFilter()
    bB.SetInputConnection(bA.GetOutputPort())
    bB.SetInputConnection(1, tfB.GetOutputPort())
    bB.SetOperModeToDifference()
    bB.DecPolysOff()

    return bB
Example #4
0
def create_sill3():
    pr1 = [(0, 0), (1.75, 0), (1.75, 5. / 6 * 1.875), (0, 1.0833)]
    pr2 = [(.75, 0), (1.75, 0), (1.75, 5. / 6 * 1.875), (.75, 5. / 6 * 1.875)]

    extr = extrude(pr1, 22.7325 + 2 * .54125)

    extr2 = extrude(pr2, .54125)
    extr3 = extrude(pr2, .54125, 22.7325 + .54125)

    bf1 = vtkboolPython.vtkPolyDataBooleanFilter()
    bf1.SetInputConnection(extr.GetOutputPort())
    bf1.SetInputConnection(1, extr2.GetOutputPort())

    bf2 = vtkboolPython.vtkPolyDataBooleanFilter()
    bf2.SetInputConnection(bf1.GetOutputPort())
    bf2.SetInputConnection(1, extr3.GetOutputPort())

    clean = vtk.vtkCleanPolyData()
    clean.SetInputConnection(bf2.GetOutputPort())

    pn = vtk.vtkPolyDataNormals()
    pn.SetInputConnection(clean.GetOutputPort())
    pn.AutoOrientNormalsOn()

    tr = vtk.vtkTransform()
    tr.Translate(1.75, 0, 0)
    tr.RotateZ(180)
    tr.RotateX(90)

    tp = vtk.vtkTransformPolyDataFilter()
    tp.SetTransform(tr)
    tp.SetInputConnection(pn.GetOutputPort())

    return tp
Example #5
0
def create_sill(l):
    pr1 = [(0, 0), (1.6666, 0), (1.6666, 1.875), (0, .91666)]
    pr2 = [(.6666, 0), (1.6666, 0), (1.6666, 1.875), (.6666, 1.875)]

    extr = extrude(pr1, l + 2 * .8333)

    extr2 = extrude(pr2, .8333)
    extr3 = extrude(pr2, .8333, l + .8333)

    bf1 = vtkboolPython.vtkPolyDataBooleanFilter()
    bf1.SetInputConnection(extr.GetOutputPort())
    bf1.SetInputConnection(1, extr2.GetOutputPort())

    bf2 = vtkboolPython.vtkPolyDataBooleanFilter()
    bf2.SetInputConnection(bf1.GetOutputPort())
    bf2.SetInputConnection(1, extr3.GetOutputPort())

    clean = vtk.vtkCleanPolyData()
    clean.SetInputConnection(bf2.GetOutputPort())

    pn = vtk.vtkPolyDataNormals()
    pn.SetInputConnection(clean.GetOutputPort())
    pn.AutoOrientNormalsOn()

    tr = vtk.vtkTransform()
    tr.Translate(1.6666, 0, 0)
    tr.RotateZ(180)
    tr.RotateX(90)

    tp = vtk.vtkTransformPolyDataFilter()
    tp.SetTransform(tr)
    tp.SetInputConnection(pn.GetOutputPort())

    return tp
Example #6
0
def add_tube(prev, x, y):
    cylA = create_cylinder(r=3.155, h=8.6)

    cube = vtk.vtkCubeSource()
    cube.SetXLength(.75)
    cube.SetYLength(6.6)
    cube.SetZLength(13.6)
    cube.SetCenter(0, 1, 0)

    bA = vtkboolPython.vtkPolyDataBooleanFilter()
    bA.SetInputConnection(cylA.GetOutputPort())
    bA.SetInputConnection(1, cube.GetOutputPort())
    bA.SetOperModeToUnion()
    bA.DecPolysOff()

    cylB = create_cylinder(r=2.405, h=8.6)

    bB = vtkboolPython.vtkPolyDataBooleanFilter()
    bB.SetInputConnection(bA.GetOutputPort())
    bB.SetInputConnection(1, cylB.GetOutputPort())
    bB.SetOperModeToDifference()
    bB.DecPolysOff()

    tr = vtk.vtkTransform()
    tr.Translate(x, y, 4.30001)
    tr.RotateX(90)

    tf = vtk.vtkTransformPolyDataFilter()
    tf.SetTransform(tr)
    tf.SetInputConnection(bB.GetOutputPort())

    bC = vtkboolPython.vtkPolyDataBooleanFilter()
    bC.SetInputConnection(prev.GetOutputPort())
    bC.SetInputConnection(1, tf.GetOutputPort())
    bC.SetOperModeToUnion()
    bC.DecPolysOff()

    return bC
Example #7
0
def split4(_=False):
    r = vtk.vtkSTLReader()
    r.SetFileName('Schuerze4.stl')
    r.Update()

    bnds = Bnds(*r.GetOutput().GetBounds())

    y = bnds.y1 / 2

    pts = [[bnds.x1 - 1, y, bnds.z1 - 1], [bnds.x2 + 1, y, bnds.z1 - 1],
           [bnds.x2 + 1, y, bnds.z2 + 1], [bnds.x1 - 1, y, bnds.z2 + 1]]

    if _:
        pts.reverse()

    cell = vtk.vtkIdList()

    vtk_pts = vtk.vtkPoints()
    vtk_pts.SetDataTypeToDouble()

    [(vtk_pts.InsertNextPoint(pt), cell.InsertNextId(i))
     for i, pt in enumerate(pts)]

    pd = vtk.vtkPolyData()
    pd.Allocate(1, 1)
    pd.SetPoints(vtk_pts)
    pd.InsertNextCell(vtk.VTK_POLYGON, cell)

    prod = vtk.vtkTrivialProducer()
    prod.SetOutput(pd)

    bf = vtkboolPython.vtkPolyDataBooleanFilter()
    bf.SetInputConnection(r.GetOutputPort())
    bf.SetInputConnection(1, prod.GetOutputPort())
    bf.SetOperModeToDifference()

    clean = vtk.vtkCleanPolyData()
    clean.SetInputConnection(bf.GetOutputPort())

    pn = vtk.vtkPolyDataNormals()
    pn.SetInputConnection(clean.GetOutputPort())
    pn.AutoOrientNormalsOn()

    return pn
Example #8
0
def add_bound(prev, x, y, phi):
    cube = vtk.vtkCubeSource()
    cube.SetXLength(.75)
    cube.SetYLength(.3)
    cube.SetZLength(8.6)

    tr = vtk.vtkTransform()
    tr.Translate(x, y, 4.3)
    tr.Push()
    tr.RotateZ(phi)
    tr.Translate(0, 2.65, 0)

    tf = vtk.vtkTransformPolyDataFilter()
    tf.SetTransform(tr)
    tf.SetInputConnection(cube.GetOutputPort())

    b = vtkboolPython.vtkPolyDataBooleanFilter()
    b.SetInputConnection(prev.GetOutputPort())
    b.SetInputConnection(1, tf.GetOutputPort())
    b.SetOperModeToUnion()

    return b
Example #9
0
    def write(self, *names):
        flts = [self.aligned[0]]

        for i, f in enumerate(self.aligned[1:]):
            bf = vtkboolPython.vtkPolyDataBooleanFilter()
            bf.SetInputConnection(flts[-1].GetOutputPort())
            bf.SetInputConnection(1, f.GetOutputPort())

            flts.append(bf)

        clean = vtk.vtkCleanPolyData()
        clean.SetInputConnection(flts[-1].GetOutputPort())

        for name in names:
            if name.endswith('stl'):
                w = vtk.vtkSTLWriter()
            else:
                w = vtk.vtkPolyDataWriter()

            w.SetInputConnection(clean.GetOutputPort())
            w.SetFileName(name)
            w.Update()
Example #10
0
def merge4():
    r = vtk.vtkPolyDataReader()
    r.SetFileName('einzeln/test6.vtk')

    r2 = vtk.vtkPolyDataReader()
    r2.SetFileName('einzeln/test7.vtk')

    tr = vtk.vtkTransform()
    tr.RotateZ(270)

    tp = vtk.vtkTransformPolyDataFilter()
    tp.SetTransform(tr)
    tp.SetInputConnection(r2.GetOutputPort())

    bf = vtkboolPython.vtkPolyDataBooleanFilter()
    bf.SetInputConnection(r.GetOutputPort())
    bf.SetInputConnection(1, tp.GetOutputPort())
    bf.DecPolysOff()

    fr = add_frame(bf, [(10.8333, 2.5, 'top'), (32.5, 2.5, 'top')])

    return fr
Example #11
0
def add_bound(prev, x, y, phi):
    cube = vtk.vtkCubeSource()
    cube.SetXLength(.75)
    cube.SetYLength(.3)
    cube.SetZLength(8.6)

    tr = vtk.vtkTransform()
    tr.Translate(x, y, 4.3)
    tr.Push()
    tr.RotateZ(phi)
    tr.Translate(0, 2.65, 0)

    tf = vtk.vtkTransformPolyDataFilter()
    tf.SetTransform(tr)
    tf.SetInputConnection(cube.GetOutputPort())

    b = vtkboolPython.vtkPolyDataBooleanFilter()
    b.SetInputConnection(prev.GetOutputPort())
    b.SetInputConnection(1, tf.GetOutputPort())
    b.SetOperModeToUnion()
    b.DecPolysOff()

    return b
Example #12
0
def create_sill4(l):
    pr1 = [(0, 0), (1.75, 0), (1.75, 5. / 6 * 1.875), (0, 1.0833)]
    pr2 = [(.75, 0), (1.75, 0), (1.75, 5. / 6 * 1.875), (.75, 5. / 6 * 1.875)]

    extr1 = extrude(pr1, l + .75 + .54125)
    extr2 = extrude(pr2, .54125)

    bf = vtkboolPython.vtkPolyDataBooleanFilter()
    bf.SetInputConnection(extr1.GetOutputPort())
    bf.SetInputConnection(1, extr2.GetOutputPort())
    bf.Update()

    bnds = Bnds(*bf.GetOutput().GetBounds())

    pts = [(bnds.x1 - 2, bnds.y1 - 2, 0), (bnds.x2 + 2, bnds.y1 - 2, 0),
           (bnds.x2 + 2, bnds.y2 + 2, 0), (bnds.x1 - 2, bnds.y2 + 2, 0)]

    cell = vtk.vtkIdList()

    _pts = vtk.vtkPoints()
    _pts.SetDataTypeToDouble()

    [(_pts.InsertNextPoint(pt), cell.InsertNextId(i))
     for i, pt in enumerate(pts[::-1])]

    pd = vtk.vtkPolyData()
    pd.Allocate(1, 1)
    pd.SetPoints(_pts)
    pd.InsertNextCell(vtk.VTK_POLYGON, cell)

    prod = vtk.vtkTrivialProducer()
    prod.SetOutput(pd)

    tr = vtk.vtkTransform()
    tr.Translate(0, 0, bnds.z2)
    tr.RotateY(45)

    tp = vtk.vtkTransformPolyDataFilter()
    tp.SetTransform(tr)
    tp.SetInputConnection(prod.GetOutputPort())

    bf2 = vtkboolPython.vtkPolyDataBooleanFilter()
    bf2.SetInputConnection(bf.GetOutputPort())
    bf2.SetInputConnection(1, tp.GetOutputPort())
    bf2.SetOperModeToDifference()

    clean = vtk.vtkCleanPolyData()
    clean.SetInputConnection(bf2.GetOutputPort())

    pn = vtk.vtkPolyDataNormals()
    pn.SetInputConnection(clean.GetOutputPort())
    pn.AutoOrientNormalsOn()

    tr2 = vtk.vtkTransform()
    tr2.Translate(1.75, 0, 0)
    tr2.RotateZ(180)
    tr2.RotateX(90)

    tp2 = vtk.vtkTransformPolyDataFilter()
    tp2.SetTransform(tr2)
    tp2.SetInputConnection(pn.GetOutputPort())

    return tp2
Example #13
0
def add_frame(flt, holds=[]):
    flt.Update()
    bnds = Bnds(*flt.GetOutput().GetBounds())

    pts1 = [(bnds.x1 - 2, bnds.y1 - 2, 0), (bnds.x2 + 2, bnds.y1 - 2, 0),
            (bnds.x2 + 2, bnds.y2 + 2, 0), (bnds.x1 - 2, bnds.y2 + 2, 0)]
    pts2 = [(bnds.x1 - 1, bnds.y1 - 1, 0), (bnds.x2 + 1, bnds.y1 - 1, 0),
            (bnds.x2 + 1, bnds.y2 + 1, 0), (bnds.x1 - 1, bnds.y2 + 1, 0)]

    extr1 = extrude(pts1, 1)
    extr2 = extrude(pts2, 1)

    bf = vtkboolPython.vtkPolyDataBooleanFilter()
    bf.SetInputConnection(extr1.GetOutputPort())
    bf.SetInputConnection(1, extr2.GetOutputPort())
    bf.SetOperModeToDifference()

    app = vtk.vtkAppendPolyData()
    app.AddInputConnection(flt.GetOutputPort())
    app.AddInputConnection(bf.GetOutputPort())

    conf = {
        'left': ((.5, 0), (0, -90), lambda x, y: abs(bnds.x1 - x)),
        'right': ((-.5, 0), (0, 90), lambda x, y: abs(bnds.x2 - x)),
        'top': ((0, -.5), (-90, 0), lambda x, y: abs(bnds.y2 - y)),
        'bottom': ((0, .5), (90, 0), lambda x, y: abs(bnds.y1 - y))
    }

    if len(holds) > 0:
        app2 = vtk.vtkAppendPolyData()

        for x, y, dir_ in holds:
            mv, rot, fct = conf[dir_]
            pts = [(.5 + mv[0], -.5 + mv[1], 0), (.5 + mv[0], .5 + mv[1], 0),
                   (-.5 + mv[0], .5 + mv[1], 0), (-.5 + mv[0], -.5 + mv[1], 0)]

            extr = extrude(pts, fct(x, y) + 1)

            tr = vtk.vtkTransform()
            tr.Translate(x, y, 0)
            tr.RotateX(rot[0])
            tr.RotateY(rot[1])

            tp = vtk.vtkTransformPolyDataFilter()
            tp.SetTransform(tr)
            tp.SetInputConnection(extr.GetOutputPort())

            app2.AddInputConnection(tp.GetOutputPort())

        bf2 = vtkboolPython.vtkPolyDataBooleanFilter()
        bf2.SetInputConnection(app.GetOutputPort())
        bf2.SetInputConnection(1, app2.GetOutputPort())

        clean = vtk.vtkCleanPolyData()
        clean.SetInputConnection(bf2.GetOutputPort())

        return clean

        # app2.AddInputConnection(app.GetOutputPort())
        # return app2

    return app
Example #14
0
subA = vtk.vtkLinearSubdivisionFilter()
subA.SetInputConnection(triA.GetOutputPort())
subA.SetNumberOfSubdivisions(4)

cubeB = vtk.vtkCubeSource()
cubeB.SetBounds(-14.8, 14.8, -6.8, 6.8, 0, 8.6)

triB = vtk.vtkTriangleFilter()
triB.SetInputConnection(cubeB.GetOutputPort())

subB = vtk.vtkLinearSubdivisionFilter()
subB.SetInputConnection(triB.GetOutputPort())
subB.SetNumberOfSubdivisions(4)

boolA = vtkboolPython.vtkPolyDataBooleanFilter()
boolA.SetInputConnection(subA.GetOutputPort())
boolA.SetInputConnection(1, subB.GetOutputPort())
boolA.SetOperModeToDifference()
boolA.DecPolysOff()

tubeA = add_tube(boolA, 0, 0)
tubeB = add_tube(tubeA, -8, 0)
tubeC = add_tube(tubeB, 8, 0)

studA = add_stud(tubeC, -12, -4)
studB = add_stud(studA, -12, 4)
studC = add_stud(studB, -4, -4)
studD = add_stud(studC, -4, 4)
studE = add_stud(studD, 4, -4)
studF = add_stud(studE, 4, 4)
Example #15
0
    def export (self, name):
        extr = extrude(self.draw_bricks(self.cfg['seqs'][0], self.cfg['end_seqs'][0]), self.cfg['q']/2, self.cfg['r'])
        extr1 = extrude(self.draw_spacer(), self.cfg['q']/2+self.cfg['r'], 2*self.cfg['e'])

        extr2 = extrude(self.draw_bricks(self.cfg['seqs'][1], self.cfg['end_seqs'][1]), -self.cfg['q']/2, -self.cfg['r'])
        extr3 = extrude(self.draw_spacer(), -self.cfg['q']/2-self.cfg['r'], -2*self.cfg['e'])

        extr4 = extrude(self.draw_zz_bricks(), -self.cfg['q']/2, self.cfg['q'])

        # extr + extr1
        bf = vtkboolPython.vtkPolyDataBooleanFilter()
        bf.SetInputConnection(extr.GetOutputPort())
        bf.SetInputConnection(1, extr1.GetOutputPort())
        bf.DecPolysOff()

        # extr2 + extr3
        bf1 = vtkboolPython.vtkPolyDataBooleanFilter()
        bf1.SetInputConnection(extr2.GetOutputPort())
        bf1.SetInputConnection(1, extr3.GetOutputPort())
        bf1.DecPolysOff()

        app = vtk.vtkAppendPolyData()
        app.AddInputConnection(bf.GetOutputPort())
        app.AddInputConnection(bf1.GetOutputPort())

        bf2 = vtkboolPython.vtkPolyDataBooleanFilter()
        bf2.SetInputConnection(app.GetOutputPort())
        bf2.SetInputConnection(1, extr4.GetOutputPort())
        bf2.DecPolysOff()

        ang = self.cfg['ang']*math.pi/180

        v = [0, 5]

        _v = [math.cos(ang)*v[0]-math.sin(ang)*v[1],
            math.sin(ang)*v[0]+math.cos(ang)*v[1]]

        plane = vtk.vtkPlaneSource()
        plane.SetOrigin(0, 0, 0)
        plane.SetPoint1(0, 0, 5)
        plane.SetPoint2(_v[0], _v[1], 0)
        plane.SetCenter(0, 0 , 0)

        bf3 = vtkboolPython.vtkPolyDataBooleanFilter()
        bf3.SetInputConnection(bf2.GetOutputPort())
        bf3.SetInputConnection(1, plane.GetOutputPort())
        bf3.SetOperModeToDifference()
        bf3.DecPolysOff()

        result = bf3

        if self.cfg['end'] == 'D':

            _v = [math.cos(-ang)*v[0]-math.sin(-ang)*v[1],
                math.sin(-ang)*v[0]+math.cos(-ang)*v[1]]

            plane1 = vtk.vtkPlaneSource()
            plane1.SetOrigin(0, 0, 0)
            plane1.SetPoint2(0, 0, 5)
            plane1.SetPoint1(_v[0], _v[1], 0)
            plane1.SetCenter(-self.cfg['w'], 0 , 0)

            bf4 = vtkboolPython.vtkPolyDataBooleanFilter()
            bf4.SetInputConnection(result.GetOutputPort())
            bf4.SetInputConnection(1, plane1.GetOutputPort())
            bf4.SetOperModeToDifference()
            bf4.DecPolysOff()

            result = bf4

        if 'clip' in self.cfg:
            plane2 = vtk.vtkPlaneSource()
            plane2.SetOrigin(0, 0, 0)
            plane2.SetPoint1(0, 0, 5)
            plane2.SetPoint2(v[0], v[1], 0)
            plane2.SetCenter(-self.cfg['clip'], 0 , 0)

            bf5 = vtkboolPython.vtkPolyDataBooleanFilter()
            bf5.SetInputConnection(result.GetOutputPort())
            bf5.SetInputConnection(1, plane2.GetOutputPort())
            bf5.SetOperModeToDifference()
            bf5.DecPolysOff()

            result = bf5

        if 'pins' in self.cfg:
            app1 = vtk.vtkAppendPolyData()

            t = self.cfg.get('clip', 0)
            fake_w = self.cfg.get('fake_w', self.cfg['w'])

            u = (fake_w-t)/self.cfg['pins']/2

            for i in range(self.cfg['pins']):
                mid = t+u*(1+i*2)

                pin = extrude([ [-mid-2.5, self.cfg['b']], [-mid-2.5, self.cfg['b']+1.5],
                    [-mid+2.5, self.cfg['b']+1.5], [-mid+2.5, self.cfg['b']] ], -.75, 1.5)

                app1.AddInputConnection(pin.GetOutputPort())

            bf6 = vtkboolPython.vtkPolyDataBooleanFilter()
            bf6.SetInputConnection(result.GetOutputPort())
            bf6.SetInputConnection(1, app1.GetOutputPort())
            bf6.DecPolysOff()

            result = bf6

        tra = vtk.vtkTransform()
        tra.Scale(-1, 1, 1)

        tf = vtk.vtkTransformPolyDataFilter()
        tf.SetInputConnection(result.GetOutputPort())
        tf.SetTransform(tra)

        if self.cfg['flip']:
            tf.Update()
            pd = tf.GetOutput()

            for i in range(pd.GetNumberOfCells()):
                pd.ReverseCell(i)

            result = tf

        clean = vtk.vtkCleanPolyData()
        clean.SetInputConnection(result.GetOutputPort())

        writer = vtk.vtkPolyDataWriter()
        writer.SetInputConnection(clean.GetOutputPort())
        writer.WriteToOutputStringOn()
        writer.Update()

        dat = writer.GetOutputString()

        pd = clean.GetOutput()
        num = pd.GetNumberOfPoints()

        pts = [ [ '%.8f' % x for x in pd.GetPoint(i) ] for i in range(num) ]

        m = re.search('POINTS.*?\n(.*?)\nP', dat, re.S)

        with open(name, 'w') as f:
            f.write(dat[:m.start(1)] + ' '.join(sum(pts, [])) + dat[m.end(1):])

        if os.path.exists('stl'):
            tri = vtk.vtkTriangleFilter()
            tri.SetInputConnection(clean.GetOutputPort())

            writer1 = vtk.vtkSTLWriter()
            writer1.SetFileName('stl/{0}.stl'.format(name[:-4]))
            writer1.SetInputConnection(tri.GetOutputPort())
            writer1.Update()
Example #16
0
    def export(self, name):
        extr = extrude(
            self.draw_bricks(self.cfg['seqs'][0], self.cfg['end_seqs'][0]),
            self.cfg['q'] / 2, self.cfg['r'])
        extr1 = extrude(self.draw_spacer(), self.cfg['q'] / 2 + self.cfg['r'],
                        2 * self.cfg['e'])

        extr2 = extrude(
            self.draw_bricks(self.cfg['seqs'][1], self.cfg['end_seqs'][1]),
            -self.cfg['q'] / 2, -self.cfg['r'])
        extr3 = extrude(self.draw_spacer(), -self.cfg['q'] / 2 - self.cfg['r'],
                        -2 * self.cfg['e'])

        extr4 = extrude(self.draw_zz_bricks(), -self.cfg['q'] / 2,
                        self.cfg['q'])

        # extr + extr1
        bf = vtkboolPython.vtkPolyDataBooleanFilter()
        bf.SetInputConnection(extr.GetOutputPort())
        bf.SetInputConnection(1, extr1.GetOutputPort())
        bf.DecPolysOff()

        # extr2 + extr3
        bf1 = vtkboolPython.vtkPolyDataBooleanFilter()
        bf1.SetInputConnection(extr2.GetOutputPort())
        bf1.SetInputConnection(1, extr3.GetOutputPort())
        bf1.DecPolysOff()

        app = vtk.vtkAppendPolyData()
        app.AddInputConnection(bf.GetOutputPort())
        app.AddInputConnection(bf1.GetOutputPort())

        bf2 = vtkboolPython.vtkPolyDataBooleanFilter()
        bf2.SetInputConnection(app.GetOutputPort())
        bf2.SetInputConnection(1, extr4.GetOutputPort())
        bf2.DecPolysOff()

        ang = self.cfg['ang'] * math.pi / 180

        v = [0, 5]

        _v = [
            math.cos(ang) * v[0] - math.sin(ang) * v[1],
            math.sin(ang) * v[0] + math.cos(ang) * v[1]
        ]

        plane = vtk.vtkPlaneSource()
        plane.SetOrigin(0, 0, 0)
        plane.SetPoint1(0, 0, 5)
        plane.SetPoint2(_v[0], _v[1], 0)
        plane.SetCenter(0, 0, 0)

        bf3 = vtkboolPython.vtkPolyDataBooleanFilter()
        bf3.SetInputConnection(bf2.GetOutputPort())
        bf3.SetInputConnection(1, plane.GetOutputPort())
        bf3.SetOperModeToDifference()
        bf3.DecPolysOff()

        result = bf3

        if self.cfg['end'] == 'D':

            _v = [
                math.cos(-ang) * v[0] - math.sin(-ang) * v[1],
                math.sin(-ang) * v[0] + math.cos(-ang) * v[1]
            ]

            plane1 = vtk.vtkPlaneSource()
            plane1.SetOrigin(0, 0, 0)
            plane1.SetPoint2(0, 0, 5)
            plane1.SetPoint1(_v[0], _v[1], 0)
            plane1.SetCenter(-self.cfg['w'], 0, 0)

            bf4 = vtkboolPython.vtkPolyDataBooleanFilter()
            bf4.SetInputConnection(result.GetOutputPort())
            bf4.SetInputConnection(1, plane1.GetOutputPort())
            bf4.SetOperModeToDifference()
            bf4.DecPolysOff()

            result = bf4

        if 'clip' in self.cfg:
            plane2 = vtk.vtkPlaneSource()
            plane2.SetOrigin(0, 0, 0)
            plane2.SetPoint1(0, 0, 5)
            plane2.SetPoint2(v[0], v[1], 0)
            plane2.SetCenter(-self.cfg['clip'], 0, 0)

            bf5 = vtkboolPython.vtkPolyDataBooleanFilter()
            bf5.SetInputConnection(result.GetOutputPort())
            bf5.SetInputConnection(1, plane2.GetOutputPort())
            bf5.SetOperModeToDifference()
            bf5.DecPolysOff()

            result = bf5

        if 'pins' in self.cfg:
            app1 = vtk.vtkAppendPolyData()

            t = self.cfg.get('clip', 0)
            fake_w = self.cfg.get('fake_w', self.cfg['w'])

            u = (fake_w - t) / self.cfg['pins'] / 2

            for i in range(self.cfg['pins']):
                mid = t + u * (1 + i * 2)

                pin = extrude([[-mid - 2.5, self.cfg['b']],
                               [-mid - 2.5, self.cfg['b'] + 1.5],
                               [-mid + 2.5, self.cfg['b'] + 1.5],
                               [-mid + 2.5, self.cfg['b']]], -.75, 1.5)

                app1.AddInputConnection(pin.GetOutputPort())

            bf6 = vtkboolPython.vtkPolyDataBooleanFilter()
            bf6.SetInputConnection(result.GetOutputPort())
            bf6.SetInputConnection(1, app1.GetOutputPort())
            bf6.DecPolysOff()

            result = bf6

        tra = vtk.vtkTransform()
        tra.Scale(-1, 1, 1)

        tf = vtk.vtkTransformPolyDataFilter()
        tf.SetInputConnection(result.GetOutputPort())
        tf.SetTransform(tra)

        if self.cfg['flip']:
            tf.Update()
            pd = tf.GetOutput()

            for i in range(pd.GetNumberOfCells()):
                pd.ReverseCell(i)

            result = tf

        clean = vtk.vtkCleanPolyData()
        clean.SetInputConnection(result.GetOutputPort())

        writer = vtk.vtkPolyDataWriter()
        writer.SetInputConnection(clean.GetOutputPort())
        writer.WriteToOutputStringOn()
        writer.Update()

        dat = writer.GetOutputString()

        pd = clean.GetOutput()
        num = pd.GetNumberOfPoints()

        pts = [['%.8f' % x for x in pd.GetPoint(i)] for i in range(num)]

        m = re.search('POINTS.*?\n(.*?)\nP', dat, re.S)

        with open(name, 'w') as f:
            f.write(dat[:m.start(1)] + ' '.join(sum(pts, [])) + dat[m.end(1):])

        if os.path.exists('stl'):
            tri = vtk.vtkTriangleFilter()
            tri.SetInputConnection(clean.GetOutputPort())

            writer1 = vtk.vtkSTLWriter()
            writer1.SetFileName('stl/{0}.stl'.format(name[:-4]))
            writer1.SetInputConnection(tri.GetOutputPort())
            writer1.Update()
Example #17
0
#!/usr/bin/env python
# *-* coding: UTF-8 *-*

# Copyright 2012-2018 Ronald Römer
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import sys

if sys.platform.startswith('linux'):
    sys.path.extend(sys.argv[1:])

elif sys.platform.startswith('win'):
    sys.path.extend([sys.argv[1], '/'.join(sys.argv[2:])])

import vtkboolPython
vtkboolPython.vtkPolyDataBooleanFilter()

#import vtk
Example #18
0
    def export (self, name):
        extr = extrude(self.draw_bricks(self.cfg['seqs'][0], self.cfg['end_seqs'][0]), self.cfg['r'], self.cfg['q']/2)
        extr1 = extrude(self.draw_spacer(), 2*self.cfg['e'], self.cfg['q']/2+self.cfg['r'])

        extr2 = extrude(self.draw_bricks(self.cfg['seqs'][1], self.cfg['end_seqs'][1]), -self.cfg['r'], -self.cfg['q']/2)
        extr3 = extrude(self.draw_spacer(), -2*self.cfg['e'], -self.cfg['q']/2-self.cfg['r'])

        extr4 = extrude(self.draw_zz_bricks(), self.cfg['q'], -self.cfg['q']/2)

        # extr + extr1
        bf = vtkboolPython.vtkPolyDataBooleanFilter()
        bf.SetInputConnection(extr.GetOutputPort())
        bf.SetInputConnection(1, extr1.GetOutputPort())
        bf.DecPolysOff()

        # extr2 + extr3
        bf1 = vtkboolPython.vtkPolyDataBooleanFilter()
        bf1.SetInputConnection(extr2.GetOutputPort())
        bf1.SetInputConnection(1, extr3.GetOutputPort())
        bf1.DecPolysOff()

        app = vtk.vtkAppendPolyData()
        app.AddInputConnection(bf.GetOutputPort())
        app.AddInputConnection(bf1.GetOutputPort())

        bf2 = vtkboolPython.vtkPolyDataBooleanFilter()
        bf2.SetInputConnection(app.GetOutputPort())
        bf2.SetInputConnection(1, extr4.GetOutputPort())
        bf2.DecPolysOff()

        ang = self.cfg['ang']*math.pi/180

        v = [0, 5]

        _v = [math.cos(ang)*v[0]-math.sin(ang)*v[1],
            math.sin(ang)*v[0]+math.cos(ang)*v[1]]

        plane = vtk.vtkPlaneSource()
        plane.SetOrigin(0, 0, 0)
        plane.SetPoint1(0, 0, 5)
        plane.SetPoint2(_v[0], _v[1], 0)
        plane.SetCenter(0, 0 , 0)

        bf3 = vtkboolPython.vtkPolyDataBooleanFilter()
        bf3.SetInputConnection(bf2.GetOutputPort())
        bf3.SetInputConnection(1, plane.GetOutputPort())
        bf3.SetOperModeToDifference()
        bf3.DecPolysOff()

        result = bf3

        if self.cfg['end'] == 'D':

            _v = [math.cos(-ang)*v[0]-math.sin(-ang)*v[1],
                math.sin(-ang)*v[0]+math.cos(-ang)*v[1]]

            plane1 = vtk.vtkPlaneSource()
            plane1.SetOrigin(0, 0, 0)
            plane1.SetPoint2(0, 0, 5)
            plane1.SetPoint1(_v[0], _v[1], 0)
            plane1.SetCenter(-self.cfg['w'], 0 , 0)

            bf4 = vtkboolPython.vtkPolyDataBooleanFilter()
            bf4.SetInputConnection(result.GetOutputPort())
            bf4.SetInputConnection(1, plane1.GetOutputPort())
            bf4.SetOperModeToDifference()
            bf4.DecPolysOff()

            result = bf4

        if 'clip' in self.cfg:
            plane2 = vtk.vtkPlaneSource()
            plane2.SetOrigin(0, 0, 0)
            plane2.SetPoint1(0, 0, 5)
            plane2.SetPoint2(v[0], v[1], 0)
            plane2.SetCenter(-self.cfg['clip'], 0 , 0)

            bf5 = vtkboolPython.vtkPolyDataBooleanFilter()
            bf5.SetInputConnection(result.GetOutputPort())
            bf5.SetInputConnection(1, plane2.GetOutputPort())
            bf5.SetOperModeToDifference()
            bf5.DecPolysOff()

            result = bf5

        if 'pins' in self.cfg:
            app1 = vtk.vtkAppendPolyData()

            t = self.cfg.get('clip', 0)
            fake_w = self.cfg.get('fake_w', self.cfg['w'])

            u = (fake_w-t)/self.cfg['pins']/2

            h = self.cfg['q']+2*(self.cfg['r']+2*self.cfg['e'])

            mids = []

            for i in range(self.cfg['pins']):
                mid = t+u*(1+i*2)

                pin = extrude([ [-mid-2.5, self.cfg['b']], [-mid-2.5, self.cfg['b']+1.5],
                    [-mid+2.5, self.cfg['b']+1.5], [-mid+2.5, self.cfg['b']] ], h, -h/2)

                app1.AddInputConnection(pin.GetOutputPort())

                mids.append(mid)

            _f = 1 if self.cfg['flip'] else -1

            print('holds', [ (_f*mid, 2.5, 'top') for mid in mids ])

            bf6 = vtkboolPython.vtkPolyDataBooleanFilter()
            bf6.SetInputConnection(result.GetOutputPort())
            bf6.SetInputConnection(1, app1.GetOutputPort())
            bf6.DecPolysOff()

            result = bf6

        tra = vtk.vtkTransform()
        tra.Scale(-1, 1, 1)

        tf = vtk.vtkTransformPolyDataFilter()
        tf.SetInputConnection(result.GetOutputPort())
        tf.SetTransform(tra)

        if self.cfg['flip']:
            rs = vtk.vtkReverseSense()
            rs.SetInputConnection(tf.GetOutputPort())

            result = rs

        result.Update()
        bnds = Bnds(*result.GetOutput().GetBounds())

        tra2 = vtk.vtkTransform()
        tra2.Translate(0, 0, -bnds.z1)

        tf2 = vtk.vtkTransformPolyDataFilter()
        tf2.SetInputConnection(result.GetOutputPort())
        tf2.SetTransform(tra2)

        clean = vtk.vtkCleanPolyData()
        clean.SetInputConnection(tf2.GetOutputPort())

        writer = vtk.vtkPolyDataWriter()
        writer.SetInputConnection(clean.GetOutputPort())
        writer.WriteToOutputStringOn()
        writer.Update()

        dat = writer.GetOutputString()

        pd = clean.GetOutput()
        num = pd.GetNumberOfPoints()

        pts = [ [ f'{x:.8f}' for x in pd.GetPoint(i) ] for i in range(num) ]

        m = re.search('POINTS.*?\n(.*?)\nP', dat, re.S)

        with open(name, 'w') as f:
            f.write(dat[:m.start(1)] + ' '.join(sum(pts, [])) + dat[m.end(1):])