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)
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()
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
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()
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