<html><head>
<meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8">
</head>
<body>
<h2 align="center">How To Compose a Document with Simple Geometric Shapes,</h2>
<h2 align="center"> to Change their Attributes (color, size, position, ...) </h2>
<h2 align="center">and to Print the Result.</h2>
<h2 align="center">&nbsp;</h2>
<h3> </h3>
<h5 align="center" ><i>provided by</i></h5>
<h5 align="center" ><i>the OpenOffice.org Documentation Project</i></h5>
<h2 align="center">&nbsp;</h2>
<h3>Table of Contents:</h3>
<ol>
  <li><a href="#fastrecognition">A quick introduction</a>. An introduction to 
    the OpenOffice.org drawing tools.</li>
  <li><a href="#drawnow">I want to draw, now!</a> Start expressing your artistic 
    inspiration.</li>
  <li><a href="#customizedrawings">Customize your drawings</a>. Change their attributes 
    (color, size, position, ...)</li>
  <li><a href="#printyourwork">Print your work</a>. Put the results of your efforts 
    on paper. 
    <ol start="4">
      <li>1 <a href="#printingtroubleshooting">Troubleshooting Printing</a>. Does 
        anything go wrong when you attempt to print? If so, consult this section.</li>
    </ol>
  </li>
  <li><a href="#credits">Credits</a>. Author and related facts.</li>
</ol>
<h3><a name="fastrecognition"></a>1. A quick introduction. An introduction to 
  the OpenOffice.org drawing tools</h3>
<p>In 1937, the great Spanish painter Pablo Picasso amazed the World with his 
  fascinating and dramatic masterpiece: <i>Guernica</i>. Fortunately, nowadays, 
  we don't need to be excellent painters listed in Fine Art books to create drawings 
  and other high quality graphic documents. Modern drawing software is enough. 
  Among these applications, <b>OpenOffice.org Draw</b> makes our creative work 
  easier and somehow more entertaining.</p>
<p>Before you start to learn the basic functionality of Draw, you should have 
  an overview of the work area and tools with which you will get to work. When 
  you open a new Draw document, a window like this will be displayed:</p>
<p><img src="DrawScreenshot.gif" width="640" height="480"
alt="OpenOffice.org Draw main window"></p>
<p>Just below the window title bar (the one with the butterfly logo) you can see 
  three command bars. They are, in order of appearance:</p>
<ul>
  <li>The <b>Menu Bar</b></li>
  <li>The <b>Function Bar</b></li>
  <li>The <b>Object Bar</b></li>
</ul>
<p>The Menu bar lists the main Menus available in Draw. The Function bar displays 
  the icons to access functions like Open, Save, Copy, Cut, Paste and other OpenOffice.org 
  common tasks. The Object Bar includes some specific drawing tools that can be 
  used to modify the appearance of an object when it is selected (line style, 
  color and thickness; fill style and color).</p>
<p><b><i>Hint: </i></b><i>Although several people think that these bars are unchangeable, 
  this is not absolutely true. In fact, you can modify the icons and functions 
  that appear on them according to your needs, by clicking with the right mouse 
  button on the Main Toolbar or the Object Bar. A context menu will be displayed. 
  Then, select </i><b>'Configure...'</b><i> or </i><b>'Customize...'</b><i><b> 
  </b>to alter the content of the bars. In addition to this, by selecting </i><b>'Visible 
  Buttons'</b><i><b> </b>you can turn some buttons on/off. From the same context 
  menu you can summon another bar, called the </i><b>Options Bar </b><i>that is 
  disabled by default. It contains additional buttons to access useful positioning 
  and modification tools.</i></p>
<p>To the left side of the Draw Window you will find the <b>Main Toolbar. </b>In 
  it, there are tools you need to complete your Draw document. The base functionality 
  of this bar will be discussed throughout this 'How-To'. Finally, at the bottom, 
  there is the <b>Status Bar. </b>It displays very useful information such as: 
  cursor location in the Draw document (expressed in coordinates), zoom percentage, 
  template name, etc.</p>
<p>The 2 numbered bars that you can see next to the document area are the <b>horizontal 
  and vertical rulers. </b>You can change the measurement units on them by right 
  clicking on them to display the context menu where other units can be chosen. 
  You do not need them? Then turn them off, selecting <b>View-Rulers </b>from 
  the Menu bar<b>. </b>To make them visible again, simply repeat the same menu 
  choice, so that the <b>'Rulers' </b>item has a symbol of selection at its side.</p>
<h3><a name="drawnow"></a>2. I want to draw, now! Start expressing your artistic 
  inspiration.</h3>
<p>If you jumped to this section directly without reading the previous one it 
  would be a good idea to go back and read it, since there are terms defined above 
  that will be used from this point onwards. However for those who are impatient, 
  we will now discuss how to draw simple geometric shapes in a Draw document!</p>
<p><img src="MainToolBar.gif" width="30" height="375" align="right"
alt="Main Toolbar"></p>
<p>The figure you see to the right shows the <b>Main Toolbar. </b>The drawing 
  tools that you will use in <strong>OpenOffice.org Draw</strong> reside here. 
  To activate a specific tool, click on its icon. Each icon's button is of the 
  'toggle' type, so when you release your mouse button the button itself will 
  change to a depressed style so that you can see that the tool is correctly selected. 
  Try to select the rectangle tool... It is the fourth icon from the top...</p>
<p>Now, move your mouse pointer. You will notice that it has transformed into 
  a cross with a little rectangle. To draw your first shape, follow this procedure:</p>
<ol>
  <li>Left Click and Hold somewhere in the document area. This point will be the 
    upper left corner of your rectangle.</li>
  <li>Drag your mouse and then release the left button at any desired position.</li>
</ol>
<p>Eureka! Your rectangle is displayed in all its magnificence! Looking at the 
  Main Toolbar, you can see that the rectangle tool is selected no more. It exhibits 
  this behavior because you have clicked on it 1 time. If you had clicked twice, 
  the rectangle tool would have been selected until you chose another tool. So: 
  1 left click is equal to 1 drawing action, while 2 left clicks are equal to 
  multiple drawing actions.</p>
<p><b><i>Hint</i></b><i>: Surely you have noticed another feature of the Main 
  Toolbar: a lot of icons have a little green triangle to their left. This symbol 
  shows that each associated tool has a floating bar. To display it, click on 
  the desired icon and hold the mouse button for few seconds. The floating bar 
  should appear. You can move it anywhere in the document area simply by dragging 
  it. This is a useful way to draw several shapes of the same type, but with different 
  attributes. To close it and move back to the Main Toolbar, simply use the close 
  button in the upper right corner of the floating bar.</i></p>
<p>The rectangle is a very simple shape to draw. The square is too. You can create 
  one by selecting the square tool from the rectangle floating bar, and then repeating 
  the steps listed for creating the rectangle. Nothing is easier! Of course <strong>OpenOffice.org 
  Draw</strong> can be used to draw more complex shapes, for example: a circle, 
  an ellipse or circle sections. To create such shapes you need to:</p>
<ol>
  <li>Select the ellipse tool from the Main toolbar (it is the icon just below 
    the rectangle tool), holding down the mouse button for a few seconds to display 
    the floating bar.</li>
  <li>Choose the shape you want to draw.</li>
  <li>Left click and drag on the document area.</li>
  <li>Release the left mouse button.</li>
</ol>
<p>In addition to this common procedure, there are specific actions that need 
  to be performed to draw or to modify some of the shapes that you can choose 
  from the ellipse floating bar. Here they are:</p>
<ul>
  <li><b>Circle:</b> No special action is required. The further you drag the mouse 
    before releasing the mouse button the larger the circle will be.</li>
  <li><b>Ellipse:</b> Moving the mouse horizontally or vertically during the dragging 
    phase reduces or enlarges the ellipse's radius.</li>
  <li><b>Ellipse Pie</b>: This shape is very similar to a normal ellipse, but 
    a part of it will not be drawn, creating an empty region similar to a piece 
    of cake. Follow these steps: 
    <ol>
      <li>Select the <b>'Ellipse pie'</b> tool from the Ellipse floating bar. 
        Draw your shape as if it were a normal ellipse.</li>
      <li>When you release the left mouse button you will see an ellipse, but 
        this is not the final drawing object. In fact, a line inside the ellipse 
        is still visible: the <b>radius. </b>You can move the radius by moving 
        the mouse up to the position you want to demark the first side of the 
        region that will be empty. Click the left mouse button to confirm the 
        stop position.</li>
      <li>Repeat step 2 to determine the position of the second side of the empty 
        region.</li>
    </ol>
  </li>
  <li><b>Circle Pie:</b> After having selected the <b>'Circle pie' </b>tool from 
    the Ellipse floating bar and then having created your circle, follow steps 
    2 and 3 of the 'Ellipse Pie' procedure.</li>
  <li><b>Ellipse Segment:</b>This is a section of an ellipse. 
    <ol>
      <li>Select the <b>'Ellipse segment'</b> tool from the Ellipse floating bar. 
        Draw your shape as if it were a normal ellipse.</li>
      <li>The radius will be still visible. Click a first time with the left mouse 
        button to set the first point of the line where the ellipse will be truncated.</li>
      <li>Click a second time to set the second point of the line where the ellipse 
        will be truncated.</li>
    </ol>
  </li>
  <li><b>Circle Segment:</b> After having selected the <b>'Circle segment'</b> 
    tool from the Ellipse floating bar and after having created your circle, follow 
    steps 2 and 3 of the 'Ellipse Segment' procedure.</li>
</ul>
<h3><a name="customizedrawings"></a>3. Customize your drawings: Change their attributes 
  (color, size, position, ...)</h3>
<p>If you have followed all of the procedures listed in the previous section, 
  you may have too many shapes in your Draw document. What a confusion! Please, 
  create a new blank Draw document by selecting<b> File-New-Drawing</b> from the 
  Menu bar.</p>
<p>On your new white page, draw a rectangle. Look at it. It is filled with a light 
  blue color and has small green squares along its perimeter. Light blue is the 
  default fill color, while the small green squares are the resize handles and 
  show that your rectangle is selected. Light blue is certainly a pretty color, 
  but some among you may think that it is too coquettish and may wish to change 
  it.</p>
<p>There are several ways to change the color of an object. The most common ones 
  are:</p>
<ol>
  <li>Select <b>Format-Area </b>from the Menu bar. In the Area tab of the Dialog 
    window that will appear, choose the color you want to use.</li>
  <li>Right click on the selected object to display its context menu. Then choose: 
    <b>'Area...' </b>from that menu. In the Area tab of the Dialog window that 
    will appear, choose the color that you want to use.</li>
  <li>Select the color that you prefer from the <b>'Area/Style Filling'</b> drop 
    down list box which you will find in the <b>Object bar.</b></li>
</ol>
<p>Remember that whatever procedure you follow to change the object color, the 
  object itself must be selected. To do this, simply left click on the object.</p>
<p><b><i>Hint: </i></b><i> people who often draw web graphics are in the habit 
  of using color expressed as hexadecimal values or web color names. A web safe 
  color palette is a palette which contains only colors that will be displayed 
  in a nearly identical way by different browsers on different platforms. To use 
  this feature, follow these steps:</i></p>
