Cahill 1909
|
Go back to Gene
Keyes home page Cahill-Keyes 1975 |
Cahill-Keyes Octant Graticule:
Principles and Specifications with Perl programs and OpenOffice.org 2.0 macros for 1/1,000,000 Megamap Gene Keyes 2010-08-20 |
Continued from page 4 13) OpenOffice.org (OOo) macros via Perl
for Cahill-Keyes Octant Graticule and Megamap Notes by Gene Keyes Here is the text of the actual OOo (composite)
macros made by Mary Jo Graça. Because they are drawing so many
one-degree meridians and parallels, the macro coding (written in OOo Basic)
occupies 92 pages. But I include it in its entirety (in two parts below)
as an open-source record, because the file itself is only 96 kb, having lots
of short one-liners. The first 11 pages were hand-coded directly in OOo
Basic; the remaining pages were prepared by the Perl programs.
Although shown in two parts below, this is a single macro program, to be copy-pasted into an OOo Draw file. It had to be split because the copy function could not handle so many lines. Among other things — such as the scaffold triangle, the perimeter, and the grids — , these macros draw the following, in OOo Drawing (odg) files, shown as jpegs or pdfs on the following page: A) A single complete Cahill-Keyes Octant Graticule in a specified grid (My grid protocol is described on the next page.);The macros are amazingly complex, and require quite a number of steps to run them, as described here by Mary Jo. (Perhaps to be simplified in further development.) Procedural Notes by Mary Jo Graça
edited and tested by Gene Keyes Preparatory steps: Note: These macros were run using OpenOffice.org
2.0.
First, you need two files "All-macros-part-1.odt", and "All-macros-part-2.odt". Obtain them by opening these two zip files: OR by making two text files out of the entire contents of the two respective macro listings below. They can be any kind of text or word processor files. The zips are OpenOffice.org Writer documents. These two files will be combined in the script module of the OpenOffice.org macros tool. Together, they include a lot of subs and functions at the top, followed by the contents of file OOMacros8, made by program OOmacroMaker4. The steps which I enumerate below are written in past tense to describe the procedure I followed. 1 - Opened files All-macros-part-1.odt and All-macros-part-2.odt. 2 - Started a new OpenOffice.org Draw document. 3 - Clicked: Tools > Macros > Organize macros > OpenOffice.org Basic... . By clicking the + boxes, selected the name of the current drawing document, then Standard, then clicked on button New. Typed "CKOG" for New module Name, which opens the macro's scripting page. 4 - Selected all and deleted. 5 - Copied everything from files All-macros-part-1.odt and All-macros-part-2.odt to that macro scripting page. 6 - Saved the (full-of-macros, but so far, empty) drawing file, naming it Do-1-octant.odg. Duplicated it, naming it Do-8-octants.odg. Closed that file. Note about reopening these files and enabling
macros:
When reopening the files, you will be warned that the file has macros, which can damage your computer, and asked if you want to enable them. These particular macros, which have just been copied, do nothing to the computer, and will not damage anything (feel free to check the code). They must be enabled, in order to draw the octants. The macros don't need to be enabled if the drawing has already been done, although it won't hurt one way or the other. * * *
A) A single complete Cahill-Keyes Octant Graticule
in a specified grid
For the drawing of one octant, I re-opened file Do-1-octant.odg, and followed these steps: [See note above, about opening this file and enabling its macros.] 1 - Set Format > Page... to Format = Letter, Orientation = Portrait, with 0 for all margins. 2 - Did Tools > Macros > Run macro... , selected: Do-1-octant.odg > Standard > CKOG (in left pane) > GsOctant (in middle pane) and clicked on button Run — This takes a few moments, and draws the image huge; that is as expected. [Step 3 is almost the same as step 2, but this one does the grid.] 3 - Did Tools > Macros > Run macro... , selected: Do-1-octant.odg > Standard > CKOG > Grids10x12 (in middle pane) and clicked on button Run — This is also drawn huge. 4 - Clicked on one of the blue lines; a 4-headed arrow should appear. This selects the octant with its parallels and meridians. 5 - Did Modify > Arrange > Bring to front. (Octant's purple perimeter will superimpose over the green grid line.) 6 - Clicked outside of a line, to deselect. Typed control-A to select all. 7 - Did Modify > Group. 8 - Did Tools > Macros > Organize macros > OpenOffice.org Basic... , selected Do-1-octant.odg > Standard > CKOG > Main (in middle pane) and clicked on button Edit. This re-opens macro window. 9 - Made sure that Sub Main has no single quote-mark (') at the beginning of the two lines which refer to one octant, but does have it at the beginning of the two lines pertaining to eight octants (quote-mark means, commented line). This causes the drawing to be shrunk to 200 mm length x 240 mm height, and be positioned within the page: ' For ONE OCTANT: S.Size = Z(20000,24000) S.Position = P(10,1000) ' For EIGHT OCTANTS: ' S.Size = Z(20000,10000) ' S.Position = P(10,1000) 10 - From the drawing, did: Tools > Macros > Run macro... , selected: Do-1-octant.odg > Standard > CKOG > Main (in middle pane) and clicked on button Run. * * *
B) A complete Cahill-Keyes 8-Octant Graticule Master Map Profile, in a grid that is 20 x 40 meters (reduced to fit on a monitor ) For an 8 octant drawing, I re-opened file Do-8-octants.odg, and followed these steps: [See note above, about opening this file and enabling its macros.] 1 - Set Format > Page... to Format = Letter, Orientation = Portrait, with 0 for all margins. 2 - Did Tools > Macros > Run macro... , selected: Do-8-octants.odg > Standard > CKOG > EightOctants (the latter is from the middle pane) and clicked on button Run — This draws the image huge; that is as expected. It takes a short while before the drawing appears. [As before, step 3 is almost the same as step 2, but this one does the grid.] 3 - Did Tools > Macros > Run macro... , selected: Do-8-octants.odg > Standard > CKOG > Grids40x20 and clicked on button Run — This is also drawn huge. 4 - Clicked on one of the blue lines; a 4-headed arrow should appear. This selects the octant with its parallels and meridians. 5 - Did Modify > Arrange > Bring to front. (Octant's purple perimeter will superimpose over the green grid line.) 6 - Clicked outside of a line, to deselect. Typed control-A to select all. 7 - Did Modify > Group. 8 - Did Tools > Macros > Organize macros > OpenOffice.org Basic... , selected Do-8-octants.odg > Standard > CKOG > Main (middle pane) and clicked on button Edit. This re-opens macro window. 9 - Edited Sub Main by adding a single quote-mark (') at the beginning of the two lines which refer to one octant, and removing them from the two lines pertaining to eight octants (quote-mark means, commented line). This causes the drawing to be shrunk to 200 mm length x 100 mm height, and be positioned within the page: ' For ONE OCTANT: ' S.Size = Z(20000,24000) ' S.Position = P(10,1000) ' For EIGHT OCTANTS: S.Size = Z(20000,10000) S.Position = P(10,1000) 10 - From the drawing, did: Tools > Macros > Run macro... , selected: Do-8-octants.odg > Standard > CKOG > Main (in middle pane) and clicked on button Run. Note: if some grid lines are missing, it will
self-correct if you toggle to another window and back. OOo Draw lacks a "refresh"
button, but that is the workaround.
|
REM
***** BASIC ***** ' ' This is "file" All-macros-part-1.odt. ' ' In order to facilitate copying the macros, they were separated into two text files (actually, ' OpenOffice.org Writer): All-macros-part-1.odt and All-macros-part-2.odt. The first has ' most of the macros. The second has only: ' - Sub ParallelsMinor: draws the minor parallels for the half-octant ' ' Both of these files should be copied into the same macro-module of an OpenOffice.org ' Draw file. ' ' Here I have: ' ' - Sub Main: To size and position the drawn object. Needs to be edited to choose those ' characteristics for either eight octants or one octant. ' - Sub Test: Empty, at the time; meant to be used for whatever one wants to test. ' ' - Sub EightOctants: Calls Function Octant, copies, pastes, groups to make octant pair, ' copies, pastes a few times, rotates and moves each pair, and groups the whole thing. ' Each piece is named, along the way. ' - Sub GsOctant: Calls function Octant, rotates and positions it to Gene's coordinates ' - Function Octant: Calls Sub FullHalf; copies, pastes, flips and moves one of the shapes, ' groups both. Each piece is named, along the way. ' - Sub FullHalf: draws (commented out drawing of triangle), minor parallels, minor ' meridians, major parallels, major meridians, and half-octant, grouping each set and naming ' it, and then groups everything. ' ' - Function NamedShape: Gets the shape which has a given name ' - Function Collect: Collects and groups objects and returns the group ' ' - Sub Grids10x12: Draws 200 cm, 1000 cm and 5000 cm grids (1 cm represents 1 km) for ' one octant (0 to 10000 by -9000 to 3000) ' - Sub Grids40x20: Draws 200 cm, 1000 cm and 5000 cm grids (1 cm represents 1 km) for ' eight octants (-20000 to 20000 by -10000 to 10000) ' - Function Grids: prepares each grid, and returns the group of all the lines on that grid; it is ' called by Sub Grids10x12 and Sub Grids40x20 ' - Function LL: prepares a line-shape of a given size and colour, but does not draw it; it is ' called by Function Grids ' ' - Function L: prepares and "draws" a polyline-shape of a given colour, but does not give it ' the array of points; it is called by subs which draw triangle, octant, meridians and parallels ' - Function P: prepares Position (or point) with given x and y coordinates; called by several ' subs ' - Function Z: prepares Size with given width and height; called by several subs ' - Function A: prepares and returns (doesn't draw) an arc from circle with a given centre, ' radius, start-angle, end-angle, and colour. It is called by the parallel subs ' ' - Sub HalfOctant: draws outline of half-octant (without the center line), in MJ's coordinates ' - Sub Triangle: draws scaffold triangle for half-octant in MJ's format ' - Sub MeridiansMajor: draws the major meridians for the half-octant ' - Sub MeridiansMinor: draws the minor meridians for the half-octant ' - Sub ParallelsMajor: draws the major parallels for the half-octant ' ' Blank lines on this "table of contents" indicate where I have lines of alternating # and ' space. ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Sub Main D=ThisComponent G=D.DrawPages(0) 'print "There are ",G.Count," objects" S = G.getByIndex(0) 'print "Object size is ",S.Size.Width,"x",S.Size.Height," and it is at ",_ ' S.Position.X," ",S.Position.Y ' For ONE OCTANT: S.Size = Z(20000,24000) S.Position = P(10,1000) ' For EIGHT OCTANTS: ' S.Size = Z(20000,10000) ' S.Position = P(10,1000) End Sub Sub Test End Sub ' Test ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Sub EightOctants ' Calls Function Octant; makes copies to have 8 octants and names them; moves and flips ' those for the south and abuts them to the northern ones; groups them in north-south pairs; ' names, rotates and positions each pair; groups the whole thing and names it. ' Initialize all that I need: document, page, frame, document controller, ' and dispatch helper. oDoc = ThisComponent oDocCtrl = oDoc.getCurrentController() oDocFrame = oDocCtrl.getFrame() 'oPage = oDoc.DrawPages(0) oPage = oDoc.getDrawPages().getByIndex(0) oDispatchHelper=createUnoService("com.sun.star.frame.DispatchHelper") oShape1 = Octant() ' Draw a whole octant, with meridians and parallels oNorthPosition = P(oShape1.Position.X, oShape1.Position.Y) oSouthPosition = P(oShape1.Position.X + oShape1.Size.Width - 1, oShape1.Position.Y) ' Make copies of the octant, name them, make pairs of octants, rotate, position and group ' everything. ' Make copies to have 8 octants Dim oOctants(7) As Variant ' Declare an array of octants oDocCtrl.select(oShape1) oDispatchHelper.executeDispatch(oDocFrame,".uno:Copy","",0,Array()) oDispatchHelper.executeDispatch(oDocFrame,".uno:Paste","",0,Array()) oDispatchHelper.executeDispatch(oDocFrame,".uno:Paste","",0,Array()) oDispatchHelper.executeDispatch(oDocFrame,".uno:Paste","",0,Array()) oDispatchHelper.executeDispatch(oDocFrame,".uno:Paste","",0,Array()) oDispatchHelper.executeDispatch(oDocFrame,".uno:Paste","",0,Array()) oDispatchHelper.executeDispatch(oDocFrame,".uno:Paste","",0,Array()) oDispatchHelper.executeDispatch(oDocFrame,".uno:Paste","",0,Array()) ' Name each octant For i = 0 to 7 oOctants(i) = oPage.getByIndex(i) oOctants(i).name = "Octant" & CStr(i + 1) Next ' Position northern octants, in case they got pasted away from initial position For i = 0 to 3 oOctants(i).Position = oNorthPosition Next ' Flip southern octants, move them to abut the northern ones, and group them as pairs For i = 4 to 7 oOctants(i).Position = oSouthPosition oDocCtrl.select(oOctants(i)) oDispatchHelper.executeDispatch(oDocFrame,".uno:MirrorHorz","",0,Array()) oShapes = CreateUnoService("com.sun.star.drawing.ShapeCollection") If i = 4 Then oShapes.add(oOctants(i-1)) Else oShapes.add(oOctants(i-5)) EndIf oShapes.add(oOctants(i)) oPage.group(oShapes) Next ' Rotate, position and name each octant pair oShape1 = oPage.getByIndex(1) oShape1.Name = "Octants16" oShape2 = oPage.getByIndex(2) oShape2.Name = "Octants27" oShape3 = oPage.getByIndex(3) oShape3.Name = "Octants38" oShape4 = oPage.getByIndex(0) ' First one done, but most eastern pair oShape4.Name = "Octants45" oShape1.Rotateangle = -12000 oShape2.Rotateangle = -6000 oShape3.Rotateangle = -12000 oShape4.Rotateangle = -6000 ' Position pairs Dim oW As Long, oY As Long oW = oShape1. Size.Width oY= -(oShape1.Size.Height - 1) / 2 oShape1.Position = P(-2*(oW - 1), oY) oShape2.Position = P(-(oW - 1), oY) oShape3.Position = P(0,oY) oShape4.Position = P((oW - 1), oY) o8Octants = Collect("All") o8Octants.Name = "8Octants" ' Grids40x20() End Sub ' EightOctants Sub GsOctant ' Calls Function Octant, rotates and positions octant to Gene's coordinates and orientation. D=ThisComponent G=D.DrawPages(0) S=Octant() S.RotateAngle = -6000 'S.Position = P(0,-784619) ' Y of point M, of scaffold triangle S.Position = P(0,-784619) ' Y of point A, if no scaffold triangle End Sub ' GsOctant Function Octant() As Variant ' Calls Sub FullHalf, duplicates the shape, flips one of them and renames it "WestHalf", ' groups the two, names object "Octant". ' Initialize all that I need: document, page, frame, document controller, ' and dispatch helper. oDoc = ThisComponent oDocCtrl = oDoc.getCurrentController() oDocFrame = oDocCtrl.getFrame() 'oPage = oDoc.DrawPages(0) oPage = oDoc.getDrawPages().getByIndex(0) oDispatchHelper=createUnoService("com.sun.star.frame.DispatchHelper") FullHalf() ' Draw half an octant, with meridians and parallels oShape1 = oPage.getByIndex(0) ' Get the half octant ' Duplicate shape oDocCtrl.select(oShape1) oDispatchHelper.executeDispatch(oDocFrame,".uno:Copy","",0,Array()) oDispatchHelper.executeDispatch(oDocFrame,".uno:Paste","",0,Array()) 'Name, move and flip the second half octant oShape2 = oPage.getByIndex(1) oShape2.Name = "WestHalf" oShape2.Position = P(oShape1.Position.X,0) oDocCtrl.select(oShape2) oDispatchHelper.executeDispatch(oDocFrame,".uno:MirrorVert","",0,Array()) 'Group the two shapes and name oOctant = Collect("All") oOctant.Name = "Octant" Octant() = oOctant End Function ' Octant Sub FullHalf ' Calls each subroutine to draw (Triangle was commented out), parallels, meridians, and ' half octant boundary. Each set is grouped and named. All shapes are then grouped and ' named "EastHalf". oDoc = ThisComponent oPage = oDoc.DrawPages(0) ' Triangle() ' S = oPage.getByIndex(0) ' S.Name = "Triangle" ParallelsMinor() S = Collect("NoName") S.Name = "ParallelsMinor" MeridiansMinor() S = Collect("NoName") S.Name = "MeridiansMinor" ParallelsMajor() S = Collect("NoName") S.Name = "ParallelsMajor" MeridiansMajor() S = Collect("NoName") S.Name = "MeridiansMajor" HalfOctant() S = oPage.getByIndex(oPage.Count - 1) S.Name = "HalfOctant" S = Collect("All") S.Name = "EastHalf" End Sub ' FullHalf ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Function NamedShape (oName As String) As Variant ' Returns the first shape which has a given name; if not found, doesn't return anything oDoc = ThisComponent oPage = oDoc.DrawPages(0) oNumber = oPage.Count - 1 oShape = "Not Found" For i = 0 to oNumber S = oPage.getByIndex(i) If S.Name = oName Then NamedShape() = S Exit Function EndIf Next print "Didn't find a shape named ",oName End Function ' NamedShape Function Collect(What As String) As Variant ' This function collects several objects, groups them and returns the group-object ' Variable What is a string variable which can be: ' - "All" to group all objects ' - "NoName" to group all unnamed object ' - an integer, to group objects whose index is that integer or larger oDoc = ThisComponent oPage = oDoc.DrawPages(0) oNumber = oPage.Count - 1 Shapes = CreateUnoService("com.sun.star.drawing.ShapeCollection") If What = "All" Then For i = 0 To oNumber Shapes.add(oPage.getByIndex(i)) Next ElseIf What = "NoName" Then For i = 0 to oNumber S = oPage.getByIndex(i) If S.Name = "" Then Shapes.add(S) Next Else oStart = CLng(What) For i = oStart To oNumber Shapes.add(oPage.getByIndex(i)) Next EndIf Collect() = oPage.group(Shapes) End Function ' Collect ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Sub Grids10x12 REM Draw 200, 1000 and 5000 grids for a 10,000x12,000mm (one octant) drawing oDoc = ThisComponent oPage = oDoc.DrawPages(0) G200 = Grids(RGB(204,204,204),0,1000000,300000,-900000,20000,100000) G200.Name = "G200" G1000 = Grids(RGB(255,0,51),0,1000000,300000,-900000,100000,500000) G1000.Name = "G1000" G5000 = Grids(RGB(0,174,0),0,1000000,300000,-900000,500000,0) G5000.Name = "G5000" ' Group the grids oCollection = createUnoService("com.sun.star.drawing.ShapeCollection") oCollection.add(G200) oCollection.add(G1000) oCollection.add(G5000) oGrids = oPage.group(oCollection) oGrids.Name = "Grids10by12" End Sub ' Grids10x12 Sub Grids40x20 REM Draw 200, 1000 and 5000 grids for a 40,000x20,000mm (eight octants) drawing oDoc = ThisComponent oPage = oDoc.DrawPages(0) G200 = Grids(RGB(204,204,204),-2000000,2000000,1000000,-1000000,20000,100000) G200.Name = "G200" G1000 = Grids(RGB(255,0,51),-2000000,2000000,1000000,-1000000,100000,500000) G1000.Name = "G1000" G5000 = Grids(RGB(0,174,0),-2000000,2000000,1000000,-1000000,500000,0) G5000.Name = "G5000" ' Group the grids oCollection = createUnoService("com.sun.star.drawing.ShapeCollection") oCollection.add(G200) oCollection.add(G1000) oCollection.add(G5000) oGrids = oPage.group(oCollection) oGrids.Name = "Grids40by20" End Sub ' Grids40x20 Function Grids (oColor As Long, oLeft As Long, oRight As Long, oBottom As Long, _ oTop As Long, oDelta As Long, oSkip As Long) As Variant ' oBottom is larger than oTop; oDelta is the grid spacing; ' multiples of oSkip are grids that we don't plot, because they are part of a next larger ' spacing grid, which will later be plotted in a different color; ' if oSkip = 0, no lines are skipped. ' Function Grids draws grid-lines from oLeft to oRight and from oTop to oBottom, at spacing ' oDelta, but not drawing lines which are multiples of oSkip (unless oSkip is zero). This ' function not only draws, but groups all the lines drawn in one call, and returns the group. ' This function uses function LL() to prepare each line (lineShape). ' Note: 1 hundredth of mm was added to lengths of lines, to account for line thickness of ' end line. Dim i As Long, oStart As Long, oLength As Long oDoc = ThisComponent oPage = oDoc.DrawPages(0) oCollection = createUnoService("com.sun.star.drawing.ShapeCollection") ' Draw the horizontal grid lines ' If oBottom is not a multiple of delta, start at a multiple of oDelta i = oTop MOD oDelta if i = 0 Then oStart = oTop ElseIf i < 0 Then oStart = oTop - i Else oStart = oTop - i + oDelta EndIf oLength = oRight - oLeft + 1 For i = oStart To oBottom Step oDelta ' Do the line only if it is not one of the lines to skip if oSkip = 0 Then oLine = LL(oDoc,oLeft,i,oLength,0,oColor) oPage.add(oLine) oCollection.add(oLine) ElseIf i MOD oSkip <> 0 Then oLine = LL(oDoc,oLeft,i,oLength,0,oColor) oPage.add(oLine) oCollection.add(oLine) EndIf Next ' Now draw the vertical lines ' If oLeft is not a multiple of delta, start at a multiple of oDelta i = oLeft MOD oDelta if i = 0 Then oStart = oLeft ElseIf i < 0 Then oStart = oLeft - i Else oStart = oLeft - i + oDelta EndIf oLength = oBottom - oTop + 1 For i = oStart To oRight Step oDelta ' Vertical Lines ' Do the line only if it is not one of the lines to skip if oSkip = 0 Then oLine = LL(oDoc,i,oTop,0,oLength,oColor) oPage.add(oLine) oCollection.add(oLine) ElseIf i MOD oSkip <> 0 Then oLine = LL(oDoc,i,oTop,0,oLength,oColor) oPage.add(oLine) oCollection.add(oLine) EndIf Next Grids() = oPage.group(oCollection) End Function ' Grids Function LL( oDoc As Object, x As Long, y As Long , oWidth As Long, oHeight As Long,_ nColor As Long) As com.sun.star.drawing.LineShape ' Create and return a LineShape object ' Function LL() creates and returns a LineShape object, but does not draw it. The object ' is located at x,y, with length oWidth and height oHeight, and color nColor. ' No scaling is applied. Dim oSize As New com.sun.star.awt.Size Dim oPoint As New com.sun.star.awt.Point Dim x0 As Long Dim y0 As Long oSize.width = oWidth oSize.height = oHeight oPoint.x = x oPoint.y = y oShape = oDoc.createInstance( "com.sun.star.drawing.LineShape" ) oShape.Position = oPoint oShape.Size = oSize oShape.LineColor = nColor LL() = oShape End Function ' LL ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ' Prepare PolyLine with colour: Function L(doc, page, colour) ' Prepare Point: Function P(x,y); ' Prepare Size: Function Z(width,height), was MakeSize ' Prepare Arc: Function A(doc,centre,radius,start-angle,end-angle,colour) Function L(oDoc As Object, oPage As Object, Optional oColor As Long)_ As com.sun.star.drawing.PolyLineShape ' Function to prepare a PolyLine, including its colour [RGB(#,#,#)]; ' coordinates are given elsewhere oShape=oDoc.createInstance("com.sun.star.drawing.PolyLineShape") oPage.add(oShape) If Not IsMissing( oColor ) Then oShape.LineColor = oColor EndIf L() = oShape End Function ' L REM Copied from http://www.oooforum.org/forum/viewtopic.phtml?t=5383 REM by DannyB, post of Jan 30, 2004, 12:41 pm REM Post subject: Draw: Introduction to draw and basic shapes REM For the P [MakePoint], and Z [MakeSize] functions these remarks apply: ' These are "syntax sugar to make it easy to create" com.sun.star.[] objects. Function P( x As Long, y As Long ) As com.sun.star.awt.Point ' Create and return a new Point object. ' X,y coordinates are expected to already be in 100ths of a milimeter Dim aPoint As New com.sun.star.awt.Point aPoint.x = x aPoint.y = y P() = aPoint End Function ' P Function Z( width As Long, height As Long ) As com.sun.star.awt.Size ' Create and return a new Size object; this was Function Makesize. Dim aSize As New com.sun.star.awt.Size aSize.width = width aSize.height = height Z() = aSize End Function ' Z Function A( oDrawDoc As Object, xCentre As Long, yCentre As Long,_ radius As Long, start As Long, theEnd As Long, Optional oColor As Long )_ As com.sun.star.drawing.EllipseShape ' Function makes an arc object. Colour as RGB(#,#,#); ' start and theEnd are angles in hundredths of degrees, from +x axis. ' Modified from Function MakeEllipseShape by DannyB oShape = oDrawDoc.createInstance( "com.sun.star.drawing.EllipseShape" ) oShape.Position = P(xCentre - radius,yCentre - radius) oShape.Size = Z(2 * radius, 2 * radius) oShape.CircleStartAngle = start oShape.CircleEndAngle = theEnd oShape.CircleKind = com.sun.star.drawing.CircleKind.ARC If Not IsMissing( oColor ) Then oShape.LineColor = oColor EndIf A() = oShape End Function ' A ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # REM The following is a copy of file OOMacros8 made by Perl program OOmacroMaker4.odt Sub HalfOctant D=ThisComponent G=D.DrawPages(0) S=L(D,G,RGB(102,0,153)) N=Array(P(94000,0),_ P(222406,-128406),_ P(777594,-448944),_ P(953000,-495944),_ P(1000000,-320537),_ P(1000000,0) ) S.PolyPolygon=Array(N) End Sub ' HalfOctant Sub Triangle D=ThisComponent G=D.DrawPages(0) S=L(D,G,RGB(200,200,200)) N=Array(P(1000000,-577350),_ P(1000000,0),_ P(0,0),_ P(1000000,-577350) ) S.PolyPolygon=Array(N) End Sub ' Triangle Sub MeridiansMajor D=ThisComponent G=D.DrawPages(0) C=RGB(0,0,255) S=L(D,G,C) N=Array(P(94000,0),_ P(1000000,0),_ P(1000000,0),_ P(1000000,0) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(94000,0),_ P(281205,-16378),_ P(915908,-53346),_ P(1000000,-55792) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(94000,0),_ P(278831,-32591),_ P(909644,-106322),_ P(1000000,-111585) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(94000,0),_ P(274903,-48473),_ P(899257,-158563),_ P(1000000,-167377) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(94000,0),_ P(269468,-63865),_ P(884826,-209708),_ P(1000000,-223170) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(94000,0),_ P(262587,-78613),_ P(866461,-259401),_ P(1000000,-278962) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(94000,0),_ P(254339,-92572),_ P(845177,-307619),_ P(996320,-334270) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(94000,0),_ P(244819,-105605),_ P(824546,-355674),_ P(981880,-388161) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(94000,0),_ P(234134,-117587),_ P(802238,-402899),_ P(967440,-442053) ) S.PolyPolygon = Array(N) End Sub ' MeridiansMajor Sub MeridiansMinor D=ThisComponent G=D.DrawPages(0) C=RGB(102,204,204) S=L(D,G,C) N=Array(P(145992,-908),_ P(281968,-3281),_ P(917917,-10681),_ P(1000000,-11158) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(145968,-1815),_ P(281873,-6561),_ P(917666,-21359),_ P(1000000,-22317) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(145929,-2721),_ P(281714,-9838),_ P(917247,-32031),_ P(1000000,-33475) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(145873,-3627),_ P(281491,-13111),_ P(916661,-42694),_ P(1000000,-44634) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(145715,-5435),_ P(280856,-19639),_ P(914988,-63982),_ P(1000000,-66951) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(145612,-6337),_ P(280444,-22892),_ P(913901,-74601),_ P(1000000,-78109) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(145494,-7237),_ P(279969,-26136),_ P(912648,-85199),_ P(1000000,-89268) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(145360,-8135),_ P(279431,-29369),_ P(911229,-95774),_ P(1000000,-100426) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(145045,-9922),_ P(278168,-35799),_ P(907895,-116841),_ P(1000000,-122743) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(144864,-10811),_ P(277444,-38992),_ P(905981,-127327),_ P(1000000,-133902) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(144667,-11697),_ P(276658,-42170),_ P(903903,-137778),_ P(1000000,-145060) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(144455,-12580),_ P(275811,-45331),_ P(901661,-148191),_ P(1000000,-156219) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(143986,-14333),_ P(273935,-51595),_ P(896692,-168891),_ P(1000000,-178536) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(143728,-15203),_ P(272907,-54697),_ P(893965,-179173),_ P(1000000,-189694) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(143455,-16069),_ P(271819,-57777),_ P(891078,-189404),_ P(1000000,-200853) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(143167,-16930),_ P(270673,-60833),_ P(888031,-199584),_ P(1000000,-212011) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(142546,-18635),_ P(268205,-66871),_ P(881464,-219774),_ P(1000000,-234328) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(142214,-19480),_ P(266885,-69850),_ P(877945,-229779),_ P(1000000,-245487) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(141866,-20318),_ P(265508,-72801),_ P(874271,-239720),_ P(1000000,-256645) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(141504,-21150),_ P(264075,-75722),_ P(870443,-249595),_ P(1000000,-267803) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(140737,-22795),_ P(261044,-81473),_ P(862328,-269136),_ P(1000000,-290120) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(140332,-23608),_ P(259447,-84299),_ P(858043,-278795),_ P(1000000,-301279) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(139913,-24413),_ P(257797,-87092),_ P(853610,-288378),_ P(1000000,-312437) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(139480,-25210),_ P(256094,-89850),_ P(849198,-297940),_ P(999208,-323492) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(138573,-26782),_ P(252534,-95257),_ P(841136,-317280),_ P(993432,-345048) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(138098,-27556),_ P(250678,-97903),_ P(837063,-326918),_ P(990544,-355826) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(137611,-28321),_ P(248773,-100511),_ P(832946,-336532),_ P(987656,-366605) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(137110,-29078),_ P(246820,-103078),_ P(828777,-346118),_ P(984768,-377383) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(136069,-30565),_ P(242772,-108089),_ P(820246,-365197),_ P(978992,-398940) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(135529,-31294),_ P(240678,-110530),_ P(815870,-374683),_ P(976104,-409718) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(134977,-32014),_ P(238540,-112927),_ P(811414,-384131),_ P(973216,-420496) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(134412,-32725),_ P(236359,-115280),_ P(806871,-393537),_ P(970328,-431274) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(133245,-34115),_ P(231868,-119847),_ P(797510,-412213),_ P(964552,-452831) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(132644,-34795),_ P(229561,-122060),_ P(792684,-421478),_ P(961664,-463609) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(132030,-35464),_ P(227215,-124225),_ P(787758,-430689),_ P(958776,-474387) ) S.PolyPolygon = Array(N) S=L(D,G,C) N=Array(P(131406,-36122),_ P(224829,-126340),_ P(782729,-439846),_ P(955888,-485166) ) S.PolyPolygon = Array(N) End Sub ' MeridiansMinor Sub ParallelsMajor D=ThisComponent G=D.DrawPages(0) C=RGB(0,0,255) 'P 5 S=L(D,G,C) N=Array(P(950000,0),_ P(949996,-10868),_ P(949983,-21735),_ P(949963,-32602),_ P(949933,-43469),_ P(949896,-54335),_ P(949850,-65200),_ P(949797,-76064),_ P(949734,-86927),_ P(949664,-97788),_ P(949586,-108648),_ P(949499,-119507),_ P(949404,-130364),_ P(949301,-141218),_ P(949190,-152071),_ P(949071,-162922),_ P(948945,-173769),_ P(948810,-184615),_ P(948667,-195457),_ P(948517,-206297),_ P(948359,-217134),_ P(948193,-227967),_ P(948020,-238797),_ P(947839,-249624),_ P(947651,-260446),_ P(947456,-271265),_ P(947253,-282080),_ P(947043,-292891),_ P(946826,-303698),_ P(945864,-314405),_ P(943096,-324885),_ P(940268,-335355),_ P(937382,-345813),_ P(934436,-356260),_ P(931430,-366693),_ P(928366,-377111),_ P(925243,-387515),_ P(922061,-397902),_ P(918821,-408271),_ P(915523,-418622),_ P(912167,-428953),_ P(908753,-439263),_ P(905283,-449552),_ P(901755,-459818),_ P(898171,-470060),_ P(894531,-480277)) S.PolyPolygon=Array(N) 'P 10 S=L(D,G,C) N=Array(P(900000,0),_ P(899993,-10472),_ P(899970,-20947),_ P(899933,-31426),_ P(899881,-41913),_ P(899813,-52408),_ P(899729,-62915),_ P(899629,-73436),_ P(899512,-83973),_ P(899377,-94528),_ P(899224,-105104),_ P(899052,-115703),_ P(898861,-126327),_ P(898648,-136977),_ P(898413,-147658),_ P(898156,-158369),_ P(897889,-169003),_ P(897620,-179535),_ P(897335,-190062),_ P(897034,-200583),_ P(896718,-211098),_ P(896387,-221606),_ P(896040,-232107),_ P(895679,-242602),_ P(895302,-253089),_ P(894911,-263569),_ P(894506,-274040),_ P(894086,-284504),_ P(893651,-294959),_ P(892519,-305319),_ P(889871,-315500),_ P(887105,-325661),_ P(884219,-335800),_ P(881215,-345915),_ P(878092,-356002),_ P(874852,-366062),_ P(871494,-376090),_ P(868018,-386085),_ P(864426,-396046),_ P(860718,-405969),_ P(856894,-415853),_ P(852955,-425695),_ P(848901,-435494),_ P(844734,-445248),_ P(840455,-454954),_ P(836062,-464611)) S.PolyPolygon=Array(N) 'P 15 S=L(D,G,C) N=Array(P(850000,0),_ P(849991,-9891),_ P(849964,-19783),_ P(849919,-29680),_ P(849855,-39583),_ P(849772,-49494),_ P(849671,-59415),_ P(849550,-69348),_ P(849409,-79296),_ P(849248,-89260),_ P(849066,-99242),_ P(848862,-109244),_ P(848635,-119268),_ P(848384,-129316),_ P(848109,-139390),_ P(847809,-149492),_ P(847482,-159623),_ P(847128,-169785),_ P(846744,-179981),_ P(846330,-190211),_ P(845885,-200478),_ P(845407,-210784),_ P(844894,-221128),_ P(844345,-231515),_ P(843759,-241944),_ P(843133,-252417),_ P(842466,-262937),_ P(841756,-273503),_ P(841001,-284118),_ P(839603,-294573),_ P(837038,-304657),_ P(834293,-314698),_ P(831370,-324695),_ P(828269,-334642),_ P(824991,-344537),_ P(821538,-354377),_ P(817909,-364157),_ P(814107,-373874),_ P(810133,-383525),_ P(805987,-393106),_ P(801671,-402614),_ P(797186,-412046),_ P(792535,-421398),_ P(787718,-430667),_ P(782738,-439848),_ P(777594,-448944)) S.PolyPolygon=Array(N) 'P 20 S=L(D,G,C) N=Array(P(800000,0),_ P(799989,-9309),_ P(799957,-18619),_ P(799904,-27933),_ P(799829,-37253),_ P(799732,-46579),_ P(799613,-55914),_ P(799472,-65260),_ P(799307,-74619),_ P(799119,-83991),_ P(798907,-93379),_ P(798671,-102784),_ P(798409,-112209),_ P(798121,-121654),_ P(797806,-131122),_ P(797463,-140614),_ P(797091,-150132),_ P(796689,-159676),_ P(796257,-169250),_ P(795792,-178853),_ P(795294,-188488),_ P(794761,-198156),_ P(794193,-207859),_ P(793587,-217597),_ P(792943,-227373),_ P(792259,-237187),_ P(791532,-247040),_ P(790763,-256934),_ P(789948,-266870),_ P(788542,-276659),_ P(786064,-286104),_ P(783421,-295510),_ P(780616,-304873),_ P(777648,-314190),_ P(774520,-323459),_ P(771231,-332677),_ P(767783,-341839),_ P(764177,-350944),_ P(760414,-359987),_ P(756495,-368967),_ P(752420,-377880),_ P(748193,-386723),_ P(743814,-395493),_ P(739284,-404187),_ P(734605,-412803),_ P(729777,-421337)) S.PolyPolygon=Array(N) 'P 25 S=L(D,G,C) N=Array(P(750000,0),_ P(749988,-8727),_ P(749951,-17455),_ P(749889,-26187),_ P(749803,-34923),_ P(749692,-43665),_ P(749555,-52414),_ P(749393,-61172),_ P(749205,-69941),_ P(748990,-78722),_ P(748749,-87516),_ P(748480,-96325),_ P(748183,-105150),_ P(747857,-113993),_ P(747502,-122855),_ P(747116,-131737),_ P(746699,-140640),_ P(746251,-149567),_ P(745769,-158518),_ P(745253,-167495),_ P(744703,-176498),_ P(744116,-185529),_ P(743492,-194589),_ P(742830,-203680),_ P(742128,-212802),_ P(741384,-221956),_ P(740599,-231144),_ P(739769,-240366),_ P(738895,-249623),_ P(737480,-258744),_ P(735091,-267551),_ P(732550,-276321),_ P(729862,-285051),_ P(727028,-293738),_ P(724049,-302381),_ P(720925,-310977),_ P(717657,-319522),_ P(714247,-328014),_ P(710695,-336450),_ P(707002,-344828),_ P(703170,-353145),_ P(699200,-361399),_ P(695092,-369587),_ P(690850,-377707),_ P(686473,-385756),_ P(681960,-393730)) S.PolyPolygon=Array(N) 'P 30 S=L(D,G,C) N=Array(P(700000,0),_ P(699986,-8145),_ P(699944,-16291),_ P(699875,-24440),_ P(699777,-32593),_ P(699652,-40750),_ P(699497,-48914),_ P(699315,-57085),_ P(699103,-65264),_ P(698861,-73453),_ P(698590,-81654),_ P(698289,-89866),_ P(697957,-98091),_ P(697593,-106331),_ P(697198,-114587),_ P(696770,-122859),_ P(696308,-131149),_ P(695812,-139458),_ P(695281,-147787),_ P(694715,-156136),_ P(694112,-164507),_ P(693471,-172902),_ P(692791,-181320),_ P(692072,-189762),_ P(691312,-198231),_ P(690510,-206725),_ P(689665,-215247),_ P(688776,-223797),_ P(687842,-232376),_ P(686419,-240829),_ P(684118,-248998),_ P(681678,-257132),_ P(679108,-265229),_ P(676408,-273287),_ P(673578,-281303),_ P(670619,-289277),_ P(667531,-297204),_ P(664317,-305083),_ P(660976,-312913),_ P(657510,-320689),_ P(653920,-328411),_ P(650206,-336076),_ P(646371,-343682),_ P(642416,-351227),_ P(638341,-358709),_ P(634144,-366123)) S.PolyPolygon=Array(N) 'P 35 S=L(D,G,C) N=Array(P(650000,0),_ P(649984,-7563),_ P(649938,-15127),_ P(649860,-22694),_ P(649751,-30263),_ P(649611,-37836),_ P(649440,-45413),_ P(649236,-52997),_ P(649000,-60587),_ P(648733,-68185),_ P(648432,-75791),_ P(648098,-83407),_ P(647731,-91033),_ P(647330,-98670),_ P(646894,-106319),_ P(646423,-113982),_ P(645917,-121658),_ P(645374,-129349),_ P(644794,-137055),_ P(644176,-144778),_ P(643521,-152517),_ P(642825,-160274),_ P(642090,-168050),_ P(641314,-175845),_ P(640497,-183659),_ P(639636,-191494),_ P(638732,-199351),_ P(637783,-207228),_ P(636789,-215128),_ P(635357,-222914),_ P(633144,-230446),_ P(630807,-237943),_ P(628355,-245406),_ P(625788,-252835),_ P(623107,-260225),_ P(620312,-267577),_ P(617405,-274887),_ P(614387,-282153),_ P(611257,-289375),_ P(608018,-296550),_ P(604669,-303676),_ P(601213,-310752),_ P(597650,-317776),_ P(593981,-324746),_ P(590209,-331661),_ P(586327,-338516)) S.PolyPolygon=Array(N) 'P 40 S=L(D,G,C) N=Array(P(600000,0),_ P(599983,-6981),_ P(599931,-13964),_ P(599846,-20947),_ P(599726,-27933),_ P(599571,-34921),_ P(599382,-41913),_ P(599157,-48909),_ P(598898,-55910),_ P(598604,-62916),_ P(598273,-69928),_ P(597907,-76947),_ P(597505,-83974),_ P(597066,-91008),_ P(596590,-98052),_ P(596077,-105104),_ P(595525,-112167),_ P(594935,-119240),_ P(594306,-126324),_ P(593638,-133419),_ P(592929,-140527),_ P(592180,-147647),_ P(591389,-154780),_ P(590557,-161927),_ P(589681,-169088),_ P(588762,-176264),_ P(587799,-183454),_ P(586790,-190660),_ P(585736,-197881),_ P(584296,-204999),_ P(582171,-211893),_ P(579936,-218754),_ P(577601,-225584),_ P(575167,-232383),_ P(572636,-239147),_ P(570006,-245877),_ P(567279,-252569),_ P(564456,-259223),_ P(561538,-265838),_ P(558525,-272411),_ P(555419,-278942),_ P(552219,-285429),_ P(548929,-291871),_ P(545547,-298266),_ P(542077,-304614),_ P(538510,-310909)) S.PolyPolygon=Array(N) 'P 45 S=L(D,G,C) N=Array(P(550000,0),_ P(549981,-6400),_ P(549925,-12800),_ P(549831,-19201),_ P(549700,-25603),_ P(549531,-32007),_ P(549324,-38412),_ P(549079,-44821),_ P(548796,-51232),_ P(548475,-57647),_ P(548115,-64065),_ P(547717,-70488),_ P(547279,-76915),_ P(546802,-83347),_ P(546286,-89784),_ P(545730,-96227),_ P(545134,-102676),_ P(544497,-109131),_ P(543819,-115592),_ P(543100,-122061),_ P(542338,-128537),_ P(541535,-135020),_ P(540689,-141511),_ P(539799,-148010),_ P(538866,-154517),_ P(537888,-161033),_ P(536865,-167558),_ P(535797,-174091),_ P(534683,-180634),_ P(533234,-187084),_ P(531198,-193340),_ P(529064,-199565),_ P(526847,-205762),_ P(524547,-211931),_ P(522164,-218069),_ P(519700,-224177),_ P(517153,-230252),_ P(514526,-236293),_ P(511819,-242300),_ P(509033,-248272),_ P(506168,-254207),_ P(503226,-260105),_ P(500207,-265965),_ P(497113,-271786),_ P(493945,-277567),_ P(490694,-283302)) S.PolyPolygon=Array(N) 'P 50 S=L(D,G,C) N=Array(P(500000,0),_ P(499980,-5818),_ P(499919,-11636),_ P(499817,-17454),_ P(499674,-23273),_ P(499490,-29092),_ P(499266,-34912),_ P(499000,-40733),_ P(498694,-46555),_ P(498346,-52378),_ P(497957,-58203),_ P(497526,-64029),_ P(497053,-69856),_ P(496539,-75686),_ P(495982,-81517),_ P(495384,-87350),_ P(494742,-93184),_ P(494058,-99022),_ P(493331,-104861),_ P(492561,-110702),_ P(491747,-116546),_ P(490890,-122392),_ P(489988,-128241),_ P(489041,-134092),_ P(488050,-139946),_ P(487014,-145802),_ P(485932,-151661),_ P(484804,-157522),_ P(483630,-163386),_ P(482172,-169169),_ P(480224,-174787),_ P(478193,-180376),_ P(476093,-185940),_ P(473927,-191479),_ P(471693,-196991),_ P(469393,-202476),_ P(467027,-207934),_ P(464596,-213363),_ P(462100,-218763),_ P(459541,-224133),_ P(456918,-229473),_ P(454233,-234782),_ P(451486,-240059),_ P(448679,-245305),_ P(445813,-250520),_ P(442877,-255695)) S.PolyPolygon=Array(N) 'P 55 S=L(D,G,C) N=Array(P(450000,0),_ P(449978,-5236),_ P(449912,-10472),_ P(449802,-15707),_ P(449648,-20943),_ P(449450,-26177),_ P(449208,-31412),_ P(448922,-36645),_ P(448592,-41878),_ P(448217,-47110),_ P(447798,-52340),_ P(447335,-57569),_ P(446827,-62797),_ P(446275,-68024),_ P(445679,-73249),_ P(445037,-78472),_ P(444351,-83693),_ P(443620,-88912),_ P(442844,-94129),_ P(442023,-99344),_ P(441156,-104556),_ P(440244,-109765),_ P(439287,-114972),_ P(438284,-120175),_ P(437235,-125375),_ P(436140,-130572),_ P(434998,-135765),_ P(433811,-140954),_ P(432577,-146139),_ P(431111,-151255),_ P(429251,-156235),_ P(427321,-161187),_ P(425340,-166118),_ P(423307,-171027),_ P(421222,-175913),_ P(419087,-180776),_ P(416901,-185616),_ P(414666,-190433),_ P(412381,-195225),_ P(410048,-199994),_ P(407667,-204738),_ P(405239,-209458),_ P(402765,-214154),_ P(400245,-218825),_ P(397681,-223472),_ P(395060,-228088)) S.PolyPolygon=Array(N) 'P 60 S=L(D,G,C) N=Array(P(400000,0),_ P(399976,-4654),_ P(399906,-9308),_ P(399788,-13961),_ P(399622,-18613),_ P(399410,-23263),_ P(399150,-27911),_ P(398843,-32557),_ P(398489,-37201),_ P(398088,-41841),_ P(397640,-46477),_ P(397144,-51110),_ P(396601,-55739),_ P(396012,-60363),_ P(395375,-64981),_ P(394691,-69595),_ P(393960,-74202),_ P(393182,-78803),_ P(392356,-83398),_ P(391484,-87985),_ P(390565,-92566),_ P(389599,-97138),_ P(388586,-101702),_ P(387526,-106257),_ P(386419,-110804),_ P(385265,-115341),_ P(384065,-119868),_ P(382818,-124385),_ P(381524,-128891),_ P(380049,-133340),_ P(378278,-137682),_ P(376450,-141998),_ P(374586,-146296),_ P(372686,-150575),_ P(370751,-154835),_ P(368781,-159076),_ P(366775,-163299),_ P(364736,-167503),_ P(362662,-171688),_ P(360556,-175855),_ P(358417,-180004),_ P(356246,-184135),_ P(354044,-188248),_ P(351811,-192345),_ P(349549,-196425),_ P(347244,-200481)) S.PolyPolygon=Array(N) 'P 65 S=L(D,G,C) N=Array(P(350000,0),_ P(349975,-4072),_ P(349899,-8144),_ P(349773,-12214),_ P(349596,-16283),_ P(349370,-20348),_ P(349092,-24411),_ P(348765,-28469),_ P(348387,-32523),_ P(347959,-36572),_ P(347481,-40615),_ P(346953,-44651),_ P(346376,-48680),_ P(345748,-52701),_ P(345071,-56714),_ P(344344,-60717),_ P(343568,-64711),_ P(342743,-68694),_ P(341869,-72666),_ P(340946,-76627),_ P(339974,-80575),_ P(338954,-84511),_ P(337885,-88432),_ P(336768,-92340),_ P(335604,-96233),_ P(334391,-100110),_ P(333131,-103972),_ P(331825,-107816),_ P(330471,-111644),_ P(328988,-115425),_ P(327304,-119129),_ P(325578,-122809),_ P(323832,-126474),_ P(322066,-130123),_ P(320280,-133757),_ P(318474,-137376),_ P(316649,-140981),_ P(314806,-144573),_ P(312944,-148151),_ P(311064,-151716),_ P(309166,-155269),_ P(307252,-158811),_ P(305322,-162343),_ P(303377,-165865),_ P(301417,-169378),_ P(299427,-172874)) S.PolyPolygon=Array(N) 'P 70 S=L(D,G,C) N=Array(P(300000,0),_ P(299973,-3490),_ P(299893,-6980),_ P(299758,-10468),_ P(299571,-13953),_ P(299329,-17434),_ P(299034,-20911),_ P(298686,-24382),_ P(298285,-27846),_ P(297830,-31303),_ P(297323,-34752),_ P(296762,-38192),_ P(296150,-41621),_ P(295484,-45040),_ P(294767,-48446),_ P(293998,-51840),_ P(293177,-55220),_ P(292305,-58585),_ P(291381,-61935),_ P(290407,-65269),_ P(289383,-68585),_ P(288308,-71883),_ P(287184,-75163),_ P(286010,-78422),_ P(284788,-81662),_ P(283517,-84879),_ P(282198,-88075),_ P(280831,-91248),_ P(279418,-94396),_ P(277926,-97510),_ P(276331,-100576),_ P(274707,-103620),_ P(273078,-106652),_ P(271446,-109671),_ P(269809,-112679),_ P(268168,-115676),_ P(266523,-118664),_ P(264875,-121642),_ P(263225,-124613),_ P(261571,-127577),_ P(259916,-130535),_ P(258259,-133488),_ P(256601,-136437),_ P(254943,-139384),_ P(253285,-142331),_ P(251610,-145267)) S.PolyPolygon=Array(N) 'P 75 G.add(A(D,94000,0,156000,0,4500,C)) 'P 80 G.add(A(D,94000,0,104000,0,4500,C)) 'P 85 G.add(A(D,94000,0,52000,0,4500,C)) End Sub ' ParallelsMajor ' NOTE: Sub ParallelsMinor has been moved to file All-macros-part-2.odt, for ease in ' copying. ' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |