コード例 #1
0
ファイル: shapes.py プロジェクト: waywardengineer/shapeGen
	def addToDrawing(self, drawing, layer='0'):
		Shape.addToDrawing(self, drawing) #params: {'points' : [((x, y), angle, (strengthIn, strengthOut))]}
		curve = dxf.bezier(layer = layer)
		points = self.p['points']
		vectors = self.makeVectors(self.p['points'][0])
		curve.start(points[0][0], vectors[1])
		for i in range(1, len(points)):
			strengthIn = points[i][2][0]
			strengthOut = points[i][2][1]
			angle = radians(points[i][1])
			vectors = self.makeVectors(self.p['points'][i])
			segments = int(hypot(points[i-1][0][0] - points[i][0][0], points[i-1][0][1] - points[i][0][1]) / minLineSize) + 1
			curve.append(points[i][0], vectors[0], vectors[1], segments)
		drawing.add(curve)
コード例 #2
0
def main():
    """Run as a command line program."""
    parser = OptionParser()
    parser.add_option("-i", "--infile", dest="infile",
                      help="read specification from INFILE", metavar="INFILE")
    parser.add_option("-u", "--url", dest="url",
                      help="read specification from URL", metavar="URL")
    parser.add_option("-o", "--outdir", dest="outdir",
                      help="write manufacturing instruction files to OUTDIR", metavar="OUTDIR")

    (options, args) = parser.parse_args()

    if (options.infile == None and options.url == None) or options.outdir == None:
        log("Insufficient arguments.")
        parser.print_help()
        sys.exit(0)

    infile = open(options.infile) if options.infile else urllib.urlopen(options.url)
    o = json.loads(infile.read())
    outdir = options.outdir
    if not os.path.exists(outdir):
        os.makedirs(outdir)

    def draw_control_point(point, tangent1, tangent2=(0, 0)):
        tp1 = vadd(point, tangent1)
        tp2 = vadd(point, tangent2)
        dwg.add(dxf.circle(0.05, center=point, color=1))
        dwg.add(dxf.line(point, tp1, color=2))
        dwg.add(dxf.line(point, tp2, color=2))


    # Create a dxf for cutting the outline on the laser cutter
    filename = '/Users/rodfrey/Dropbox/outer_contour.dxf'
    beziers = beziers_to_dxf(o["outercurve_beziers"])
    dwg = dxf.drawing(filename)
    dwg.add_layer('OUTLINE', color=1)
    bez = dxf.bezier(layer="OUTLINE")
    bez.start(beziers[0][0], tangent=vsub(beziers[0][1], beziers[0][0]))
    draw_control_point(beziers[0][0], tangent1=vsub(beziers[0][1], beziers[0][0]))
#    draw_control_point(beziers[0][0], tangent1=beziers[0][1])
    for idx, b1 in enumerate(beziers[0:-1]):
        b2 = beziers[idx+1]
        bez.append(b1[3], tangent1=vsub(b1[2], b1[3]), tangent2=vsub(b2[1], b1[2]))
        draw_control_point(b1[3], tangent1=vsub(b1[2], b1[3]), tangent2=vsub(b2[1], b1[2]))
#        draw_control_point(b1[3], tangent1=b1[2], tangent2=b2[1])
    bez.append(beziers[-1][3], tangent1=vsub(beziers[-1][2], beziers[-1][3]))
    dwg.add(bez)
    dwg.save()
コード例 #3
0
import dxfwrite
from dxfwrite import DXFEngine as dxf
from dxfwrite.vector2d import vadd


def draw_control_point(point, tangent1, tangent2=(0, 0)):
    tp1 = vadd(point, tangent1)
    tp2 = vadd(point, tangent2)
    dwg.add(dxf.circle(0.05, center=point, color=1))
    dwg.add(dxf.line(point, tp1, color=2))
    dwg.add(dxf.line(point, tp2, color=2))


name = 'bezier.dxf'
dwg = dxf.drawing(name)
bezier = dxf.bezier(color=4)
dwg.add(bezier)

# define start point
bezier.start((2, 4), tangent=(0, 2))
draw_control_point((2, 4), (0, 2))