<ol>
  <li><i>Draw an object on the document page.</i></li>
  <li><i>Click on the object to select it.</i></li>
  <li><i>Right click on it to display the context menu.</i></li>
  <li><i>Select the</i> '<b>Area...</b>'<i> item.</i></li>
  <li><i>In the pop-up window that will appear, flip to the</i> '<b>Colors</b>'<i> 
    tab.</i></li>
  <li><i>Click on the </i> '<b>Load Color List</b>'<i> icon <img
    src="OpenIcon.gif" width="31" height="25"
    alt="Load Color List icon">.</i></li>
  <li><i>Select the html.soc file and press</i><b> 'OK'</b><i>. (standard path:</i> 
    <b>OpenOffice60/user/config/</b><i>)</i></li>
</ol>
<p>Color is only one of the object attributes you can modify. Left click somewhere 
  in a document zone where there is nothing, to deselect your rectangle. Now, 
  look at it again. You can see that its perimeter is a thin black line. You can 
  change this perimeter's style and color!</p>
<p>Once more, a single action can be performed in several ways (don't forget to 
  select your object by clicking on it):</p>
<ol>
  <li>Select <b>Format-Line</b> from the Menu Bar. In the Line tab of the Dialog 
    window that will appear choose the attributes of the line that you want to 
    change.</li>
  <li>Right click on the selected object to display its context menu. Then choose: 
    <b>'Line...' </b>from that menu. In the Area tab of the Dialog window that 
    will appear choose the color that you want to use.</li>
  <li>Select the color and style which you prefer from the <b>'Line Style' </b>and<b> 
    'Line Color' </b>drop down list box that you find in the <b>Object bar.</b></li>
</ol>
<p>Until this moment, we have spoken about object features that are related to 
  the drawing appearance of an object. Now, we will go on to describe how to change 
  the position and size of an object. Select the rectangle tool from the Main 
  Toolbar and draw a second rectangle in an empty zone of your Draw document. 
  The new rectangle will be automatically selected when you release the left mouse 
  button. It has already been said that the small green squares are called 'resize 
  handles'. You can use them to modify the size of your object in this way:</p>
<ol>
  <li>Pass your mouse pointer over a green square. The pointer will transform 
    into a line with little arrows at the edges. The orientation of the arrows 
    shows you in which direction you can resize your object. The corner squares 
    allow you to modify the object's width and/or height contemporarily, while 
    the middle squares allow you to change only one of these dimensions (depending 
    on which square you choose).</li>
  <li>Left click on one of the squares, holding the button down. Drag the mouse 
    until the object has reached the dimensions you want, then release the mouse 
    button.</li>
</ol>
<p>When you drag a middle resize handle you can, however, proportionally change 
  the width and height at the same time. Simply hold the <b>[SHIFT] </b>key down 
  while you perform the action.</p>
<p>You are now able to modify the size of your rectangle, but you may want to 
  change its position too. You can do so in this way:</p>
<ol>
  <li>Be sure that one of your shapes is selected.</li>
  <li>Move your mouse cursor over it. It will change to a cross with four arrows.</li>
  <li>Left click on the object to grab it.</li>
  <li>Drag the mouse up to a new position, then release the mouse button.</li>
</ol>
<p><b><i>Hint:</i></b><i> in some drawing projects, you may need to position or 
  to resize your objects in a more accurate way than what you can do visually. 
  In OpenOffice.org you can perform this action by right clicking on an object 
  and selecting </i><b>'Position and Size'</b><i><b> </b>from the context menu. 
  In the Dialog window that will be displayed, you'll be able to change size and 
  position using the default measurement unit. Alternatively, you can improve 
  the accuracy of these actions by displaying a dotted grid as a background to 
  your document. Right click on a command bar to display the context menu, then 
  select </i><b>'Options Bar'</b><i><b>. </b>In the new bar that should appear 
  just above the status bar, click on the </i><b>'Display Grid'</b><i><b> </b>icon 
  <img
src="DisplayGrid.gif" width="22" height="23" alt="Display Grid icon">. The grid 
  attributes can be modified by choosing </i><b>Tools-Options-Drawing-Grid</b><i><b> 
  </b>from the Menu bar.</i></p>
