Permalink
Browse files

Added demo programs helloworld.sh and gsnowflake.py

  • Loading branch information...
R. Saravanan
R. Saravanan committed Oct 7, 2012
1 parent e887a92 commit 6b8ff747eeb282d818db6e22659acec7baa51f3e
Showing with 151 additions and 0 deletions.
  1. BIN doc-images/helloworld1.png
  2. +133 −0 graphterm/bin/gsnowflake.py
  3. +18 −0 helloworld.sh
View
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
@@ -0,0 +1,133 @@
+#!/usr/bin/env python
+# coding:utf-8
+# Author: mozman
+# Purpose: svg examples
+# Created: 08.09.2010
+# Copyright (C) 2010, Manfred Moitzi
+# License: MIT License
+#
+# GraphTerm-aware svgwrite demo
+# Modified from koch_snowflake.py by R. Saravanan
+
+try:
+ import svgwrite
+except ImportError:
+ # if svgwrite is not 'installed' append parent dir of __file__ to sys.path
+ import sys, os
+ parentdir = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
+ sys.path.insert(0, parentdir)
+ try:
+ import svgwrite
+ except ImportError:
+ raise Exception("Please install module 'svgwrite'")
+
+import math
+
+import time
+import gtermapi
+
+def write_svg(drawing, overwrite=False):
+ """Display SVG drawing as block image
+ """
+ blob_url = gtermapi.create_blob(drawing.tostring(), content_type="image/svg+xml")
+ gtermapi.display_blockimg(blob_url, overwrite=overwrite)
+
+def koch_snowflake(name):
+ # Koch Snowflake and Sierpinski Triangle combination fractal using recursion
+ # ActiveState Recipe 577156
+ # Created by FB36 on Sat, 27 Mar 2010 (MIT)
+ # http://code.activestate.com/recipes/577156-koch-snowflake-and-sierpinski-triangle-combination/
+
+ def tf (x0, y0, x1, y1, x2, y2):
+ a = math.sqrt((x1 - x0) ** 2 + (y1 - y0) ** 2)
+ b = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
+ c = math.sqrt((x0 - x2) ** 2 + (y0 - y2) ** 2)
+
+ if (a < stop_val) or (b < stop_val) or (c < stop_val):
+ return
+
+ x3 = (x0 + x1) / 2
+ y3 = (y0 + y1) / 2
+ x4 = (x1 + x2) / 2
+ y4 = (y1 + y2) / 2
+ x5 = (x2 + x0) / 2
+ y5 = (y2 + y0) / 2
+ points = [(x3, y3), (x4, y4), (x5, y5)]
+
+ # append new polygon to snowflake element
+ snowflake.add(dwg.polygon(points))
+ tf(x0, y0, x3, y3, x5, y5)
+ tf(x3, y3, x1, y1, x4, y4)
+ tf(x5, y5, x4, y4, x2, y2)
+
+ def sf (ax, ay, bx, by):
+ f = math.sqrt((bx - ax) ** 2 + (by - ay) ** 2)
+
+ if f < 1.:
+ return
+
+ f3 = f / 3
+ cs = (bx - ax) / f
+ sn = (by - ay) / f
+ cx = ax + cs * f3
+ cy = ay + sn * f3
+ h = f3 * math.sqrt(3) / 2
+ dx = (ax + bx) / 2 + sn * h
+ dy = (ay + by) / 2 - cs * h
+ ex = bx - cs * f3
+ ey = by - sn * f3
+ tf(cx, cy, dx, dy, ex, ey)
+ sf(ax, ay, cx, cy)
+ sf(cx, cy, dx, dy)
+ sf(dx, dy, ex, ey)
+ sf(ex, ey, bx, by)
+
+ # const values
+ stop_val = 8.
+ imgx = 512
+ imgy = 512
+
+ for stop_val in (256., 128., 64., 32., 16., 8.):
+ # create a new drawing
+ dwg = svgwrite.Drawing(name, (imgx, imgy), profile='tiny', debug=True)
+
+ # create a new <g /> element, we will insert the snowflake by the <use /> element
+ # here we set stroke, fill and stroke-width for all subelements
+ # attention: 'stroke-width' is not a valid Python identifier, so use 'stroke_witdth'
+ # underlines '_' will be converted to dashes '-', this is true for all svg-keyword-attributs
+ # if no 'id' is given ( like dwg.g(id="sflake") ), an automatic generated 'id' will be generated
+ snowflake = dwg.g(stroke="blue", fill="rgb(90%,90%,100%)", stroke_width=0.25)
+
+ # add the <g /> element to the <defs /> element of the drawing
+ dwg.defs.add(snowflake)
+
+ mx2 = imgx / 2
+ my2 = imgy / 2
+ r = my2
+ a = 2 * math.pi / 3
+ for k in range(3):
+ x0 = mx2 + r * math.cos(a * k)
+ y0 = my2 + r * math.sin(a * k)
+ x1 = mx2 + r * math.cos(a * (k + 1))
+ y1 = my2 + r * math.sin(a * (k + 1))
+ sf(x0, y0, x1, y1)
+
+ x2 = mx2 + r * math.cos(a)
+ y2 = my2 + r * math.sin(a)
+ tf(x0, y0, x1, y1, x2, y2)
+
+ # create an <use /> element
+ use_snowflake = dwg.use(snowflake)
+
+ # you can transform each <use /> element
+ # use_snowflake.rotate(15, center=(imgx/2, imgy/2))
+
+ # insert snowflake by the <use /> element
+ dwg.add(use_snowflake)
+
+ # and save the drawing
+ write_svg(dwg, overwrite=True)
+ time.sleep(0.5)
+
+if __name__ == '__main__':
+ koch_snowflake("koch_snowflake.svg")
View
@@ -0,0 +1,18 @@
+#!/bin/bash
+# helloworld.sh: a Hello World program illustrating GraphTerm escape sequences
+
+imgurl=https://github.com/mitotic/graphterm/raw/master/doc-images/helloworld1.png
+
+esc=`printf "\033"`
+graphterm_code="1155"
+echo -n "${esc}[?${graphterm_code};${GRAPHTERM_COOKIE}h"
+
+# Display text with markup
+echo '<b>Hello</b> <em style="color: red;">World!</em><p>'
+
+# Display inline image
+echo '<a href="https://github.com/mitotic/gcowsay">'
+echo '<img width="400" height="200" src="'$imgurl'"></img>'
+echo '</a>'
+
+echo -n "${esc}[?${graphterm_code}l"

0 comments on commit 6b8ff74

Please sign in to comment.