diff --git a/9G7VQJ39+FX.svg b/9G7VQJ39+FX.svg
deleted file mode 100644
index d8e346e..0000000
--- a/9G7VQJ39+FX.svg
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
\ No newline at end of file
diff --git a/sigilize.py b/sigilize.py
index aad27d2..c314521 100644
--- a/sigilize.py
+++ b/sigilize.py
@@ -1,40 +1,71 @@
import time
+import math
import swisseph as swe
import drawSvg as svg
from openlocationcode import openlocationcode as olc
-def planetaryMoment(lat, lon, epoch):
+def planetaryMoment(lat, lon, epoch): # calculate planetary ephemeris + ascendant according to location and timestamp
+
planets = [0,1,2,3,4,5,6]
tmp = time.gmtime(epoch) # convert epoch to time
hours = tmp.tm_hour + tmp.tm_min / 60 + tmp.tm_sec / 3600 # convert hh:mm:ss to decimal hours
jd = swe.julday(tmp.tm_year,tmp.tm_mon,tmp.tm_mday,hours,1) # convert to Julian day
te = jd + swe.deltat(jd) # add deltaT
+
# get ecliptic planet locations
for i in range(len(planets)):
planets[i] = swe.calc(te, i)
+
# clean up
for i in range(len(planets)):
planets[i] = planets[i][0][0]
+
cusps = swe.houses_ex(jd, lat, lon, b'P',0) # get ecliptic ascendant degree
planets.insert(0, cusps[0][0])
+
return planets
-def locationSigil(lat, lon, planets):
- # draw arcs depending on planetary positions at the moment in time
- colors = ['black', 'yellow', 'grey', 'orange', 'green', 'red', 'blue', 'black'] # black inner circle for ascendant and planetary colors
- d = svg.Drawing(600, 600, origin='center', displayInline=False) # define canvas
+def locationSigil(plusCode, planets, canvas): # draw arcs depending on planetary positions at the moment in time
+
+ colors = ['violet', 'yellow', 'white', 'orange', 'green', 'red', 'royalblue', 'indigo'] # black inner circle for ascendant and planetary colors
+
# draw rings for ascendant + planets and keep a small gap at the ecliptic degrees they are in
for i in range(len(planets)):
circleColor = colors[i]
+ # circleColor = 'grey'
degree = planets[i]
- startArc = degree + 1 + 90 # 0° is at the 12 o'clock position
- endArc = degree - 1 + 90
+ startArc = degree + 90 # 0° is at the 12 o'clock position
+ endArc = degree - 110 + 90
radius = 180 + i * 10
- d.append(svg.ArcLine(0, 0, radius, startArc, endArc, stroke=circleColor, stroke_width=5, fill='none'))
- # draw sigil based on location
- plusCode = olc.encode(lat,lon,10) # generate Open Location Code aka. plus code from coordinates
+ canvas.append(svg.ArcLine(0, 0, radius, startArc, endArc, stroke=circleColor, stroke_width=7, fill='none'))
+
codeList = list(plusCode.replace('+', '')) # remove the + in the string
- # grid for 2dimensional representation of the plus code letters
+
+ #draw global area sigil
+ arrow2 = svg.Marker(-0.5, -0.5, 0.5, 0.5, scale=5, orient='auto') # define line to terminate the sigil
+ arrow2.append(svg.Line(-0., -0.5, 0., 0.5, stroke_width=0.2, stroke='red'))
+ dot2 = svg.Marker(-0.5, -0.5, 0.5, 0.5, scale=5, orient='auto') # define circle to start the sigil
+ dot2.append(svg.Circle(0.0, 0.0, 0.4, stroke_width=0.2, stroke='red'))
+ # set up sigil path
+ p = svg.Path(stroke_width=7, stroke='red', fill='none', marker_start=dot2, marker_end=arrow2)
+ # draw sigil
+ drawGlobalSigil(codeList, p, 4)
+ canvas.append(p)
+
+ del codeList[0:4] # delete area code from list
+
+ #draw local fractal sigil
+ arrow = svg.Marker(-0.5, -0.5, 0.5, 0.5, scale=5, orient='auto') # define line to terminate the sigil
+ arrow.append(svg.Line(-0., -0.5, 0., 0.5, stroke_width=0.2, stroke='white'))
+ dot = svg.Marker(-0.5, -0.5, 0.5, 0.5, scale=5, orient='auto') # define circle to start the sigil
+ dot.append(svg.Circle(0.0, 0.0, 0.4, stroke_width=0.2, stroke='white'))
+ # set up sigil path
+ p = svg.Path(stroke_width=7, stroke='white', fill='none', marker_start=dot, marker_end=arrow)
+ # draw sigil
+ drawLocalSigil(codeList, p, 5)
+ canvas.append(p)
+
+def drawLocalSigil(points, p, length): # draw sigil based on OLC magic square
grid = {
'R' : [-103, 112], 'V' : [-35, 112], 'W' : [35, 112], 'X' : [103, 112], # | R | V | W | X |
'J' : [-103, 56], 'M' : [-35, 56], 'P' : [35, 56], 'Q' : [103, 56], # | J | M | P | Q |
@@ -42,51 +73,61 @@ def locationSigil(lat, lon, planets):
'6' : [-103, -56], '7' : [-35, -56], '8' : [35, -56], '9' : [103, -56], # | 6 | 7 | 8 | 9 |
'2' : [-103, -112], '3' : [-35, -112], '4' : [35, -112], '5' : [103, -112] # | 2 | 3 | 4 | 5 |
}
- #draw area code as red polygon
- p = svg.Path(stroke_width=5, stroke='red', fill='red')
# get the starting point
- originX = grid[codeList[0]][0]
- originY = grid[codeList[0]][1]
+ originX = grid[points[0]][0]
+ originY = grid[points[0]][1]
p.M(originX, originY)
- del codeList[0] # delete starting point from list
- # for all remaining points draw from point to point
- for c in range(3):
- x = grid[codeList[c]][0] - originX # absolute to relative coords
- y = grid[codeList[c]][1] - originY # abs. to rel. coords
+ del points[0] # delete starting point from list
+ for c in range(length):
+ x = grid[points[c]][0] - originX # abs. to rel. coords
+ y = grid[points[c]][1] - originY # abs. to rel. coords
p.l(x, y) # draw
- originX = grid[codeList[c]][0]
- originY = grid[codeList[c]][1]
- p.Z() # close the lines to starting point
- d.append(p)
- del codeList[0:3] # delete area code from list
+ originX = grid[points[c]][0]
+ originY = grid[points[c]][1]
- #draw address
- arrow = svg.Marker(-0.1, -0.5, 0.9, 0.5, scale=4, orient='auto') # define arrow to terminate the sigil
- arrow.append(svg.Line(-0.5, 0.3, 0.1, 0.3, stroke_width=2, stroke='black'))
- p = svg.Path(stroke_width=5, stroke='black', fill='none', marker_end=arrow)
- # get the starting point
- originX = ogx = grid[codeList[0]][0]
- originY = ogy = grid[codeList[0]][1]
- p.M(originX, originY)
- del codeList[0] # delete starting point from list
- for c in range(len(codeList)):
- x = grid[codeList[c]][0] - originX # abs. to rel. coords
- y = grid[codeList[c]][1] - originY # abs. to rel. coords
- p.l(x, y) # draw
- originX = grid[codeList[c]][0]
- originY = grid[codeList[c]][1]
- d.append(p)
- d.append(svg.Circle(ogx, ogy, 10, fill='white', stroke_width=5, stroke='black')) # draw circle to beginning
- fileName = '%s.svg' % (plusCode)
- d.saveSvg(fileName)
+def drawGlobalSigil(points, p, length): # draw sigil based on concentric circle positions
+ decoder = ['2', '3', '4', '5', '6', '7', '8', '9', 'C', 'F', 'G', 'H', 'J', 'M', 'P', 'Q', 'R', 'V', 'W', 'X']
+ for c in range(length):
+ index = decoder.index(points[c])
+
+ # find coordinates on circle every 18° (360° / 20 digits)
+ radius = 150 - c * 20
+ angle = 18 * index
+ x = radius * math.cos(angle)
+ y = radius * math.sin(angle)
+
+ if c == 0:
+ p.M(x,y) # starting point
+ originX = x
+ originY = y
+ else:
+ p.l(x - originX, y - originY) # draw
+ originX = x
+ originY = y
+
def main():
- lat = 55.753687
- lon = 37.619938
+
+ lat = 37.223187
+ lon = 38.922438
epoch = time.time() # now
+
+ # calculate OLC and ephemeris
+ plusCode = olc.encode(lat,lon,10) # generate Open Location Code aka. plus code from coordinates
planets = planetaryMoment(lat, lon, epoch) # generate planetary ephemeris
- locationSigil(lat,lon, planets) # draw sigil SVG
+
+ # set up SVG canvas
+ d = svg.Drawing(600, 600, origin='center', displayInline=False) # define canvas
+ d.append(svg.Circle(0, 0, 260, fill='black', stroke_width=0))
+
+ # draw sigil
+ locationSigil(plusCode, planets, d) # draw sigil SVG
+
+ # save sigil to SVG file
+ fileName = '%s-%s.svg' % (plusCode, epoch)
+ fileName = 'test.svg'
+ d.saveSvg(fileName)
if __name__ == "__main__":
main()
\ No newline at end of file
diff --git a/test.svg b/test.svg
new file mode 100644
index 0000000..5a96bd4
--- /dev/null
+++ b/test.svg
@@ -0,0 +1,29 @@
+
+
\ No newline at end of file