<p>When you proceed to modify your drawing documents, you may find that an object 
  will overlap another object, but not in the stacking sequence that you would 
  like. Of course you can change the order in which your objects are layered. 
  There are two main ways to do so:</p>
<ul>
  <li>Click for a few seconds on the <b>'Arrange' </b>icon <img
    src="Arrange.gif" width="26" height="21" alt="Arrange icon"> in the Main Toolbar 
    so that the <b>'Arrange'</b> Floating Toolbar appears and then select the 
    specific tool that you need.</li>
  <li>Right click on a selected object to display its context menu, then select 
    the correct sub-item of the <b>'Arrange'</b> item.</li>
</ul>
<h3><a name="printyourwork"></a>4. Print your work. Put the results of your efforts 
  on paper.</h3>
<p>There are several ways in which you can exploit the drawing documents you create 
  with OpenOffice.org. The most traditional way is to print them. Since printing 
  systems can vary substantially from platform to platform, this 'How-to' will 
  describe only the printing commands for the Microsoft Windows OS. However, many 
  OpenOffice.org dialog windows are the same across every OS.</p>
<p>Before trying to print your document, it would be a wise thing for you to save 
  it on your hard disk. If the document is untitled, choose <b>File-Save as... 
  </b>from the main menu. If you have already saved it before, simply press <b>[CTRL]+S 
  </b>on your keyboard. Now, whatever happens during the printing operation, your 
  work will not be lost.</p>
<p>You can select the printer with which you will print by selecting <b>File-Printer 
  Settings... </b>from the Menu bar. In the Dialog box, the default printer name 
  should be already present in the drop down list box labeled <b>'Name'. </b>Click 
  on the <b>'Properties' </b>button to modify the settings of your printer driver.</p>
<p>Now you are ready to print. You can do it directly by clicking on the <b>'Print 
  File directly'</b> icon <img src="print_file_directly.GIF" width="27" height="21"
alt="Print File directly icon"> on the Function Bar. Otherwise you can make some 
  final modifications through the Print Dialog Window. You can access this dialog 
  by:</p>
<ul>
  <li>selecting <b>File-Print </b>from the Menu bar</li>
  <li>pressing <b>[CTRL]+P </b>on your keyboard</li>
</ul>
<p>The Print Dialog Window looks like this:</p>
<p><img src="PrintDialogWindow.gif" width="509" height="299"
align="left" alt="Print Dialog Window"></p>
<p>The upper part of the window is identical to the Printer settings dialog, and 
  you can modify it in the same way. The only addition is the <b>'Print to file' 
  </b>check box. If you check this option, a <b>'Save as...'</b> dialog will be 
  displayed so that you can choose the name of a file to which your document will 
  be printed. This function is particularly useful to print a document created 
  on a notebook which has no printer attached, or to transfer such a file to a 
  workstation outside your LAN and print it there.</p>
<p>The <b>'Print range' </b>section allows you to determine what pages of your 
  document should be printed, while the <b>'Copies' </b>section can be used to 
  modify the number of copies of the document to be printed.</p>
<p>In the bottom right corner, you will find the <b>'Options' </b>button. By clicking 
  on it, the Options Dialog Window will appear. There, you will be able to change 
  additional settings such as: the printer quality, page settings and footnote 
  text (page name, date, time).</p>
<p>Finally, click the <b>'OK' </b>button in the Print Dialog Window to get your 
  document printed.</p>
<h3><a name="printingtroubleshooting"></a>4.1 Printing Troubleshooting. Does anything 
  go wrong when you attempt to print? If so, consult this section..</h3>
<p>This section, like the previous one, describes the OpenOffice.org Suite running 
  on a Microsoft Windows OS. Most suggestions are applicable to other platforms, 
  but you should take into consideration the differences between the printing 
  subsystems.</p>