# append first point
bezier.append((6, 7), tangent1=(-2, 0), tangent2=(1, 2))
draw_control_point((6, 7), (-2, 0), (1, 2))

# tangent2 = -tangent1 = (+2, 0)
bezier.append((12, 5), tangent1=(-2, 0))
draw_control_point((12, 5), (-2, 0), (2, 0))

# for last point tangent2 is meaningless
コード例 #4
0
def main():
    """Run as a command line program."""
    parser = OptionParser()
    parser.add_option("-i",
                      "--infile",
                      dest="infile",
                      help="read specification from INFILE",
                      metavar="INFILE")
    parser.add_option("-u",
                      "--url",
                      dest="url",
                      help="read specification from URL",
                      metavar="URL")
    parser.add_option("-o",
                      "--outdir",
                      dest="outdir",
                      help="write manufacturing instruction files to OUTDIR",
                      metavar="OUTDIR")

    (options, args) = parser.parse_args()

    if (options.infile == None
            and options.url == None) or options.outdir == None:
        log("Insufficient arguments.")
        parser.print_help()
        sys.exit(0)

    infile = open(options.infile) if options.infile else urllib.urlopen(
        options.url)
    o = json.loads(infile.read())
    outdir = options.outdir
    if not os.path.exists(outdir):
        os.makedirs(outdir)

    def draw_control_point(point, tangent1, tangent2=(0, 0)):
        tp1 = vadd(point, tangent1)
        tp2 = vadd(point, tangent2)
        dwg.add(dxf.circle(0.05, center=point, color=1))
        dwg.add(dxf.line(point, tp1, color=2))
        dwg.add(dxf.line(point, tp2, color=2))

    # Create a dxf for cutting the outline on the laser cutter
    filename = '/Users/rodfrey/Dropbox/outer_contour.dxf'
    beziers = beziers_to_dxf(o["outercurve_beziers"])
    dwg = dxf.drawing(filename)
    dwg.add_layer('OUTLINE', color=1)
    bez = dxf.bezier(layer="OUTLINE")
    bez.start(beziers[0][0], tangent=vsub(beziers[0][1], beziers[0][0]))
    draw_control_point(beziers[0][0],
                       tangent1=vsub(beziers[0][1], beziers[0][0]))
    #    draw_control_point(beziers[0][0], tangent1=beziers[0][1])
    for idx, b1 in enumerate(beziers[0:-1]):
        b2 = beziers[idx + 1]
        bez.append(b1[3],
                   tangent1=vsub(b1[2], b1[3]),
                   tangent2=vsub(b2[1], b1[2]))
        draw_control_point(b1[3],
                           tangent1=vsub(b1[2], b1[3]),
                           tangent2=vsub(b2[1], b1[2]))
#        draw_control_point(b1[3], tangent1=b1[2], tangent2=b2[1])
    bez.append(beziers[-1][3], tangent1=vsub(beziers[-1][2], beziers[-1][3]))
    dwg.add(bez)
    dwg.save()
コード例 #5
0
ファイル: bezier.py プロジェクト: msarch/py
    sys.path.insert(0, os.path.abspath(os.path.join(curdir, os.path.pardir)))

import dxfwrite
from dxfwrite import DXFEngine as dxf
from dxfwrite.vector2d import vadd

def draw_control_point(point, tangent1, tangent2=(0, 0)):
    tp1 = vadd(point, tangent1)
    tp2 = vadd(point, tangent2)
    dwg.add(dxf.circle(0.05, center=point, color=1))
    dwg.add(dxf.line(point, tp1, color=2))
    dwg.add(dxf.line(point, tp2, color=2))

name = 'bezier.dxf'
dwg = dxf.drawing(name)
bezier = dxf.bezier(color=4)
dwg.add(bezier)

# define start point
bezier.start((2, 4), tangent=(0, 2))
draw_control_point((2, 4), (0, 2))

# append first point
bezier.append((6, 7), tangent1=(-2, 0), tangent2=(1, 2))
draw_control_point((6, 7), (-2, 0), (1, 2))

# tangent2 = -tangent1 = (+2, 0)
bezier.append((12, 5), tangent1=(-2, 0))
draw_control_point((12, 5), (-2, 0), (2, 0))

# for last point tangent2 is meaningless