from math import degrees, radians, atan, atan2, tan, asin, sin, acos, cos, sqrt, pi import sys def Caller(): Paper_Set_up("A4",True) # ================================================================================================================================= # Parameter Definition # ================================================================================================================================= The_Longitude = 0 # Longitude in degress +ve East of Greenwich The_Time_Zone = 0 # +ve East of Greenwich The_Zone_Name = "GMT" The_Place = "Greenwich" X_Pos = 1*cm Y_Pos = 2*cm Chart_Width = WIDTH - 2*cm Chart_Height = HEIGHT - 2*cm Coloured = True Want_Multi_Year = True # EoT calculated over 4 years fron Start Year Want_Zodiac = True Which_Zodiac = 1 # 0 = IAU Constellation Boundaries : 1 = Sideral Astrology : 2 = Vernal Astrology Zodiac_Kol = color(1,0,0,.5) Want_Soltices_and_Equinoxes = False # only useful if Multi_Year is False Want_Label = True Sol_Equ_Kol = color(0,0,1,.5) Header = The_Place The_Font = "Times-Roman" The_Start_Year = 2014 The_Tweak = 1.033 DrawFlame(X_Pos, Y_Pos, Chart_Width,Chart_Height,Coloured,Header,The_Font, The_Start_Year,The_Longitude,The_Time_Zone, The_Zone_Name,The_Place,The_Tweak, Want_Zodiac, Which_Zodiac, Zodiac_Kol, Want_Soltices_and_Equinoxes, Sol_Equ_Kol, Want_Multi_Year, Want_Label) def Mark(The_x_Centre,The_y_Centre,Mark_Size,Mark_Orient,Kol,Thick): push() ms = Mark_Size/2 translate(The_x_Centre,The_y_Centre) if (Mark_Orient == 0): line(-ms, -ms, ms, ms, stroke= Kol, strokewidth=Thick) line(-ms, ms, ms, -ms, stroke= Kol, strokewidth=Thick) else: line(-ms,0,ms,0, stroke= Kol, strokewidth=Thick) line(0,-ms,0,ms, stroke= Kol, strokewidth=Thick) pop() # ================================================================================================================================= # Calculate the EoT for a given day : This routine gives EoT accurate to +/- 1.5 second over the next 50 years # ================================================================================================================================= def EoT_Calc (YYYY,DDD,The_Time_Zone,The_Longitude) : # Input : YYYY is Year # : DDD Days from Start of Year (0 = 0:00 hrs on 31st Dec; 1.5 noon on 1st Jan) # : Note this is in Local Civil Time (not UTC) # : Time_Zone in Hours (+ve East of Greenwich) # : The_Longitude, local Longtitude (+ve East of Greenwich) # Output : EOT & Longtitude Correction in MINUTES # : This is the correction to Sundial Time to give Lacal Mean Time # Accuracy : This routine will give EOT correct to +/- 3 seconds over the next 50 years # Days_2000 is deciaml days from Epoch 2000 Days_2000 = int((YYYY - 2000) * 365.25) + DDD - The_Time_Zone/24 if YYYY % 4 <> 0 : Days_2000 = Days_2000 + 1 # Eccentricity Component Ang_Anom = Days_2000 / 58.1329 # Anomalistic Phase Ecc_1 = 7.653 * sin(1 * Ang_Anom + 6.214) Ecc_2 = 0.081 * sin(2 * Ang_Anom + 6.154) # Obliquity Component Ang_Trop = Days_2000 / 58.1301 # Tropical phase Obl_1 = 0.329 * sin(1 * Ang_Trop + 3.532) Obl_2 = 9.848 * sin(2 * Ang_Trop + 0.314) Obl_3 = 0.316 * sin(3 * Ang_Trop + 0.217) Obl_4 = 0.219 * sin(4 * Ang_Trop + 0.609) Av = -0.006 Long_Adjust = The_Time_Zone * 60. - The_Longitude * 4. return Av + Ecc_1 + Ecc_2 + Obl_1 + Obl_2 + Obl_3 + Obl_4 + Long_Adjust # ================================================================================================================================= # Gets the values of EoT and the coodinates requited for thre Flame Plot # ================================================================================================================================= def Get_Flame_Coords(The_Start_Year, Multi_Year,The_Longitude, The_Time_Zone,This_Tweak) : global EoT_Array, Flame_Array # these are the output from this subroutine The_Start_Day = 1.5 #(noon on 1st Jan) The_29_Feb_Index = ((4 - The_Start_Year % 4) % 4) * 365 + 59 Month_Names = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"] if Multi_Year : # Fill a temporary array with 4 years of EoT values Temp = [] for i in range(0,1461) : Temp.append(EoT_Calc (The_Start_Year,i + The_Start_Day, The_Time_Zone, The_Longitude)) # Save & then delete the Leap Day value of EoT Leap_Value = Temp[The_29_Feb_Index] del Temp [The_29_Feb_Index] # Generate a 365 day array of average EoT values EoT_Array = [] EoT_Array = [(Temp[i] + Temp[i+365] + Temp[i+2*365] + Temp[i+3*365])/4. for i in range(0,365)] # Re-insert the 29th Feb EoT value EoT_Array.insert(59, Leap_Value) Days_in_Total = 366 else : if The_Start_Year % 4 == 0 : Days_in_Total = 366 else: Days_in_Total = 365 EoT_Array = [] for i in range(0, Days_in_Total) : EoT = EoT_Calc (The_Start_Year,i + The_Start_Day, The_Time_Zone, The_Longitude) EoT_Array.append(EoT) # Generate an array with the change in EoT from one day to the next Change_Array = [0] for i in range(1, Days_in_Total) : Change_Array.append(EoT_Array[i] - EoT_Array[i-1]) # Max_Change is used in the final intrinsic curve calculation to ensure the curved base of the Flame Max_Change = max(Change_Array) Fold_Day1 = 121 # 1st May Fold_Day2 = 213 # 1st Aug Fold_Day3 = 274 # 1st Oct Fold_Day4 = 357 # 23rd Dec # The_Closing_Tweak marginally changes y-scale of Flame from Tweak_Start_Day to the end of the of the year # to force closure of the curve Tweak_Start_Day = 274 # 1st Oct # Direction_Changer folds the curve on the Fold Days Direction_Changer = 1 Intrinsic_Mod = 1 Flame_Array = [0] for i in range(1, Days_in_Total) : if i == Fold_Day1 or i == Fold_Day2 or i == Fold_Day3 or i == Fold_Day4 : Direction_Changer = - Direction_Changer if i == Tweak_Start_Day : Intrinsic_Mod = This_Tweak # ==== This is the guts of an intrinsic curve calculation === Flame_Array.append(Flame_Array[i-1] + Intrinsic_Mod * Direction_Changer * sqrt(Max_Change**2 - Change_Array[i]**2) ) # ================================================================================================================================= # Routine for Drawing the EoT Flame # ================================================================================================================================= global EoT_Array, Flame_Array def DrawFlame(xx,yy, Chart_Width,Chart_Height,Coloured,Header,The_Font, The_Start_Year,The_Longitude,The_Time_Zone,The_Zone_Name,The_Place,The_Tweak, Want_Zodiac,Which_Zodiac, Zodiac_Kol, Want_Soltices_and_Equinoxes, Sol_Equ_Kol,Want_Multi_Year,Want_Label): global EoT_Array,Flame_Array # these calculated in the Get_Flame_Coords subroiutine Black = False Grey = False Colour = False if Coloured == 0 : Black = True if Coloured == -1 : Grey = True if Coloured == 1 : Colour = True # zz will lighten or darken the Greys if the Grey option is chosen zz = .4 My_Grey = color(zz,zz,zz) Blacks = [color(0,0,0),color(0,0,0),color(0,0,0),color(0,0,0)] Greys = [color(0,0,0),My_Grey,color(0,0,0), My_Grey] Colors = [color(1,0,0),color(0,0,1),color(.9,0,.8),color(0,.6,0)] push() # Scaler scales all chart components to that of the original design Scaler = Chart_Width/(6.4*cm) font(The_Font) fontsize(10* Scaler) strokewidth(.4 * Scaler) if Coloured == 0 : strokewidth(max(.7,.4 * Scaler)) # for Photo-etchind force linewidth to be at least .7 points # ============================================ # TRANSLATE TO ORIGIN AND DRAW SURROUNDING BOX # ============================================ translate (xx,yy) stroke(0) if Coloured == 1 : stroke(1,0,0) nofill() rect (0,0, Chart_Width, -Chart_Height) # ======================= # TRANSLATE TO GRAPH AREA # ======================= Numbers_Gap = -5.5*mm*Scaler translate (0, Numbers_Gap) Plot_Height = Chart_Height + 2* Numbers_Gap # ===================== # GET THE ARRAY OF EoTs # ===================== # This is a 366 day array with all days, except 29 Feb, being the average over 4 years EoT_Array = [] Get_Flame_Coords(The_Start_Year, Want_Multi_Year, The_Longitude, The_Time_Zone,The_Tweak) # =============== # SCALE THE CHART # =============== up_scale = int(max(EoT_Array)) + 2 down_scale = int(min(EoT_Array)) -2 Margin = .05 * max(Flame_Array) Max_Ys = Margin + max(Flame_Array) Min_Ys = -Margin - min(Flame_Array) Y_Range = Max_Ys - Min_Ys def EoT_to_Chart(EOT_val): return Chart_Width * (EOT_val - down_scale)/(up_scale - down_scale) def Ys_to_Chart (Y_val) : return - 5 - Plot_Height * (Y_val- Min_Ys) /(Y_Range) # ============== # VERTICAL LINES # ============== for counter in range (down_scale + 1, up_scale) : aa = EoT_to_Chart(float(counter)) Tick = 1.2*mm*Scaler if Colour : if counter % 5 == 0 : stroke(1,0,0) line(aa, Tick,aa,- Plot_Height-Tick) else: stroke(.6,.6,1) line(aa, 0,aa,- Plot_Height) elif Grey : if counter % 5 == 0 : stroke(0) line(aa, Tick,aa,- Plot_Height-Tick) else : stroke(.8) line(aa, 0,aa,- Plot_Height) else : stroke(color(0)) if counter % 5 == 0 : line(aa, Tick,aa,- Plot_Height-Tick) else: Dash_Line(aa, 0,aa,- Plot_Height,200) # ====================== # TOP AND BOTTOM MARGINS # ====================== stroke(0) if Coloured == 1 : stroke(1,0,0) aa = EoT_to_Chart(float(down_scale)) bb = EoT_to_Chart(float(up_scale) ) line(aa, - Plot_Height,bb,- Plot_Height) line(aa, 0,bb,0) # ============================================================ # CREATE A WHITE FILL JUST OUTSIDE THE AREA TAKEN BY THE FLAME # ============================================================ x_prev = EoT_to_Chart(EoT_Array[365]) y_prev = Ys_to_Chart(Flame_Array[365]) x_this = EoT_to_Chart(EoT_Array[0]) y_this = Ys_to_Chart(Flame_Array[0]) for counter in range(0, 366): if counter <> 365 : x_next = EoT_to_Chart(EoT_Array[counter + 1]) y_next = Ys_to_Chart(Flame_Array[counter + 1]) else : x_next = EoT_to_Chart(EoT_Array[0]) y_next = Ys_to_Chart(Flame_Array[0]) # slope is normal to curve slope = atan2(-(y_next - y_prev),(x_next - x_prev)) xinc = x_this + .7 * mm * Scaler *sin(slope) yinc = y_this + .7 * mm * Scaler *cos(slope) if(counter == 0): beginpath(xinc, yinc) else: lineto(xinc, yinc) x_prev = x_this y_prev = y_this x_this = x_next y_this = y_next whiteout = endpath(draw=False) push() nostroke() fill(1) drawpath(whiteout) pop() # ============== # MINUTE NUMBERS # ============== font(The_Font) for counter in range (down_scale + 1, up_scale) : if counter % 5 == 0: textwid = 1.*textwidth (counter) textht = textheight(counter) xx = EoT_to_Chart(float(counter)) fill(0) if Coloured == 1: fill(0,0,1) push() translate(0, -Plot_Height) Do_Straight_String(counter,xx , -2.0*mm * Scaler) pop() Do_Straight_String(counter,xx , +4*mm * Scaler) # ============ # MONTH NAMES # ============ month_starts = [0,31,60,91,121,152,182,213,244,274,305,335,366] # Blob sizes for each day of the month siz = [0,1,1,1,2,1,1,1,1,3,1,1,1,1,2,1,1,1,1,3,1,1,1,1,2,1,1,1,1,3,1] # Text alignment for each month name Aligner = [-1,-1,-1,-1,1,1,1,-1,1,1,1,1] # Offset on the month names from the arrow heads Text_XX_Offset = [ 4.5, -2.5, -6, -6, 2.0, +5.5, +5.0, -5.5, -6.5, -1.5, +4.0, +7] Text_YY_Offset = [-3.5, -4.0, -1.5, -.5, 10, +4.5, +4.0, -3.5, -0.9, +7.0, +6.2, +1.0] Text_X_Offset =[] Text_Y_Offset =[] for count in range(0,12) : Text_X_Offset.append(Text_XX_Offset[count] * Scaler) for count in range(0,12) : Text_Y_Offset.append(Text_YY_Offset[count] * Scaler) Month_Names = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"] for counter in range(0,12) : This_Month = Month_Names[counter] kol_index = counter % 4 if Black : Mon_Kol = Blacks[kol_index] if Grey : Mon_Kol = Greys [kol_index] if Colour : Mon_Kol = Colors[kol_index] Vert_Align = Text_Y_Offset[counter] * mm Hor_Align = Text_X_Offset[counter] * mm indexer = month_starts [counter] aa = EoT_to_Chart(EoT_Array [indexer]) bb = Ys_to_Chart (Flame_Array [indexer]) fill(Mon_Kol) if counter == 4 : # Special for May push() translate(aa + Hor_Align,bb + Vert_Align) rotate (90) Do_Straight_String(This_Month, 0,0) rotate (-90) pop() else: nostroke() push() translate (aa+Hor_Align, bb + Vert_Align) Do_Straight_String(This_Month,0,0) pop() # ================== # LITTLE BENT ARROWS # ================== L1 = 3.0 * mm * Scaler # Length of first part of arrow shaft L2 = 1.8 * mm * Scaler # Length of first part of arrow shaft HW = 0.5 * mm * Scaler # Width of Arrow Head HS = 0.4 * mm * Scaler # Head Spur Length HL = 0.8 * mm * Scaler # Length of Arrow Head for counter in range(0, 12) : the_index = month_starts[counter] x1 = EoT_to_Chart (EoT_Array [the_index]) y1 = Ys_to_Chart (Flame_Array[the_index]) x2 = EoT_to_Chart (EoT_Array [the_index+1]) y2 = Ys_to_Chart (Flame_Array[the_index+1]) turn = degrees(atan2((y2-y1),(x2-x1))) push() kol_index = counter % 4 if Black : Mon_Kol = Blacks[kol_index] if Grey : Mon_Kol = Greys [kol_index] if Colour : Mon_Kol = Colors[kol_index] stroke(Mon_Kol) fill(Mon_Kol) translate(x1,y1) if counter <> 4: rotate(-turn) beginpath(0,0) lineto(0,-L1) lineto(L2,-L1) lineto(L2-HS,-L1-HW) lineto(L2+HL,-L1) lineto(L2-HS,-L1+HW) lineto(L2,-L1) lineto(0,-L1) lineto(0,0) endpath(draw=True) else : # Special for May rotate(-85) LL2 = 5*mm * Scaler HS2 = .4*mm * Scaler HW2 = .5*mm * Scaler HL2 = .45*mm * Scaler beginpath(0,0) lineto(LL2,0) lineto(LL2-HS,-HW) lineto(LL2+HS+HL2,0) lineto(LL2-HS,HW) lineto(LL2,0) lineto(0,0) endpath(draw=True) pop() # =========================== # MONTHLY LINES & DAILY BLOBS # =========================== counter = 0 month_count = 0 for month_count in range(0, 12) : the_index = month_starts[month_count] last_index = month_starts[month_count+1] day = 0 while the_index < last_index: aa1 = EoT_to_Chart (EoT_Array [counter]) bb1 = Ys_to_Chart (Flame_Array[counter]) kol_index = month_count % 4 if Black : Mon_Kol = Blacks[kol_index] if Grey : Mon_Kol = Greys [kol_index] if Colour : Mon_Kol = Colors[kol_index] Blob(aa1, bb1, siz[day],Mon_Kol,Scaler) day += 1 counter += 1 the_index += 1 # ============ # ZODIAC SIGNS # ============ if Want_Zodiac : # These are Siderial Zodiac start dates if Which_Zodiac == 1 : # 1 = Sideral Astrology zodiac_starts = [104,133,166,196,228,259,289,319,349,13,43,72] zodiac_dir = [1,1,1,1,1,1,1,1,1,1,1,1] num_Signs = 12 elif Which_Zodiac == 2 : # 2 = Vernal Astrology zodiac_starts = [79,111,141,173,203,235,267,297,327,356,20,50] zodiac_dir = [1,1,1,1,-1,1,1,1,1,-1,1,1] num_Signs = 12 else : # 0 = IAU Constellation Boundaries zodiac_starts = [91,134,172,201,227,259,294,327,350,18,46,71,333] zodiac_dir = [1,1,1,-1,1,1,1,1,-1,1,1,1,1] num_Signs = 13 for counter in range(0,num_Signs) : Direction = zodiac_dir[counter] the_index = zodiac_starts[counter] x1 = EoT_to_Chart (EoT_Array [the_index]) y1 = Ys_to_Chart (Flame_Array[the_index]) x2 = EoT_to_Chart (EoT_Array [the_index+1]) y2 = Ys_to_Chart (Flame_Array[the_index+1]) turn = -Direction * pi/2. + atan2(-(y2-y1),(x2-x1)) push() translate(x1,y1) LL = 2*mm * Scaler #if counter == 1: # LL = 1*mm*Scaler xx = LL * cos(turn) yy = - LL * sin(turn) if Coloured == 1: Kol = Zodiac_Kol elif Coloured == 0: Kol = color(0) else: Kol = color(Degree_of_Greyness) stroke(Kol) strokewidth(.3*Scaler) line(0,0,xx,yy) translate(xx,yy) xxx = -Direction * LL * sin(turn) yyy = -Direction * LL * cos(turn) line(0,0,xxx,yyy) nostroke() Zodiac_Sign( xxx,yyy,1.6*Scaler,counter+1,Kol,True,True) pop() White_Blob = .1*mm * Scaler fill(1) oval(x1-White_Blob,y1-White_Blob,2*White_Blob,2*White_Blob) # ========================= # SOLTICE & EQUINOX MARKERS # ========================= if Want_Soltices_and_Equinoxes and not Want_Multi_Year: # Table of Equinoxes and Soltices from 2010 - 2030 in UTC, expressed as days since 31st Dec at 0:00 hrs Spring = [79.7305555555577,79.9729166666657,80.2180555555533,79.4597222222219,79.7062500000029, 79.9479166666642,80.1875,79.4368055555533,79.6770833333358,79.9152777777781,80.159722222219, 79.4006944444409,79.6479166666686,79.8916666666701,80.1291666666657,79.3756944444467, 79.6152777777752,79.8506944444453,80.0951388888861,79.3347222222219,79.5777777777766] Summer = [172.477777777778,172.720138888886,172.964583333334,172.211111111108,172.45208333333, 172.693055555559,172.94027777778,172.183333333334,172.421527777777,172.662499999999, 172.905555555553,172.147222222222,172.384722222225,172.623611111114,172.868750000001, 172.112500000003,172.349999999999,172.59097222222,172.834722222222,172.074999999997,172.313194444447] Autumn = [266.131249999999,266.378472222219,266.617361111108,265.863888888889,266.103472222225, 266.347916666666,266.597916666666,265.834722222222,266.07916666667,266.326388888891, 266.563194444447,265.806250000001,266.044444444444,266.284722222219,266.530555555553, 265.763194444444,266.003472222219,266.251388888886,266.489583333336,265.734722222223,265.977083333331] Winter = [355.984722222223,356.229166666664,356.466666666667,355.71597222222,355.960416666669, 356.199999999997,356.447222222225,355.686111111114,355.932638888888,356.179861111108, 356.418055555558,355.665972222225,355.908333333333,356.143750000003,356.38958333333, 355.627083333333,355.868055555555,356.112500000003,356.347222222219,355.593055555553,355.840277777781] Year_Index = The_Start_Year - 2010 Local_Spring = int(Spring[Year_Index] + The_Time_Zone/24.) Local_Summer = int(Summer[Year_Index] + The_Time_Zone/24.) Local_Autumn = int(Autumn[Year_Index] + The_Time_Zone/24.) Local_Winter = int(Winter[Year_Index] + The_Time_Zone/24.) Key_Days = [Local_Spring-1, Local_Summer-1, Local_Autumn-1, Local_Winter-1] for counter in range(0,4) : the_index = Key_Days[counter] x1 = EoT_to_Chart (EoT_Array [the_index]) y1 = Ys_to_Chart (Flame_Array[the_index]) #if My_Colour < 0 : # This_Colour = Degree_of_Greyness #elif My_Colour == 0 : # This_Colour = 0 #else: This_Colour = Sol_Equ_Kol Circ_Rad = (.65*mm * Scaler) Label = "Equinox" if counter % 2 == 1 : Label = "Soltice" push() stroke(This_Colour) strokewidth(.4*Scaler) nofill() oval(x1-Circ_Rad,y1-Circ_Rad,2*Circ_Rad,2*Circ_Rad) nostroke() fill(This_Colour) fontsize(Scaler * 1*mm) y_off = Scaler*.3*mm if counter == 0 or counter == 2 : x_off = textwidth(Label)+ 1*mm*Scaler elif counter == 1 : x_off = -1*mm*Scaler else : x_off = textwidth(Label)/2. y_off = -1*mm*Scaler text(Label, x1-x_off, y1 + y_off) pop() # =========================== # LONGITUDE & TIME ZONE LABEL # =========================== if Want_Label : if Want_Multi_Year : The_Years = str(The_Start_Year) + " - " + str(The_Start_Year + 3) else : The_Years = The_Start_Year Abs_Long = abs(The_Longitude) if The_Longitude < 0. : The_Long_Dir = "West" else: The_Long_Dir = "East" Degs = int(Abs_Long) Mins = int(60. * (Abs_Long - Degs)) Print_Years = str(The_Start_Year) if Want_Multi_Year : Print_Years = str(The_Start_Year) + " - " + str(The_Start_Year + 3) Label1 = "EoT at Noon " + The_Zone_Name + " during " + Print_Years Label2 = " at Longitude " + str(Degs) + u"° " + str(Mins) + u"’ " + The_Long_Dir Label3 = " : Time Zone " + The_Zone_Name Label4 = "" if Want_Zodiac : if Which_Zodiac == 0 : Label4 = ". Zodiac Signs are IAU Boundaries" if Which_Zodiac == 1 : Label4 = ". Zodiac Signs are Siderial Astrological" if Which_Zodiac == 2 : Label4 = ". Zodiac Signs are Tropical Astrological" My_Label = Label1 + Label2 + Label3 + Label4 My_Label = Label1 + Label4 fill(.7) fontsize(3.2*Scaler) text (My_Label,Chart_Width/2.- textwidth(My_Label)/2., 5.0*mm * Scaler) #pop() # =============== # HEADER TEXT BOX # =============== if Header : stroke(0) if Coloured == 1 : stroke(1,0,0) fill(1) Line1 = "Equation of Time" Line2 = "& Longitude Correction" Line3 = The_Place Line4 = "- in Minutes -" fontsize(7.5 * Scaler) LL = .7*textheight(Line1) Box_x = Chart_Width - 1*mm*Scaler Box_y = -Plot_Height + 1*mm*Scaler Box_w = max(textwidth(Line1),textwidth(Line2),textwidth(Line3)) + 2*mm*Scaler Box_h = 4 * LL + 1.2*mm*Scaler rect(Box_x, Box_y, -Box_w, Box_h) Line_x = Box_x - Box_w/2. Line_y1 = Box_y + LL Line_y2 = Box_y + 2*LL Line_y3 = Box_y + 3*LL Line_y4 = Box_y + 4*LL fill(0) if Coloured == 1 : fill(0,0,1) Do_Straight_String (Line1, Line_x, Line_y1) Do_Straight_String (Line2, Line_x, Line_y2) Do_Straight_String (Line3, Line_x, Line_y3) Do_Straight_String (Line4, Line_x, Line_y4) pop() # ================================================================================================================================= # EoT Blob-Mark Definition # ================================================================================================================================= def Blob (xx,yy,siz,Mon_Kol,The_Scale): push() if (siz == 0): strokewidth(.5 * The_Scale) stroke(Mon_Kol) fill(1) ss = 2.5*mm elif(siz == 1): fill(Mon_Kol) nostroke() ss = 1*mm elif(siz == 2): fill(Mon_Kol) nostroke() ss = 1.9*mm else: fill(Mon_Kol) nostroke() ss = 2.2*mm ss = ss * .4 * The_Scale oval(xx-ss/2, yy-ss/2, ss, ss) pop() # ================================================================================================================================= # Dashed Line Definition # ================================================================================================================================= def Dash_Line(x1,y1,x2,y2,Dashes) : x_inc = (x2-x1)/Dashes y_inc = (y2-y1)/Dashes counter = 0 while counter < Dashes-1 : if counter % 2 == 0 : xx = x1 + counter * x_inc yy = y1 + counter * y_inc line(xx,yy,xx + x_inc,yy + y_inc) counter = counter + 1 # ================================================================================================================================= # Convert Font Outlines from a series of Bezier Curves to a series of short line segments # ================================================================================================================================= def Lineate_Text(The_Text_Path,The_x,The_y,Fineness,Switch,UpsideDown) : if Switch == -1 : Text_Reverse = -UpsideDown else: Text_Reverse = UpsideDown Lineated_Text_Path = [] # Lineated_Text_Path will hold Original_Text_Path transformed to strainght line segments autoclosepath(close=False) for point in The_Text_Path : if point.cmd == MOVETO : Closing_x = point.x Closing_y = point.y Lineated_Text_Path.append(point) elif (point.cmd == LINETO or point.cmd == CURVETO or point.cmd == CLOSE) : # Convert all non-MOVETO points into Bezier Curves. LINETO & CLOSE are beziers with control point on segment ends # This is done since there is a routine that will auto-split any beziers into multiple parts Not_Closed_Yet = True beginpath(Last_x,Last_y) if point.cmd == CURVETO : curveto(point.ctrl1.x,point.ctrl1.y,point.ctrl2.x,point.ctrl2.y,point.x,point.y) elif point.cmd == LINETO : curveto(Last_x,Last_y, point.x,point.y, point.x,point.y) else: # a CLOSE if Last_x == Closing_x and Last_y == Closing_y : # Check if a redundant CLOSE is present Lineated_Text_Path.append(point) Not_Closed_Yet = False else : curveto(Last_x,Last_y, Closing_x, Closing_y, Closing_x, Closing_y) This_Segment = endpath(draw=False) count = 1 if Not_Closed_Yet : # Chop up the Bezier Curves into straight lines, the number of which is defined by Fineness while count <= Fineness : This_Sub_Segment = This_Segment.point(count/float(Fineness)) This_Sub_Segment.cmd = LINETO Lineated_Text_Path.append(This_Sub_Segment) count = count + 1 if point.cmd == CLOSE and Not_Closed_Yet : Lineated_Text_Path.append(point) Last_x = point.x Last_y = point.y # Find the lateral & vertical extent of the drawn points on the drawn character # excluding the initial & trailing MOVETOs that are used for spacing the next char Max_x = -9999999. Min_x = 9999999. Min_y = 9999999. counter = 0 Last_Drawn_Point = len(Lineated_Text_Path) - 4 for point in Lineated_Text_Path : if point.cmd <> 3 and counter < Last_Drawn_Point : if counter < Last_Drawn_Point : Max_x = max(Max_x,point.x) Min_x = min(Min_x,point.x) Min_y = min(Min_y,point.y) counter = counter + 1 UpsideDown_offset = 0 if UpsideDown == -1 : UpsideDown_offset = Min_y Text_Width = Max_x - Min_x Text_Off = Min_x + Text_Width/2. # Centre / Reverse / Upside-down /Stretch the text and move to the input x & y points for point in Lineated_Text_Path : point.x = Text_Reverse * (point.x - Text_Off) point.y = UpsideDown * point.y + The_y + UpsideDown_offset return Lineated_Text_Path # ================================================================================================================================= # 13 Routines for Drawing the 13 Zodiac Symbolas # ================================================================================================================================= def Aries(x,y,size,Kol,Back,Edge): beginpath(-3.284,-540.339) curveto(21.973,-612.586,63.823,-673.23176652,122.267,-722.278) curveto(180.71,-771.323,243.118,-795.845814978,309.491,-795.846) curveto(333.574,-795.846,357.362,-792.321621145,380.857,-785.273) curveto(436.07,-768.239,481.003,-738.283621145,515.659,-695.405) curveto(550.901,-650.765,568.522,-599.957700441,568.522,-542.982) curveto(568.522,-505.39,560.593,-467.505330396,544.733,-429.326) lineto(437.244,-469.855) curveto(447.23,-495.699,452.222,-522.130555066,452.222,-549.15) curveto(452.222,-596.14,438.419,-635.64007489,410.813,-667.652) curveto(383.206,-699.664,348.845,-714.201189427,307.729,-711.264) curveto(267.2,-708.327,219.917,-682.483356828,165.879,-633.731) curveto(98.918,-572.644,62.795,-502.454140969,57.509,-423.159) lineto(24.91,86.093) lineto(-30.597,85.211) lineto(-67.601,-421.396) curveto(-73.475,-500.692,-108.717,-570.294854626,-173.328,-630.207) curveto(-225.605,-678.959,-272.3,-705.096898678,-313.416,-708.621) curveto(-353.945,-712.145,-389.334,-699.223348018,-419.584,-669.855) curveto(-449.833,-640.486,-464.958,-603.775550661,-464.958,-559.722) curveto(-464.958,-529.179,-456.735,-498.635982379,-440.289,-468.093) lineto(-550.421,-425.802) curveto(-566.867,-464.568,-575.09,-502.747242291,-575.09,-540.339) curveto(-575.09,-597.315,-557.176,-648.121656388,-521.346,-692.762) curveto(-486.691,-735.053,-441.757,-765.008722467,-386.544,-782.63) curveto(-363.049,-790.266,-338.967,-794.083700441,-314.297,-794.084) curveto(-247.924,-794.084,-185.37,-769.120660793,-126.632,-719.194) curveto(-70.832,-672.204,-29.716,-612.586264317,-3.284,-540.339) qq = endpath(draw=False) push() translate(x,y) rr=[] x_shunt = 3.284 y_shunt = 440 rw = .005 * size *320 for point in qq: point.x = .0025 * size * (point.x + x_shunt) point.y = .0025 * size * (point.y + y_shunt) point.ctrl1.x = .0025 * size * (point.ctrl1.x + x_shunt) point.ctrl1.y = .0025 * size * (point.ctrl1.y + y_shunt) point.ctrl2.x = .0025 * size * (point.ctrl2.x + x_shunt) point.ctrl2.y = .0025 * size * (point.ctrl2.y + y_shunt) rr.append(point) push() nostroke() if Edge : strokewidth(.1*size) stroke(Kol) fill(1) if Back : oval(-rw,-rw,2*rw,2*rw) pop() fill(Kol) nostroke() drawpath(rr) nofill() pop() def Taurus(x,y,size,Kol,Back,Edge): beginpath(-181.258,-601.132) curveto(-121.933,-606.419,-70.538,-631.675251101,-27.073,-676.903) curveto(16.393,-722.131,38.126,-770.588581498,38.126,-822.278) lineto(145.615,-821.396) curveto(145.615,-763.246,127.113,-708.327718062,90.108,-656.639) curveto(53.103,-604.95,4.646,-565.596317181,-55.267,-538.577) curveto(5.233,-514.495,53.838,-477.197022026,90.548,-426.683) curveto(127.259,-376.169,145.615,-319.19414978,145.615,-255.758) curveto(145.615,-170.001,112.135,-96.7271762115,45.174,-35.934) curveto(-21.787,24.859,-102.549,55.2555066079,-197.117,55.256) curveto(-292.271,55.256,-373.181,24.8593348018,-439.848,-35.934) curveto(-506.515,-96.727,-539.848,-170.001039648,-539.848,-255.758) curveto(-539.848,-318.607,-521.64,-375.287559471,-485.222,-425.802) curveto(-448.805,-476.316,-400.348,-513.613682819,-339.848,-537.696) curveto(-399.76,-563.541,-448.071,-602.600325991,-484.782,-654.877) curveto(-521.493,-707.153,-539.848,-762.659030837,-539.848,-821.396) lineto(-439.407,-822.278) curveto(-439.407,-768.826,-418.115,-719.781427313,-375.531,-675.141) curveto(-332.946,-630.501,-281.699,-605.831154185,-221.786,-601.132) curveto(-221.786,-601.132,-208.277,-601.13215859,-181.258,-601.132) qq = endpath(draw=False) beginpath(-177.733,-478.665) curveto(-190.656,-479.84,-203.871,-479.839947137,-217.381,-478.665) curveto(-279.055,-474.554,-330.89,-451.94,-372.888,-410.824) curveto(-414.885,-369.708,-435.883,-320.662546256,-435.883,-263.687) curveto(-435.883,-203.188,-412.682,-151.940004405,-366.28,-109.943) curveto(-319.877,-67.945,-263.49,-46.9471365639,-197.117,-46.947) curveto(-131.331,-46.947,-74.944,-68.0922995595,-27.954,-110.383) curveto(19.036,-152.674,42.531,-203.775030837,42.531,-263.687) curveto(42.531,-320.075,21.239,-368.973361233,-21.346,-410.383) curveto(-63.93,-451.793,-116.059,-474.553577093,-177.733,-478.665) qq1=endpath(draw=False) qq = qq.difference(qq1) push() translate(x,y) rr=[] x_shunt = 197.1165 y_shunt = 448 rw = .005 * size *320 for point in qq: point.x = .0025 * size * (point.x + x_shunt) point.y = .0025 * size * (point.y + y_shunt) point.ctrl1.x = .0025 * size * (point.ctrl1.x + x_shunt) point.ctrl1.y = .0025 * size * (point.ctrl1.y + y_shunt) point.ctrl2.x = .0025 * size * (point.ctrl2.x + x_shunt) point.ctrl2.y = .0025 * size * (point.ctrl2.y + y_shunt) rr.append(point) push() nostroke() if Edge : strokewidth(.1*size) stroke(Kol) fill(1) if Back : oval(-rw,-rw,2*rw,2*rw) pop() nostroke() fill(Kol) drawpath(rr) nofill() pop() def Gemini(x,y,size,Kol,Back,Edge): beginpath(-239.407,-98.93) curveto(-173.622,-103.041,-121.933,-105.0969163,-84.341,-105.097) curveto(-47.337,-105.097,3.764,-103.041136564,68.963,-98.93) lineto(68.963,-657.52) curveto(3.764,-652.821,-47.337,-650.471365639,-84.341,-650.471) curveto(-121.933,-650.471,-173.622,-652.820828194,-239.407,-657.52) qq = endpath(draw=False) beginpath(375.57,-68.093) lineto(375.57,39.396) curveto(179.975,8.266,26.672,-7.29955947137,-84.341,-7.3) curveto(-193.006,-7.3,-350.713,8.26562995595,-557.469,39.396) lineto(-557.469,-68.093) lineto(-348.659,-95.405) lineto(-348.659,-661.044) lineto(-557.469,-698.048) lineto(-557.469,-802.013) curveto(-497.557,-791.44,-440.876,-782.33630837,-387.425,-774.7) curveto(-258.79,-756.492,-157.763,-747.093982379,-84.341,-746.507) curveto(27.26,-745.919,180.562,-764.421251101,375.57,-802.013) lineto(375.57,-698.048) lineto(170.284,-661.044) lineto(170.284,-95.405) qq1=endpath(draw=False) qq = qq1.difference(qq) push() translate(x,y) rr=[] x_shunt = 90.9495 y_shunt = 380 rw = .005 * size *320 for point in qq: point.x = .0025 * size * (point.x + x_shunt) point.y = .0025 * size * (point.y + y_shunt) point.ctrl1.x = .0025 * size * (point.ctrl1.x + x_shunt) point.ctrl1.y = .0025 * size * (point.ctrl1.y + y_shunt) point.ctrl2.x = .0025 * size * (point.ctrl2.x + x_shunt) point.ctrl2.y = .0025 * size * (point.ctrl2.y + y_shunt) rr.append(point) push() nostroke() if Edge : strokewidth(.1*size) stroke(Kol) fill(1) if Back : oval(-rw,-rw,2*rw,2*rw) pop() fill(Kol) nostroke() drawpath(rr) nofill() pop() def Cancer(x,y,size,Kol,Back,Edge): beginpath(393.192,-229.326) lineto(391.43,-226.683) curveto(350.901,-165.596,286.731,-114.641907489,198.919,-73.819) curveto(111.106,-32.997,20.799,-12.5859030837,-72.007,-12.586) curveto(-274.651,-12.586,-443.518,-115.962255507,-578.615,-322.718) lineto(-516.941,-379.987) curveto(-398.291,-191.44,-247.338,-97.1674008811,-64.077,-97.167) curveto(32.252,-97.167,115.952,-116.84414978,187.024,-156.198) curveto(98.918,-163.834,54.866,-215.815964758,54.866,-312.145) curveto(54.866,-357.373,72.633,-395.992497797,108.17,-428.004) curveto(143.706,-460.016,186.73,-476.022026432,237.244,-476.022) curveto(286.584,-476.022,328.874,-460.016312775,364.117,-428.004) curveto(399.359,-395.992,416.98,-357.373207048,416.98,-312.145) curveto(416.98,-281.015,409.051,-253.408343612,393.192,-229.326) qq = endpath(draw=False) beginpath(60.152,-797.608) curveto(261.621,-797.608,430.489,-693.937894273,566.76,-486.595) lineto(504.205,-436.374) curveto(383.206,-624.334,232.546,-718.31277533,52.222,-718.313) curveto(-1.816,-718.313,-45.575,-715.082264317,-79.055,-708.621) curveto(-121.933,-700.985,-163.636,-685.713770925,-204.165,-662.806) curveto(-159.525,-659.282,-125.164,-641.954634361,-101.081,-610.824) curveto(-78.761,-582.042,-67.601,-545.038405286,-67.601,-499.811) curveto(-67.601,-454.583,-85.222,-415.81660793,-120.465,-383.511) curveto(-155.707,-351.205,-198.585,-335.052863436,-249.099,-335.053) curveto(-299.026,-335.053,-341.61,-351.205418502,-376.852,-383.511) curveto(-412.095,-415.817,-429.716,-454.582740088,-429.716,-499.811) curveto(-429.716,-526.83,-422.667,-553.261251101,-408.57,-579.106) curveto(-374.503,-641.955,-311.067,-694.524017621,-218.262,-736.815) curveto(-128.394,-777.344,-35.59,-797.607929515,60.152,-797.608) qq1 = endpath(draw=False) beginpath(-146.896,-499.811) curveto(-146.896,-525.068,-156.882,-546.800202643,-176.852,-565.009) curveto(-196.823,-583.217,-220.905,-592.321585903,-249.099,-592.322) curveto(-276.118,-592.322,-299.613,-583.217418502,-319.584,-565.009) curveto(-339.554,-546.8,-349.54,-525.067674009,-349.54,-499.811) curveto(-349.54,-474.553,-339.701,-452.967784141,-320.024,-435.053) curveto(-300.347,-417.138,-276.706,-408.18061674,-249.099,-408.181) curveto(-220.905,-408.181,-196.823,-417.137942731,-176.852,-435.053) curveto(-156.882,-452.968,-146.896,-474.553471366,-146.896,-499.811) rr = endpath(draw=False) beginpath(134.161,-312.145) curveto(134.161,-286.888,144.293,-265.008903084,164.557,-246.507) curveto(184.822,-228.004,209.051,-218.753303965,237.244,-218.753) curveto(264.851,-218.753,288.639,-228.004312775,308.61,-246.507) curveto(328.581,-265.009,338.566,-286.888273128,338.566,-312.145) curveto(338.566,-337.402,328.581,-358.988162996,308.61,-376.903) curveto(288.639,-394.818,264.851,-403.775330396,237.244,-403.775) curveto(209.051,-403.775,184.822,-394.818004405,164.557,-376.903) curveto(144.293,-358.988,134.161,-337.402475771,134.161,-312.145) rr1 = endpath(draw=False) aa = qq.difference(rr1) bb = qq1.difference(rr) qq = aa.union(bb) push() translate(x,y) rr=[] x_shunt = 5.9275 y_shunt = 409.804 rw = .005 * size *320 for point in qq: point.x = .0025 * size * (point.x + x_shunt) point.y = .0025 * size * (point.y + y_shunt) point.ctrl1.x = .0025 * size * (point.ctrl1.x + x_shunt) point.ctrl1.y = .0025 * size * (point.ctrl1.y + y_shunt) point.ctrl2.x = .0025 * size * (point.ctrl2.x + x_shunt) point.ctrl2.y = .0025 * size * (point.ctrl2.y + y_shunt) rr.append(point) push() nostroke() if Edge : strokewidth(.1*size) stroke(Kol) fill(1) if Back : oval(-rw,-rw,2*rw,2*rw) pop() fill(Kol) nostroke() drawpath(rr) nofill() pop() def Leo(x,y,size,Kol,Back,Edge): beginpath(-220.905,-311.264) curveto(-208.57,-291.294,-202.403,-270.148422907,-202.403,-247.828) lineto(-201.522,-240.78) lineto(-202.403,-240.78) curveto(-202.403,-199.664,-220.465,-164.568427313,-256.588,-135.493) curveto(-292.712,-106.418,-336.03,-91.8810572687,-386.544,-91.881) curveto(-437.058,-91.881,-480.083,-106.565198238,-515.619,-135.934) curveto(-551.155,-165.303,-568.923,-201.425629956,-568.923,-244.304) curveto(-568.923,-286.595,-551.302,-322.571070485,-516.059,-352.233) curveto(-480.817,-381.896,-437.646,-396.726872247,-386.544,-396.727) curveto(-353.651,-396.727,-333.974,-395.552140969,-327.513,-393.203) curveto(-370.392,-499.517,-391.83,-583.510704846,-391.83,-645.185) curveto(-391.83,-786.155,-291.391,-856.63876652,-90.509,-856.639) curveto(153.252,-856.639,275.13,-774.407577093,275.13,-609.943) curveto(275.13,-552.38,259.858,-484.245621145,229.315,-405.537) curveto(209.932,-355.611,181.151,-294.524590308,142.971,-222.278) curveto(110.666,-161.191,93.926,-126.536017621,92.751,-118.313) curveto(92.751,-70.735,121.238,-49.0029162996,178.214,-53.115) curveto(174.689,-52.527,172.634,-51.9397973568,172.046,-51.352) curveto(173.221,-51.352,174.102,-51.3524229075,174.689,-51.352) curveto(215.806,-51.352,246.936,-57.5197621145,268.081,-69.855) lineto(276.892,14.727) curveto(235.188,24.125,197.01,28.8237885463,162.355,28.824) curveto(129.462,28.824,104.205,24.1248634361,86.584,14.727) curveto(31.371,-14.054,3.764,-50.7648281938,3.764,-95.405) curveto(3.764,-103.629,4.645,-112.439013216,6.407,-121.837) curveto(8.757,-136.521,25.791,-173.231718062,57.509,-231.969) curveto(96.276,-304.804,123.882,-360.897013216,140.328,-400.251) curveto(169.11,-470.149,183.5,-529.178907489,183.5,-577.344) curveto(183.5,-698.93,92.165,-759.72246696,-90.509,-759.722) curveto(-225.605,-759.722,-293.152,-704.216414097,-293.152,-593.203) curveto(-293.152,-537.989,-269.07,-444.010942731,-220.905,-311.264) qq = endpath(draw=False) beginpath(-485.222,-244.304) curveto(-485.222,-221.984,-475.531,-202.747511013,-456.148,-186.595) curveto(-436.764,-170.442,-413.563,-162.365638767,-386.544,-162.366) curveto(-358.937,-162.366,-335.296,-170.4419163,-315.619,-186.595) curveto(-295.942,-202.748,-286.104,-221.983735683,-286.104,-244.304) curveto(-286.104,-267.212,-296.089,-286.594634361,-316.059,-302.454) curveto(-336.03,-318.313,-359.525,-326.242290749,-386.544,-326.242) curveto(-413.563,-326.242,-436.764,-318.312854626,-456.148,-302.454) curveto(-475.531,-286.595,-485.222,-267.211568282,-485.222,-244.304) qq1 = endpath(draw=False) qq = qq.difference(qq1) push() translate(x,y) rr=[] x_shunt = 80 y_shunt = 410 rw = .005 * size *320 for point in qq: point.x = .0025 * size * (point.x + x_shunt) point.y = .0025 * size * (point.y + y_shunt) point.ctrl1.x = .0025 * size * (point.ctrl1.x + x_shunt) point.ctrl1.y = .0025 * size * (point.ctrl1.y + y_shunt) point.ctrl2.x = .0025 * size * (point.ctrl2.x + x_shunt) point.ctrl2.y = .0025 * size * (point.ctrl2.y + y_shunt) rr.append(point) push() nostroke() if Edge : strokewidth(.1*size) stroke(Kol) fill(1) if Back : oval(-rw,-rw,2*rw,2*rw) pop() nostroke() fill(Kol) drawpath(rr) nofill() pop() def Virgo(x,y,size,Kol,Back,Edge): beginpath(247.817,-199.37) curveto(247.817,-169.414,257.509,-147.387735683,276.892,-133.291) curveto(318.008,-183.805,353.838,-253.114096916,384.381,-341.22) curveto(414.925,-427.564,429.609,-501.278696035,428.434,-562.366) curveto(427.847,-592.322,418.889,-618.018982379,401.562,-639.458) curveto(384.234,-660.897,363.236,-671.616740088,338.566,-671.617) curveto(313.309,-671.617,292.017,-660.750475771,274.689,-639.018) curveto(257.362,-617.285,248.698,-591.440678414,248.698,-561.485) qq = endpath(draw=False) beginpath(315.659,-76.022) curveto(362.649,-61.925,433.72,-58.400845815,528.874,-65.449) lineto(523.588,7.678) curveto(416.099,7.678,372.927,7.9720969163,394.073,8.559) curveto(341.796,6.797,300.387,-1.13208810573,269.844,-15.229) curveto(244.587,7.679,219.917,25.005814978,195.835,36.753) lineto(165.879,-27.564) curveto(180.563,-33.438,195.835,-43.129154185,211.694,-56.639) curveto(197.009,-70.148,187.612,-81.3083259912,183.5,-90.119) curveto(177.626,-102.454,174.689,-120.07477533,174.689,-142.982) lineto(174.689,-570.295) curveto(174.689,-606.125,166.466,-633.878022026,150.02,-653.555) curveto(133.573,-673.232,110.666,-683.070484581,81.297,-683.07) curveto(21.973,-683.07,-7.689,-641.367524229,-7.689,-557.96) lineto(-7.689,-89.238) lineto(-77.293,-89.238) lineto(-77.293,-557.96) curveto(-77.293,-592.615,-88.306,-622.130568282,-110.333,-646.507) curveto(-132.359,-670.883,-158.35,-683.070484581,-188.306,-683.07) curveto(-215.325,-683.07,-235.883,-670.148440529,-249.98,-644.304) curveto(-262.902,-621.984,-269.363,-593.202819383,-269.363,-557.96) lineto(-270.244,-557.96) lineto(-270.244,-89.238) lineto(-352.183,-89.238) lineto(-352.183,-557.96) curveto(-352.183,-636.669,-375.971,-676.022026432,-423.548,-676.022) curveto(-447.631,-676.022,-462.902,-671.616784141,-469.363,-662.806) curveto(-476.999,-647.534,-484.929,-631.969242291,-493.152,-616.11) lineto(-563.637,-616.11) curveto(-556.588,-654.289,-542.198,-686.007215859,-520.465,-711.264) curveto(-494.62,-741.22,-462.315,-756.198237885,-423.548,-756.198) curveto(-395.942,-756.198,-374.209,-750.618264317,-358.35,-739.458) curveto(-342.491,-728.298,-327.22,-709.208651982,-312.535,-682.189) curveto(-282.579,-741.514,-239.995,-771.176211454,-184.782,-771.176) curveto(-126.632,-771.176,-82.873,-741.514246696,-53.504,-682.189) curveto(-24.136,-741.514,19.623,-771.176211454,77.773,-771.176) curveto(135.923,-771.176,179.095,-741.220563877,207.289,-681.308) curveto(236.657,-741.221,279.829,-771.176211454,336.804,-771.176) curveto(379.682,-771.176,418.302,-752.821035242,452.663,-716.11) curveto(487.024,-679.399,503.911,-636.081013216,503.324,-586.154) curveto(502.736,-508.621,484.675,-421.396960352,449.139,-324.48) curveto(413.603,-227.563,369.11,-144.744837004,315.659,-76.022) qq1=endpath(draw=False) qq = qq1.difference(qq) push() translate(x,y) rr=[] x_shunt = -18 y_shunt = 378.2115 rw = .005 * size *330 for point in qq: point.x = .0025 * size * (point.x + x_shunt) point.y = .0025 * size * (point.y + y_shunt) point.ctrl1.x = .0025 * size * (point.ctrl1.x + x_shunt) point.ctrl1.y = .0025 * size * (point.ctrl1.y + y_shunt) point.ctrl2.x = .0025 * size * (point.ctrl2.x + x_shunt) point.ctrl2.y = .0025 * size * (point.ctrl2.y + y_shunt) rr.append(point) push() nostroke() if Edge : strokewidth(.1*size) stroke(Kol) fill(1) if Back : oval(-rw,-rw,2*rw,2*rw) pop() fill(Kol) nostroke() drawpath(rr) nofill() pop() def Libra(x,y,size,Kol,Back,Edge): beginpath(-563.637,-107.74) lineto(560.593,-107.74) lineto(560.593,-16.991) lineto(-563.637,-16.991) qq = endpath(draw=False) beginpath(121.826,-220.515) lineto(121.826,-330.648) curveto(156.481,-368.24,173.808,-411.998281938,173.808,-461.925) curveto(173.808,-511.852,156.775,-555.023312775,122.707,-591.441) curveto(88.639,-627.858,47.524,-646.066079295,-0.641,-646.066) curveto(-48.218,-646.066,-89.04,-627.857744493,-123.108,-591.441) curveto(-157.176,-555.023,-174.209,-511.851938326,-174.209,-461.925) curveto(-174.209,-410.824,-156.882,-367.064792952,-122.227,-330.648) lineto(-122.227,-220.515) lineto(-563.637,-219.634) lineto(-563.637,-313.907) lineto(-221.786,-313.907) curveto(-254.679,-361.485,-271.126,-415.816140969,-271.126,-476.903) curveto(-271.126,-555.611,-244.841,-622.717784141,-192.271,-678.225) curveto(-139.701,-733.732,-75.825,-761.484581498,-0.641,-761.485) curveto(73.956,-761.485,137.978,-733.731555066,191.43,-678.225) curveto(244.881,-622.718,271.606,-555.611259912,271.606,-476.903) curveto(271.606,-416.404,254.866,-362.072193833,221.385,-313.907) lineto(560.593,-313.907) lineto(560.593,-219.634) curveto(559.418,-217.872,413.164,-218.165920705,121.826,-220.515) qq1 = endpath(draw=False) qq = qq.union(qq1) push() translate(x,y) rr=[] x_shunt = -10 y_shunt = 370 rw = .005 * size *330 for point in qq: point.x = .0025 * size * (point.x + x_shunt) point.y = .0025 * size * (point.y + y_shunt) point.ctrl1.x = .0025 * size * (point.ctrl1.x + x_shunt) point.ctrl1.y = .0025 * size * (point.ctrl1.y + y_shunt) point.ctrl2.x = .0025 * size * (point.ctrl2.x + x_shunt) point.ctrl2.y = .0025 * size * (point.ctrl2.y + y_shunt) rr.append(point) push() nostroke() if Edge : strokewidth(.1*size) stroke(Kol) fill(1) if Back : oval(-rw,-rw,2*rw,2*rw) pop() fill(Kol) nostroke() drawpath(rr) nofill() pop() def Scorpio(x,y,size,Kol,Back,Edge): beginpath(-76.412,-682.189) curveto(-44.106,-741.514,3.47,-771.176211454,66.319,-771.176) curveto(112.722,-771.176,152.222,-753.114718062,184.822,-716.991) curveto(217.421,-680.868,233.72,-637.255762115,233.72,-586.154) curveto(233.72,-557.373,234.895,-483.658449339,237.244,-365.009) curveto(239.007,-299.223,237.832,-239.017894273,233.72,-184.392) curveto(229.609,-129.179,252.516,-101.572687225,302.443,-101.573) curveto(360.005,-101.573,417.567,-133.584114537,475.13,-197.608) lineto(412.575,-197.608) lineto(412.575,-253.996) lineto(584.381,-267.211) lineto(580.857,-62.806) lineto(529.756,-62.806) lineto(529.756,-143.863) curveto(493.338,-108.621,452.516,-79.2526872247,407.289,-55.758) curveto(357.362,-29.913,312.722,-16.9911894273,273.368,-16.991) curveto(192.31,-16.991,150.314,-69.8540969163,147.377,-175.581) curveto(147.377,-175.581,147.377,-309.794546256,147.377,-578.225) curveto(147.377,-656.345,119.183,-695.405286344,62.795,-695.405) curveto(-0.641,-695.405,-32.359,-658.98861674,-32.359,-586.154) lineto(-34.121,-586.154) lineto(-34.121,-89.238) lineto(-105.487,-89.238) lineto(-105.487,-573.819) curveto(-105.487,-607.3,-117.087,-633.143814978,-140.289,-651.352) curveto(-163.49,-669.561,-191.83,-678.665198238,-225.311,-678.665) curveto(-255.854,-678.665,-280.523,-665.743154185,-299.319,-639.899) curveto(-316.941,-616.404,-325.751,-587.91646696,-325.751,-554.436) lineto(-326.632,-554.436) lineto(-326.632,-89.238) lineto(-408.57,-89.238) lineto(-408.57,-554.436) curveto(-408.57,-607.887,-409.452,-638.136528634,-411.214,-645.185) curveto(-416.5,-670.442,-432.946,-683.070484581,-460.553,-683.07) curveto(-484.635,-683.07,-499.319,-680.427339207,-504.606,-675.141) curveto(-512.242,-667.505,-516.059,-647.240986784,-516.059,-614.348) lineto(-583.901,-614.348) curveto(-583.901,-667.799,-574.503,-707.299431718,-555.707,-732.85) curveto(-536.911,-758.401,-505.193,-771.176211454,-460.553,-771.176) curveto(-434.121,-771.176,-413.857,-763.54045815,-399.76,-748.269) curveto(-395.061,-742.982,-382.726,-722.130872247,-362.756,-685.714) curveto(-348.071,-711.558,-327.66,-732.262770925,-301.522,-747.828) curveto(-275.384,-763.394,-247.337,-771.176211454,-217.381,-771.176) curveto(-188.012,-771.176,-160.7,-763.099933921,-135.443,-746.947) curveto(-110.186,-730.794,-90.509,-709.208651982,-76.412,-682.189) qq = endpath(draw=False) push() translate(x,y) rr=[] x_shunt = -20 y_shunt = 415 rw = .005 * size *340 for point in qq: point.x = .0025 * size * (point.x + x_shunt) point.y = .0025 * size * (point.y + y_shunt) point.ctrl1.x = .0025 * size * (point.ctrl1.x + x_shunt) point.ctrl1.y = .0025 * size * (point.ctrl1.y + y_shunt) point.ctrl2.x = .0025 * size * (point.ctrl2.x + x_shunt) point.ctrl2.y = .0025 * size * (point.ctrl2.y + y_shunt) rr.append(point) push() nostroke() if Edge : strokewidth(.1*size) stroke(Kol) fill(1) if Back : oval(-rw,-rw,2*rw,2*rw) pop() fill(Kol) nostroke() drawpath(rr) nofill() pop() def Sagitarius(x,y,size,Kol,Back,Edge): beginpath(441.65,-714.789) lineto(-3.284,-405.537) lineto(49.579,-330.648) lineto(-46.456,-261.044) lineto(-99.319,-338.577) lineto(-493.152,-64.568) lineto(-549.54,-144.744) lineto(-155.707,-418.753) lineto(-206.808,-491) lineto(-112.535,-561.485) lineto(-59.672,-486.595) lineto(352.663,-772.938) lineto(239.888,-798.489) lineto(276.011,-872.498) lineto(543.852,-849.59) lineto(502.443,-601.132) lineto(409.051,-620.515) qq = endpath(draw=False) push() translate(x,y) rr=[] x_shunt = -10 y_shunt = 465 rw = .005 * size *340 for point in qq: point.x = .0025 * size * (point.x + x_shunt) point.y = .0025 * size * (point.y + y_shunt) point.ctrl1.x = .0025 * size * (point.ctrl1.x + x_shunt) point.ctrl1.y = .0025 * size * (point.ctrl1.y + y_shunt) point.ctrl2.x = .0025 * size * (point.ctrl2.x + x_shunt) point.ctrl2.y = .0025 * size * (point.ctrl2.y + y_shunt) rr.append(point) push() nostroke() if Edge : strokewidth(.1*size) stroke(Kol) fill(1) if Back : oval(-rw,-rw,2*rw,2*rw) pop() fill(Kol) nostroke() drawpath(rr) nofill() pop() def Capricorn(x,y,size,Kol,Back,Edge): beginpath(-558.35,-595.846) curveto(-567.748,-595.846,-572.447,-600.838422907,-572.447,-610.824) curveto(-572.447,-620.809,-567.748,-636.080660793,-558.35,-656.639) curveto(-550.127,-673.673,-542.198,-690.412546256,-534.562,-706.859) curveto(-516.353,-747.975,-497.851,-768.533039648,-479.055,-768.533) curveto(-452.036,-768.533,-427.66,-732.997418502,-405.927,-661.925) lineto(-221.786,-135.053) lineto(-18.262,-712.145) curveto(-12.388,-721.543,-6.221,-729.766484581,0.24,-736.815) curveto(14.924,-753.849,28.434,-762.365638767,40.769,-762.366) curveto(61.327,-762.366,82.472,-742.688889868,104.205,-703.335) curveto(110.079,-755.024,129.462,-797.314079295,162.355,-830.207) curveto(195.248,-863.1,236.657,-879.546255507,286.584,-879.546) curveto(335.923,-879.546,378.948,-861.631603524,415.659,-825.802) curveto(452.369,-789.972,470.725,-746.800546256,470.725,-696.286) curveto(470.725,-646.947,453.104,-604.069198238,417.861,-567.652) curveto(382.619,-531.235,341.209,-513.026431718,293.632,-513.026) curveto(298.331,-513.026,284.528,-514.494845815,252.222,-517.432) lineto(409.932,-215.229) curveto(423.441,-181.749,430.196,-156.492008811,430.196,-139.458) curveto(430.196,-88.944,420.505,-47.2409867841,401.121,-14.348) curveto(376.451,26.768,338.566,47.3259911894,287.465,47.326) curveto(234.014,47.326,192.017,29.1176563877,161.474,-7.3) curveto(133.28,-41.955,119.183,-86.5944405286,119.183,-141.22) curveto(119.183,-147.094,121.826,-150.030837004,127.112,-150.031) curveto(117.714,-149.443,123.882,-149.149779736,145.615,-149.15) curveto(154.425,-149.15,160.005,-144.450854626,162.355,-135.053) lineto(173.808,-90.119) curveto(180.857,-61.925,192.164,-41.6608546256,207.729,-29.326) curveto(223.294,-16.991,246.055,-10.8237885463,276.011,-10.824) curveto(313.016,-10.824,337.685,-23.7458325991,350.02,-49.59) curveto(358.83,-67.212,363.236,-96.2861409692,363.236,-136.815) curveto(363.236,-157.373,359.711,-173.819321586,352.663,-186.154) lineto(146.496,-542.101) lineto(55.747,-661.925) lineto(-221.786,63.185) lineto(-236.764,63.185) lineto(-483.46,-635.493) curveto(-518.115,-608.474,-543.078,-595.258440529,-558.35,-595.846) qq = endpath(draw=False) beginpath(285.703,-580.868) curveto(317.421,-580.868,344.146,-591.880947137,365.879,-613.907) curveto(387.612,-635.934,398.478,-663.09969163,398.478,-695.405) curveto(398.478,-727.711,387.759,-754.729700441,366.319,-776.463) curveto(344.88,-798.195,318.302,-809.061674009,286.584,-809.062) curveto(253.691,-809.062,225.938,-797.901726872,203.324,-775.581) curveto(180.71,-753.261,169.403,-726.242449339,169.403,-694.524) curveto(169.403,-663.393,180.563,-636.668246696,202.883,-614.348) curveto(225.203,-592.028,252.81,-580.86784141,285.703,-580.868) qq1 = endpath(draw=False) qq = qq.difference(qq1) push() translate(x,y) rr=[] x_shunt = 19 y_shunt = 425 rw = .005 * size *320 for point in qq: point.x = .0025 * size * (point.x + x_shunt) point.y = .0025 * size * (point.y + y_shunt) point.ctrl1.x = .0025 * size * (point.ctrl1.x + x_shunt) point.ctrl1.y = .0025 * size * (point.ctrl1.y + y_shunt) point.ctrl2.x = .0025 * size * (point.ctrl2.x + x_shunt) point.ctrl2.y = .0025 * size * (point.ctrl2.y + y_shunt) rr.append(point) push() nostroke() if Edge : strokewidth(.1*size) stroke(Kol) fill(1) if Back : oval(-rw,-rw,2*rw,2*rw) pop() fill(Kol) nostroke() drawpath(rr) nofill() pop() def Aquarius(x,y,size,Kol,Back,Edge): beginpath(-545.134,-498.93) curveto(-531.625,-498.93,-516.647,-510.676828194,-500.2,-534.172) curveto(-474.943,-570.002,-458.497,-591.440493392,-450.861,-598.489) curveto(-427.954,-621.397,-400.935,-632.850220264,-369.804,-632.85) curveto(-336.911,-632.85,-307.249,-621.396590308,-280.817,-598.489) curveto(-276.118,-593.79,-257.322,-572.351145374,-224.43,-534.172) curveto(-204.459,-510.677,-186.25,-498.929515419,-169.804,-498.93) curveto(-152.183,-498.93,-135.443,-510.383145374,-119.584,-533.291) curveto(-91.977,-573.82,-76.999,-595.258431718,-74.65,-597.608) curveto(-52.917,-621.103,-25.898,-632.850220264,6.407,-632.85) curveto(40.475,-632.85,70.137,-621.396590308,95.394,-598.489) curveto(100.681,-593.79,118.595,-572.057462555,149.139,-533.291) curveto(167.935,-510.383,185.849,-498.929515419,202.883,-498.93) curveto(219.917,-498.93,236.363,-510.676828194,252.222,-534.172) curveto(279.829,-574.113,295.101,-595.552114537,298.037,-598.489) curveto(319.77,-621.397,346.495,-632.850220264,378.214,-632.85) curveto(412.281,-632.85,442.824,-621.396590308,469.844,-598.489) curveto(479.242,-590.266,497.744,-569.120581498,525.35,-535.053) curveto(543.559,-512.145,559.711,-500.691629956,573.808,-500.692) lineto(573.808,-412.586) curveto(543.265,-412.586,515.952,-424.03953304,491.87,-446.947) curveto(474.249,-468.68,456.628,-490.118837004,439.007,-511.264) curveto(419.036,-534.172,398.772,-545.331867841,378.214,-544.744) curveto(361.18,-544.157,345.615,-532.409806167,331.518,-509.502) curveto(308.023,-472.498,293.632,-451.05876652,288.346,-445.185) curveto(266.613,-422.277,238.126,-410.823788546,202.883,-410.824) curveto(168.816,-410.824,139.154,-422.571101322,113.896,-446.066) curveto(108.61,-450.178,90.695,-471.616546256,60.152,-510.383) curveto(41.356,-533.291,23.441,-544.744493392,6.407,-544.744) curveto(-9.452,-544.744,-24.723,-533.290863436,-39.407,-510.383) curveto(-62.315,-473.966,-76.706,-452.527198238,-82.579,-446.066) curveto(-105.487,-422.571,-134.561,-410.823788546,-169.804,-410.824) curveto(-202.697,-410.824,-232.359,-422.277418502,-258.791,-445.185) curveto(-264.077,-449.884,-282.873,-471.322863436,-315.178,-509.502) curveto(-334.562,-532.41,-352.77,-544.157118943,-369.804,-544.744) curveto(-387.425,-545.332,-404.312,-534.318762115,-420.465,-511.705) curveto(-436.618,-489.091,-452.33,-466.917876652,-467.601,-445.185) curveto(-489.334,-421.69,-515.178,-410.236414097,-545.134,-410.824) qq = endpath(draw=False) beginpath(-541.61,-163.247) curveto(-528.101,-163.247,-513.123,-174.994008811,-496.676,-198.489) curveto(-471.419,-233.731,-454.973,-255.170299559,-447.337,-262.806) curveto(-423.842,-285.714,-396.53,-297.167400881,-365.399,-297.167) curveto(-333.093,-297.167,-303.725,-285.713770925,-277.293,-262.806) curveto(-273.181,-258.695,-254.386,-237.255700441,-220.905,-198.489) curveto(-200.935,-174.994,-182.433,-163.246696035,-165.399,-163.247) curveto(-147.777,-163.247,-131.038,-174.700325991,-115.178,-197.608) curveto(-88.159,-238.137,-73.475,-259.575612335,-71.126,-261.925) curveto(-48.805,-285.42,-21.493,-297.167400881,10.813,-297.167) curveto(44.88,-297.167,74.542,-285.713770925,99.8,-262.806) curveto(105.086,-258.107,123.001,-236.374643172,153.544,-197.608) curveto(171.753,-174.7,189.374,-163.246696035,206.407,-163.247) curveto(223.441,-163.247,240.181,-174.994008811,256.628,-198.489) curveto(284.822,-239.018,300.093,-260.456669604,302.443,-262.806) curveto(324.176,-285.714,350.901,-297.167400881,382.619,-297.167) curveto(416.687,-297.167,447.23,-285.713770925,474.249,-262.806) curveto(483.647,-254.583,502.149,-233.437762115,529.756,-199.37) curveto(547.964,-176.462,563.823,-165.008810573,577.333,-165.009) lineto(577.333,-76.903) curveto(546.789,-76.903,519.77,-88.3567136564,496.275,-111.264) curveto(478.067,-132.997,460.152,-154.436017621,442.531,-175.581) curveto(423.147,-198.489,403.177,-209.649048458,382.619,-209.062) curveto(365.585,-208.474,349.726,-196.726986784,335.042,-173.819) curveto(311.547,-136.227,297.156,-114.788572687,291.87,-109.502) curveto(270.137,-86.595,241.65,-75.140969163,206.407,-75.141) curveto(172.34,-75.141,142.678,-86.8882819383,117.421,-110.383) curveto(112.134,-115.082,94.22,-136.521101322,63.676,-174.7) curveto(45.468,-197.608,27.847,-209.061674009,10.813,-209.062) curveto(-5.634,-209.062,-21.199,-197.608044053,-35.883,-174.7) curveto(-58.791,-137.696,-73.181,-116.257004405,-79.055,-110.383) curveto(-101.375,-86.888,-130.156,-75.140969163,-165.399,-75.141) curveto(-198.879,-75.141,-228.541,-86.5945991189,-254.385,-109.502) curveto(-260.259,-114.201,-279.055,-135.640044053,-310.773,-173.819) curveto(-330.156,-196.727,-348.365,-208.474299559,-365.399,-209.062) curveto(-383.02,-209.649,-399.907,-198.635942731,-416.059,-176.022) curveto(-432.212,-153.408,-448.218,-131.235057269,-464.077,-109.502) curveto(-485.81,-86.007,-511.654,-74.5535947137,-541.61,-75.141) qq1 = endpath(draw=False) qq = qq.union(qq1) push() translate(x,y) rr=[] x_shunt = -16.0995 y_shunt = 350 rw = .005 * size *320 for point in qq: point.x = .0025 * size * (point.x + x_shunt) point.y = .0025 * size * (point.y + y_shunt) point.ctrl1.x = .0025 * size * (point.ctrl1.x + x_shunt) point.ctrl1.y = .0025 * size * (point.ctrl1.y + y_shunt) point.ctrl2.x = .0025 * size * (point.ctrl2.x + x_shunt) point.ctrl2.y = .0025 * size * (point.ctrl2.y + y_shunt) rr.append(point) push() nostroke() if Edge : strokewidth(.1*size) stroke(Kol) fill(1) if Back : oval(-rw,-rw,2*rw,2*rw) pop() fill(Kol) nostroke() drawpath(rr) nofill() pop() def Pisces(x,y,size,Kol,Back,Edge): beginpath(-224.43,-447.828) lineto(25.791,-447.828) curveto(35.189,-546.507,73.074,-626.682511013,139.447,-688.357) curveto(204.058,-748.856,281.591,-779.105726872,372.046,-779.106) lineto(372.046,-673.379) curveto(218.742,-673.379,132.399,-598.196052863,113.015,-447.828) lineto(253.104,-447.828) lineto(253.104,-360.604) lineto(120.945,-360.604) curveto(136.217,-206.711,218.448,-129.766519824,367.641,-129.767) lineto(367.641,-22.278) curveto(276.011,-22.278,198.185,-53.554753304,134.161,-116.11) curveto(70.137,-178.666,33.427,-260.162493392,24.029,-360.604) lineto(-223.548,-360.604) curveto(-231.184,-260.162,-267.307,-178.665511013,-331.919,-116.11) curveto(-396.53,-53.555,-475.824,-22.2775330396,-569.804,-22.278) lineto(-569.804,-135.934) curveto(-414.15,-135.934,-329.275,-210.823039648,-315.178,-360.604) lineto(-464.077,-360.604) lineto(-464.077,-447.828) lineto(-311.654,-447.828) curveto(-320.465,-523.012,-348.365,-579.986590308,-395.355,-618.753) curveto(-439.408,-655.171,-497.557,-673.378854626,-569.804,-673.379) lineto(-569.804,-779.106) curveto(-479.348,-779.106,-401.522,-748.562713656,-336.324,-687.476) curveto(-271.125,-626.389,-233.828,-546.507101322,-224.43,-447.828) qq = endpath(draw=False) push() translate(x,y) rr=[] x_shunt = 98.879 y_shunt = 400.553 rw = .005 * size *320 for point in qq: point.x = .0025 * size * (point.x + x_shunt) point.y = .0025 * size * (point.y + y_shunt) point.ctrl1.x = .0025 * size * (point.ctrl1.x + x_shunt) point.ctrl1.y = .0025 * size * (point.ctrl1.y + y_shunt) point.ctrl2.x = .0025 * size * (point.ctrl2.x + x_shunt) point.ctrl2.y = .0025 * size * (point.ctrl2.y + y_shunt) rr.append(point) push() nostroke() if Edge : strokewidth(.1*size) stroke(Kol) fill(1) if Back : oval(-rw,-rw,2*rw,2*rw) pop() fill(Kol) nostroke() drawpath(rr) nofill() pop() def Ophiuchus(x,y,size,Kol,Back,Edge): beginpath(195.591, -476.221) lineto(195.591, 221.103) curveto(195.591, 578.269,-195.591, 578.2686,-195.591, 221.103) lineto(-195.591, -476.221) lineto(-289.134, -476.221) lineto(-289.134, 221.103) curveto(-289.134, 663.308,289.134, 663.3081,289.134, 221.103) lineto(289.134, -476.221) ss = endpath(draw=False) beginpath(-535.749, 0.000) curveto(-323.150, -212.599,-170.079, -212.59875,42.520, 0.000) curveto(85.040, 42.520,280.630, 212.59875,484.725, -59.528), lineto(535.749, -0.000) curveto(323.150, 212.599,170.079, 212.59875,-42.520, -0.000) curveto(-85.040, -42.520,-280.630, -212.59875,-484.725, 59.528) rr = endpath(draw=False) rs = ss.union(rr) fact = .7 rw = fact * 2.28*size push() translate(x,y) qq = [] for point in rs : point.x = 1.3*fact * size * point.x /350. point.y = fact * size * point.y /350. qq.append(point) nostroke() push() nostroke() if Edge : strokewidth(.1*size) stroke(Kol) fill(1) if Back : oval(-rw,-rw,2*rw,2*rw) fill(Kol) nostroke() drawpath(qq) nofill() pop() pop() # ================================================================================================================================= # Routine for Drawing a Zodiac Sign # ================================================================================================================================= def Zodiac_Sign(x,y,size,month,Kol,Back,Edge): if month == 1: Aries (x,y,size,Kol,Back,Edge) elif month == 2: Taurus (x,y,size,Kol,Back,Edge) elif month == 3: Gemini (x,y,size,Kol,Back,Edge) elif month == 4: Cancer (x,y,size,Kol,Back,Edge) elif month == 5: Leo (x,y,size,Kol,Back,Edge) elif month == 6: Virgo (x,y,size,Kol,Back,Edge) elif month == 7: Libra (x,y,size,Kol,Back,Edge) elif month == 8: Scorpio (x,y,size,Kol,Back,Edge) elif month == 9: Sagitarius (x,y,size,Kol,Back,Edge) elif month == 10: Capricorn (x,y,size,Kol,Back,Edge) elif month == 11: Aquarius (x,y,size,Kol,Back,Edge) elif month == 12: Pisces (x,y,size,Kol,Back,Edge) else: Ophiuchus (x,y,size,Kol,Back,Edge) # ================================================================================================================================= # Print Straight String Definition # ================================================================================================================================= def Do_Straight_String(The_Text,x,y): push() My_Fineness = 8 The_Text_Path = textpath(The_Text,0,0) Line_Text_Path = Lineate_Text(The_Text_Path,0,0,My_Fineness,1,1) for point in Line_Text_Path : point.x = point.x + x point.y = point.y + y drawpath(Line_Text_Path,stroke=color(1,1,1,0)) pop() # ================================================================================================================================= # Set up Paper Size # ================================================================================================================================= def Paper_Set_up(My_Paper,Port_Land): if My_Paper == "A3" : if Port_Land : size (29.7*cm, 42*cm) # A3 Paper Size else : size (42*cm, 29.7*cm) # A3 Paper Size else : if Port_Land : size (21.0*cm, 29.7*cm) # A4 Paper Size else: size (29.7*cm, 21.0*cm) # A4 Paper Size translate (0*cm,HEIGHT-3*cm) transform (CORNER) nofill() strokewidth(.6) stroke(0) Caller()