<h4><b>A. </b>The printer doesn't print at all:</h4>
<ol>
  <li>This response may seem silly, but have you checked if your printer is powered 
    on? Many times, the simplest things are the first ones to be forgotten.</li>
  <li>Check the hardware connection between your printer and PC. Under a Windows 
    OS, printing problems are more often caused by hardware than by software. 
  </li>
  <li>Maybe, your printer has not been selected as the default printer. Open the 
    Print Dialog Window selecting <b>File-Printer Settings... </b>from the Menu 
    bar and check which printer is shown in the <b>'Name' </b>drop down list box. 
    Change the selected printer if needed. </li>
  <li>Be sure that the <b>'Print to file' </b>checkbox in the Print Dialog Window 
    is unchecked. Otherwise, the output of your document will be redirected to 
    a file and not to your printer. </li>
</ol>
<p><b>B. The colors printed by your printer are not the same ones displayed on 
  the screen:</b> </p>
<p>Modern color printers use a % mix of 4 inks (or 6 in the newest ones) to reproduce 
  the colors that our eyes are normally able to see. In OpenOffice.org Draw, to 
  edit a color using the exact percentage of ink you have to:</p>
<ol>
  <li>Click on the object whose color you want to change. It will be selected.</li>
  <li>Right click on it and choose '<b>Area...</b>' from the context menu.</li>
  <li>In the pop-up window that will appear, flip to the '<b>Colors</b>' tab.</li>
  <li>Select CMYK from the '<b>Color System</b>' combo box.</li>
  <li>Modify the CMYK % values in the boxes below.</li>
  <li>Press the <b>'OK'</b> button. You will be prompted as to whether you want 
    to modify the existing color or to add a new one to the palette. Make your 
    choice.</li>
</ol>
<p>Otherwise, you can use/modify a ready CMYK palette: </p>
<ol>
  <li>Repeat steps 1, 2 and 3 listed above.</li>
  <li>Click on the '<b>Load Color List</b>' icon.</li>
  <li>Select the cmyk.soc file and press the <b>'Open'</b> button. (standard path: 
    <b>OpenOffice60/user/config/</b>)</li>
  <li>Close the window by pressing the <b> 'OK'</b> button.</li>
</ol>
<p><b>C. The drawings near the top or bottom page borders are not printed properly:</b></p>
<p>You have probably set the margins of the Draw document page too near the print 
  area borders of your printer. You have to:</p>
<ol>
  <li>Check your printer manual to find out how large your printer's print area 
    is.</li>
  <li>Select<b> Format-Page...</b> from the Menu bar.</li>
  <li>In the '<b>Page</b>' tab of the '<b>Page Setup</b>' window, change the top 
    and button margins to the size you have found in your printer manual. If you 
    do not have your printer manual anymore, try a value higher than 2,5 cm (1 
    inch). This works with many printers.</li>
  <li>Press the <b>'OK'</b> button</li>
</ol>
<p>Remember to arrange your drawing, making sure that every object is within the 
  new page margins.</p>
<p><b><i>Hint: </i></b><i>OpenOffice.org Draw is a very powerful application, 
  but it cannot improve the capabilities of your hardware. So, if you think that 
  your printed document is not up to scratch, please consider the quality of your 
  hardware too. Especially when you are printing documents with photos or images 
  with million colors, you should own a Photo printer and use special glossy paper.</i></p>
<h3><a name="credits"></a>5. Credits</h3>
<p><b>Original Author: </b>Gianluca Turconi</p>
<p><b>Acknowledgments:</b> Grateful thanks to James Treleaven for his valuable 
  collaboration.</p>
<p><b>Integration by: </b>N/A</p>
<p><b>Last modified on</b>: February 11, 2001</p>
<p><b>Organization contact:</b> <span style="font-weight: medium">OpenOffice.org 
  Documentation Project </span><a href="http://documentation.openoffice.org/index.html"><span style="font-weight: medium">http://documentation.openoffice.org/index.html</span></a></p>
<h3><br>
</h3>
</body>

</html>

