MAGIC Magic Mailing List
 
 

From: R. Timothy Edwards (tim AT stravinsky DOT jhuapl.edu)
Date: Thu Mar 29 2001 - 15:44:16 EST

  • Next message: Jeff W. Sondeen: "Re: Things about magic"

    And now, the moment you've all been waiting for
    (drum roll, please. . .)
    
    Non-manhattan geometry has been implemented in basic form.  This includes
    the following:
    
       1) Two new commands exist for manipulating non-manhattan
          geometry, "split" and "spliterase".  These commands work
          basically like "paint" and "erase".
    
    	-- "split" takes two parameters, a direction and a layer.
    	   The direction is "nw", "sw", "ne", and "se" and declares
    	   which corner of the select rectangle becomes the right-
    	   angle corner of the split tile, painted with "layer".
    	   An optional third parameter declares the type to paint
    	   in the opposite corner.
    
    	-- "spliterase" takes one parameter, a direction, declaring
    	   which corner of the select rectangle to erase paint from.
    	   An optional second parameter declares the type of paint
    	   to erase.
    	   
       2) A method exists for saving split tiles to magic files and reading
          them back again.  The type 't' for triangle has been added to the
          type 'r' for rectangle.
    
       3) A method exists for reading non-manhattan geometry from CIF and
          calma files.  This method entirely replaces the manhattan
          stair-step conversion routine.  It is an incredibly complicated
          algorithm but will read any polygon thrown at it, no matter how
          convoluted.
    
       4) Methods have been added for selecting, moving, copying, and
          stretching split tiles.
    
       5) Undo and redo functions work correctly with split tiles.
    
       6) Split tiles flip and rotate correctly in subcells, clip
          correctly at window boundaries, and split the tiling planes
          correctly when overlapping other geometry, including other
          split tiles (this is NOT a trivial process!).
    
       7) Diagonal tiles are correctly implemented in the X11 and OpenGL
          interfaces.  Currently, the config script does not flag an
          error if NONMANHATTAN is defined in conjunction with any other
          graphics formats.
    
    Mostly implemented:
    
       8) CIF and Calma write.  Everything has been completed except for the
          "bloat" function, which only works for simple cases.  This is the
          next item on my "to-do" list.
    
    Partially implemented:
    
       9) DRC.  "Basic" DRC should be fairly easy to implement, where "basic
          DRC" means that edge-based rules get interpreted for whichever
          type borders the edge of interest in the split tile.  Rules will
          need to be added which account for width reduction in a split
          tile.  Hopefully there won't be any major "gotchas" here.
    
    Not yet implemented:
    
       10) Extract (ugh.)  I'll think about it when I get to it.
    
    Wish list:
     
       11) I'm thinking about a method which would allow triangular select
           boxes, so that non-manhattan geometry can be drawn with mouse
           events rather than having to be entered entirely from the
           keyboard.
    
    Caveats:
    
       12) Split-tile geometry has its limits.  It is always possible to
           cut a diagonal at a non-integer lambda point, which causes the
           diagonal to shift to the nearest integer position.  So far, I
           have not found this to be too annoying in practice.  The effect
           is minimal if only 45-degree geometry is used.  I have not yet
           found a CIF or calma file that gets altered by the read
           process, but I'm sure some exist.  Let me know if you find any.
    
       13) Until I finish the CIF bloat function, CIF output can be incorrect
           around areas where bloats occur, such as selects around transistors
           if the transistors have been made non-manhattan.  Other CIF
           behavior includes no handling of contacts on split tiles, which
           are left empty of contacts.
    
       14) I believe I have implemented everything correctly, but segmentation
           faults are always possible.  Let me know immediately if you
           encounter a crash, preferably with a list of minimum steps necessary
           to generate the error.
    
    ------------------------------------------------------------------------
    
    Also in this set of corrections:
    My last two "enhancements" BOTH contained errors;  in my calma read fix,
    I missed one change when copying from my working directory to my
    distribution directory.  My fixes on the macro capabilities were all
    screwed up;  now I have gone even further in hacking it up.  The problem
    was that magic supports two input interfaces, one from the calling
    terminal and one from the magic window.  In X11, the keycodes are all
    different from the ASCII values returned by the terminal for the same
    keys.  What I have done is to put most of the work into the X11Handler
    process, letting it receive the keycodes from the X key event, then
    attempt to cast the keycode into ASCII where possible.  If not possible,
    then it returns an integer including bits for all modifier keys in
    effect plus the X11 keysym for the key.
    
    ------------------------------------------------------------------------
    
    						---Tim
    


  •  
     
    Questions? Contact Rajit Manohar
    cornell logo