# changelog

author: matthias@koefferlein.de
changelog:
  - Update to 0.23.11
    * Bugfix: partial edit mode - a cell could be selected even if not visible
      With the new version, the selection behavior of normal selection
      and partial selection are somewhat more consistent.
    * Bugfix: The CIF reader was not able to read CIF files with line breaks
      Commands with line breaks separating arguments were not read
      correctly.
    * Bugfix: Printout now considers global transformation correctly
      Previously, the global transformation was ignored on printout
      and for screenshots.
    * Enhancement: Partial edit mode now also supports polygons with holes
      Polygons with holes are rare since they cannot be represented
      in GDS or OASIS files. But they can be generated in DRC scripts.
      Now, such polygons can be edited in partial edit mode too.
    * Bugfix: LEF/DEF reader now correctly uses half the path width for path extension
      Previously the default value was 0.
    * Bugfix: Library update was not working properly for OASIS reader
      OASIS files with library references had as issue when updating
      the library cells: cell deleted in the library were not deleted
      in the layout.
    * Enhancement: Warning, when drawing on invisible layers
      Previously there was not feedback: the shape was drawn, but not
      visible. Now, a warning pops up when trying to draw on invisible
      layers. This warning can be disabled.


author: matthias@koefferlein.de
changelog:
  - Update to 0.24.1
    * Enhancement: switched to -O2 instead of -O3 to avoid issues with certain
      gcc versions for which -O3 appears to be broken.
    * Bugfix: fixed a backward compatibility issue in scripting. Specifically
      "view.each_object_selected { |s| s.shape }" will work again.
    * Bugfix: the layer matching algorithm in the .lyp file layer assignment
      is compatible with the previous version again. This specifically applies
      to "wildcard" specifications. In 0.24, named and unnamed layers were
      considered different even if GDS layer and datatype numbers were identical.
      The effect was that if a named layer was present, a .lyp file specification
      without that name was not matching the named layer and with "add other layers"
      the named layer was produced again.
    * Enhancement: "Apply all" in the object properties dialog behaves somewhat
      more intuitive now. Specifically changing the path endcap styles now
      works as expected. For the other properties, a choice was provided
      between applying changes in a relative or absolute way. For example,
      when the left edge of a box is changed, the left edges of all selected
      boxes are shifted by the same amount in relative mode. In absolute mode,
      the left edge will be set to the specified position for all selected boxes.
    * Bugfix: Python iterators will keep a reference to the source object now.
      This avoids problems when fetching iterated properties (typically "each..." methods)
      from short-living objects.
    * Bugfix: Python's StopIteration exception does no longer appear in the debugger
      now. This is an exception used internally to mark the end of an iteration
      sequence.
    * Bugfix: "Path#width=" does no longer reset the round end flag.
    * Enhancement: the "Show All" mode of the marker browser is persisted now.
  - Update to 0.24
    * Enhancement: Python support: Scripts and PCells can now be coded in Python as well. Python and Ruby
      scripts may coexist in the same application and they can be debugged together. The macro
      IDE features a Python tab in which Python scripts can be managed.
      The language features of Python and Ruby are very similar, so the features of the
      integration are highly comparable and easy to translate. The Python module
      name is "pya".
    * Bugfix: When using a layer with special hierarchy level settings (i.e. #*), the ruler did not snap to that shapes.
    * Bugfix: Qt item ownership is now transferred on some methods. For example, "QTreeWidget#insertItem" now will
      transfer ownership of the item to the tree widget. Hence, when the variable holding the item goes out of scope,
      the tree item will not be destroyed.
    * Enhancement: The shape selection can now be manipulated through scripts (new LayoutView methods "object_selection=",
      "select_object" etc.)
    * Enhancement: New edge vs. region operations are supported (edge AND region and edge MINUS region)
    * Enhancement: RBA/pya objects now in general feature a "_manage" and "_unmanage" method will allows releasing
      the ownership over an object in cases where object lifetime control is important (specifically when passing
      objects around in Qt applications).
    * Enhancement: Many new RBA methods, i.e.
      Annotation#id
      Cell#change_pcell_parameters
      Cell#pcell_parameters_by_name
      DPolygon#assign_hull (raw argument)
      DPolygon#assign_hole (raw argument)
      DPolygon#each_edge (with contour argument)
      DPolygon#insert_hole (raw argument)
      DPolygon#transform
      DSimplePolygon#initialize (raw parameter)
      DSimplePolygon#initialize (raw parameter)
      DSimplePolygon#set_points
      DSimplePolygon#transform
      EdgePairs#+
      Edges#& (with Region)
      Edges#&= (with Region)
      Edges#- (with Region)
      Edges#-= (with Region)
      Edges#inside_part
      Edges#select_inside_part
      Edges#outside_part
      Edges#select_outside_part
      Instance#change_pcell_parameter
      Instance#change_pcell_parameters
      Instance#convert_to_static
      Instance#flatten
      Instance#is_pcell?
      Instance#pcell_declaration
      Instance#pcell_parameters
      Instance#pcell_parameters_by_name
      Layout#begin_shapes (with cell ref)
      Layout#begin_shapes_overlapping (with cell ref)
      Layout#begin_shapes_touching (with cell ref)
      Layout#create_cell (with PCell parameters and/or lib name)
      Layout#delete_property
      Layout#flatten_into
      Layout#has_prop_id?
      Layout#pcell_ids
      Layout#pcell_names
      Layout#prop_id
      Layout#prop_id=
      LayoutView#clear_object_selection
      LayoutView#object_selection
      LayoutView#object_selection=
      LayoutView#replace_annotation
      LayoutView#select_object
      LayoutView#unselect_object
      MainWindow#cm_close_all
      MainWindow#cm_save_all
      MainWindow#cm_sel_move_to
      MainWindow#instance
      MainWindow#manager
      ObjectInstPath#==
      ObjectInstPath#!=
      ObjectInstPath#<
      ObjectInstPath#append_path
      ObjectInstPath#clear_path
      ObjectInstPath#cv_index=
      ObjectInstPath#layer=
      ObjectInstPath#seq=
      ObjectInstPath#shape=
      ObjectInstPath#top
      ObjectInstPath#top=
      RdbItemValue#initialize (with float argument)
      RdbItemValue#float
      RdbItemValue#is_float?
      RdbItemValue#tag_id
      RdbItemValue#tag_id=
      SaveLayoutOptions#gds_write_file_properties
      SaveLayoutOptions#gds_write_file_properties=
      SaveLayoutOptions#oasis_write_std_properties
      SaveLayoutOptions#oasis_write_std_properties=
      Shape#each_edge (with contour argument)
    * Enhancement: Qt API is aligned better with C++ Qt notation. Several bug fixes, new features and stability enhancements.
      For example:
      New: RBA::Qt::white or RBA::Qt::GlobalColor::white
      Old: RBA::Qt_GlobalColor::white
    * Enhancement: the debugger can now be disabled in the macro editor IDE for enhanced
      script execution performance with IDE window open and less interactions between
      Qt code and Macro IDE
    * Bugfix: DRC crashed when outputting shapes to a layer that was used as an input
      in further parts of the script but has been declared as input befor the layer
      was output.
    * Bugfix: ".lyp wildcard replacement" now honors transformations as well
    * Bugfix: Gerber import issues fixed: Zero-diameter circular apertures moves are translated into lines,
      Zero-length moves must not be clear for G1 and circular apertures.
    * Bugfix: The technology button now applies the technology even if the technology did not change.
    * Enhancement: Polygons with holes are better supported now (for example in partial editing). Such
      polygons cannot be written to GDS or OASIS (they will be converted to ones without holes), but
      they may be created in DRC scripts.
    * Bugfix: "Reload layout" now doesn't forget the technology that was attached to a layout.
    * Bugfix: Box side setters now behave more consistently in scripting. Before this fix, it was not possible to
      assign the sides of a box this way: "b = Box::new; b.left = 100; b.right = 300".
    * Bugfix: recursive library references (library referencing itself indirectly) made the application
      crash.
    * Bugfix: Subclass mapping sometimes failed in certain cases. This was particular annoying in Qt's event
      handlers since "QKeyEvent" (or similar classes) only showed up "QEvent".
    * Enhancement: "Move selection to" function available in "Edit/Selection/Move To". With this function,
      the selection (shapes are instances) can be moved to a specific position. You can specify the
      reference point to use. For example the center of the bounding box.
    * Bugfix: Menu icon assignment was not working in some cases within scripts.
    * Bugfix: Readonly (global) macros could be edited but not saved.
    * Bugfix: Instances could be selected even if they had only invalid layers.
    * Enhancement: The application now features a crash handler. This handler gives some debugging information
      about the crash which you can send together with a bug report. In some cases, the crash handler will
      allow continuing to work with the application although it's highly advisable to save and close.
    * Bugfix: Registering plugins through the script's plugin API sometimes disabled view features.
    * Bugfix: The macro IDE is not automatically put in the foreground any more. This sometimes interfered with
      modal dialogs shown from a macro.
    * Enhancement: The macro IDE now features watch expressions which are automatically evaluated when in a
      breakpoint.
    * Enhancements: The "Save Layout" options are now separated from the save function. That means they can
      be configured once and the dialog will not pop up always when saving. This way, "Save All" is provided
      which will save all open files with the current options.
    * Enhancement: A "Close All" function to close all open layouts.
    * Enhancement: In scripted layout loads, multiple files can be loaded into the same layout object. In that
      case, the content of the files are merged. This worked so far with GDS. Now this also works with OASIS.
    * Bugfix: OASIS int-typed properties now as written as such. Before, they have been written as strings.
    * Enhancement: sizing code and path to polygon translation now will better maintain 45-degree edges.
    * Enhancement: DRC support for edge/polygon booleans ("edges AND polygons" will select the edges inside the polygons,
      "edges MINUS polygons" will remove the edges inside the polygons)
    * Enhancement: Global layout properties supported as well. Layout properties can be edited by selecting
      "User Properties" in "File/Layout Properties". They are written to OASIS. Writing to GDS2 is optional since
      that may create compatibility issues with other tools.
    * Enhancement: The OASIS writer will now produce some standard properties: "S_TOP_CELL", "S_BOUNDING_BOX",
      "S_CELL_OFFSET", "S_MAX_SIGNED_INTEGER_WIDTH", "S_MAX_UNSIGNED_INTEGER_WIDTH" and "S_BOUNDING_BOXES_AVAILABLE".
    * Enhancement: User properties of cells are available in cell context menu too: this way there can be
      browsed in non-editable mode too.
    * Enhancement: "Degenerated" polygons (one or two points) can be created in scripts now when using "raw" mode.
      Such polygons are useful in the context of Minkowsky sums for example.
    * Bugfix: The application crashed when the macro currently running was deleted.
    * Enhancement: "Search & replace" now is available in viewer mode too, but without the ability to replace or
      delete.
    * Enhancement: In menu paths, appending a "+" to the path means to add something after that item.
    * Bugfix: Guiding shapes are only selected if the PCell corresponding to them is visible.
    * Enhancement: there is a clearer indication now that 'Show layers without fill' is on.
    * Enhancement: a new mode is available in which PCell content can be selected too. When editing things inside
      PCells however, PCell recomputation may revert these edits.
      The mode is found in "File/Setup", "Application/Selection" page.
    * Enhancement: Edge set boolean operations have been too selective with respect to almost-parallel edges.
      Now a tolerance is applied allowing edges to deviate by ~1 dbu.
    * Enhancement: Search & replace: texts, paths and boxes are exported into report databases.
      Shapes and instances are shown in micron coordinates and as seen in top.
    * Enhancement: "Apply all" in properties dialogs: with this function, a specific change is applied to
      all shapes or instances of the same class. For example a path width change is applied to all other selected
      paths. The change will be applied smartly (hopefully), so that the intention of the change is preserved.
      For example a left edge shift for a box will be turned into the same shift for all other selected boxes.
    * Enhancement: multiple categories can be selected in the marker browser now.
    * Enhancement: the instance properties page now shows the cell dimensions (which are not editable of course).
    * Enhancement: box property editing is less tedious - the left and right coordinates will now swap if the order
      changes and the mode (width/center or coordinates) is maintained.
    * Enhancement: Report databases now support "tagged values" (values with a name) which are shown in the marker
      list. The markers can be sorted by these values, provided they are string or numerical values.
      RVE properties are read as tagged values.


author: matthias@koefferlein.de
changelog:
  - Update to 0.24.2
    * Bugfix: Flip and Rotate function did not work as expected when the view
      was descended into the hierarchy.
    * Enhancement: RBA::BrowserDialog now also accepts a parent parameter
      which are important to better integrate such dialogs into the
      application.
    * Bugfix/enhancement: "klayout_vo.exe" now is a pure viewer application
      again. By calling this executable, the edit functions cannot be
      enabled and the save functions are disabled as well. Under Linux,
      renaming the binary to "klayout_vo" switches KLayout into this
      mode as well.
    * Bugfix: The zoom and selection rectangle can now be dragged outside the
      visible area and still define the zoom or selection rectangle.
    * Bugfix: expressions were not coercing floating-point values consistently:
      The expression "to_i(2)+1.4" rendered 3 instead of 3.4 as expected.
      The sum was treated as an integer sum because the first operand is
      an integer. Now the integer is converted into a floating-point value
      as expected.


author: matthias@koefferlein.de
changelog:
  - Update to 0.24.3
    * Enhancement: PYTHONPATH does not mess up the Windows installation any
      longer. If you want to set the PYTHONPATH for KLayout, use
      KLAYOUT_PYTHONPATH.
    * Bugfix: The oasis_write_std_properties attribute of RBA::SaveLayoutOptions
      did not work as described. To maintain backward compatibility and
      enable the cell bounding box feature, a new attribute called
      oasis_write_cell_bounding_boxes was introduced.
    * Bugfix: "Hide all" only hides the top level layer properties, not the
      members of layer groups.
    * Bugfix: S_BOUNDING_BOX standard properties now appear after CELLNAME
      records in OASIS files as required by the OASIS specification.
    * Bugfix: The unintuitive behavior of the "Writer Options" has been changed.
      Now, the writer options are applied to the saved layout always, not
      just on the first save. Previously, the program remembered the options
      and reused the previous options on following saves. This was quite
      unintuitive since changing the properties did not necessarily affect
      the way files were written.
    * Enhancement: The starting directory for files dialogs is the "Documents"
      folder on Windows now. Not the current directory which is the
      installation directory usually.
    * Bugfix: Signal names are property set for RBA::QListWidget and other
      objects. This enables the use of "indexesChanged" signals and eliminates
      Qt runtime warnings.
    * Bugfix: Library cells were not properly loaded again after reloading
      a layout which used libraries which itself referred to other libraries.
    * Bugfix: The program crashed sometimes when using report databases with
      properties.
    * Bugfix: Layers with a single box rendered wrong results in the DRC's
      size function with strong undersize. The boxes did not vanish as
      expected but instead were inverted.
    * Enhancement: The build now is compatible with Python 2.6.
    * Bugfix: Reading OASIS files in strict mode with cell names consisting
      of a "$" character followed by an integer number (like "$1") sometimes
      messed up the cells.
    * Bugfix: RBA::TilingProcessor could not be used both with tile size and
      tile count set since setting the tile size was resetting the tile
      count and vice versa.


author: matthias@koefferlein.de
changelog:
  - Update to 0.24.4
    * Enhancement: Layer colors are iterated for named layers without
      layer numbers as well. Such layers are created when reading
      DXF files for example and all layers had the same color
      initially. Now, these layers will be assigned different colors.
    * Bugfix: RBA::TilingProcess#threads was not working properly
      when assigning a value of 1.
    * Bugfix: The perimeter computation now has changed to 64 bit numerics
      reducing the risk of numerical overflow. In earlier versions,
      the perimeter computation of integer type shapes (polygons,
      boxes, regions) was performed with 32 bit length which is
      not sufficient to represent total perimeters of full layouts.
    * Bugfix: The OASIS writer's S_TOP_CELL standard property now is
      set to the correct value when using "Save cell as".
    * Bugfix: Some patches are provided for enhanced compatibility with
      MacOS. One MacOS-only bug was related to a crash when re-registering
      of PCell's while developing then.
    * Bugfix: PCell guiding shape parts could not be selected in partial
      editing mode using a drawn selection box.
    * Enhancement: The color of the guiding shapes can now be configured
      individually.
    * Bugfix: OASIS reader was not properly associating CELLNAME properties
      with cells as the standard requires. Instead CELLNAME properties were
      ignored.
    * Bugfix: Strict mode compatibility issues in OASIS writer:
      File level PROPERTY records were not put right at the beginning of the file,
      empty tables were not listed with 0 position, property value strings were
      not referenced by ID and the property modal variables were referenced
      sometimes after name records (specifically CELLNAME with standard
      properties enabled). According to the specification, the name records
      reset these variables so this is not correct. Other readers may report
      errors for such files.
    * Enhancement: OASIS writer file size reduction. Now, the OASIS writer
      will opimize the arrangement of cell array instances so that
      modal variables can be used for a better compaction.
    * Enhancement: During script debugging now the Assistant window is active
      even while the debugger is executing a script. The main window is
      still inactive however to avoid fatal cross-interactions between
      the debugger and the user interface.
    * Bugfix: The Python PCell sample was broken.
    * Bugfix: slowly bending paths have not been displayed correctly.
    * Bugfix: coordinates might have been swapped in the box properties
      page when switching from local to absolute coordinates and
      back.
    * Bugfix: certain ruler styles with independent x and y axis have not
      been displayed properly when using a global transformation.
    * Enhancement: the performance of "Flatten cell" is enhanced significantly
      in cases of many instances.
    * Bugfix: DRC output was producing new layers with an empty layer name
      selector (no major issue, but confusing).


author: matthias@koefferlein.de
changelog:
  - Update to 0.24.5
    * Bugfix: Instance browser was messing up array instances sometimes.
      After browsing instances, in some cases array instances got
      messed up. This specifically happened with OASIS files.
    * Enhancement: Diff tool does not care about text alignment and
      font properties unless in "exact" mode. Previously alignment
      flags and font properties were compared in non-exact mode too
      causing some confusion for example when comparing OASIS vs.
      GDS.
    * Enhancement: XOR on layouts with different database units.
      Previously, the XOR tool refused to run on layouts with
      different database units.
    * Bugfix: The OASIS writer's S_TOP_CELL standard property now will
      correctly use an "n-string" value in strict mode.
    * Bugfix: The OASIS writer bailed out on 1x1 cell arrays.
      Now these pseudo arrays are written as single instances.
    * Bugfix: GUI type support for QVariant.
      RBA/pya did not provide constructors for QVariant from
      GUI types like QColor and QFont. These have been added now.
      The corresponding conversion functions to QColor, QFont etc.
      are provided as well.
    * Bugfix: Problems with QVariant constructor: some feature were not
      usable. For example, a double value could not be passed to
      the constructor. Disambiguators have been provided to solve
      these issues.
    * Enhancement: Cell/Category filter for marker browser. The marker
      browser now has a filter entry box to select specific cells
      or categories.
    * Enhancement: Images are cached now for faster image update.
      Specifically the "fit" image will be cached and if "fit" is
      selected again, the image is restored rather quickly (provided
      the window is not resized). The cache depth can be configured
      in "Setup/Display/Optimization".
    * Bugfix: "Read all other layers" option in LEF/DEF reader was
      potentially assigning GDS layers which have been defined in
      the layer mapping. Now, layers used in the layer map for
      targets are blocked and not used for automatic assignment.
    * Enhancement: The database unit can be configured now in LEF/DEF
      import options. Previously it was fixed to 1 nm.
    * Bugfix: RBA::LayerProperties#id was not always unique as stated
      by the documentation. Specifically not after a file was loaded.


author: matthias@koefferlein.de
changelog:
  - Update to 0.24.6
    * Bugfix: Early delete of plugin object when returning a new object
      from PluginFactory#create_plugin. The returned object was
      not held, so in Ruby the GC could destroy the object. This
      could lead to crashes in applications employing the Plugin API.
    * Bugfix: It was possible to edit read-only macros.
      For example, it was possible to enter new lines in macros
      marked as read-only. However, these changes were not saved.
    * Bugfix: Shift+Tab not working in macro editor.
      On some platforms, Shift+Tab was not working as expected.
      This key combinations was supposed to left-shift a selected
      block an undo indents.
    * Bugfix: Wrong scaling of layers when doing XOR's with layouts
      with different database units.
      This happened when the layouts had different layers and
      "summarize missing layers" was disabled.
    * Bugfix: "Search & Replace" was not working properly if named
      layers were present. Specifically the shape search was not
      working due to an incorrectly formed query.
    * Bugfix: Sizing produced incorrect results in case of slowly
      varying polygon contours. The effect was a contour with
      spiky distortions where two "almost parallel" edges
      connected.
    * Bugfix: The diff tool was not reporting differences correctly when
      layers were present in one layout while they were not present
      in the other. This happened specficially when "Summarize
      missing layers" was disabled.
    * Enhancement: New context mode in marker browser: "Current or Any".
      In this mode, the markers are displayed in the context of the
      current cell. If that is not possible because the markers are
      given for cells outside the cell tree of the current cell, the
      fallback is to show the markers in the current cell as in "Any"
      mode.
    * Enhancement: More consistent behaviour of cell and category filters
      in the marker browser. For example, the category filter is
      now also applied when selecting a node for a certain cell in
      the cell branch and if nested categories are present, the
      category filter is applied smarter - not just on each category.


author: matthias@koefferlein.de
changelog:
  - Update to 0.24.7
    * Bugfix: XOR and different database units:
      With tiling, XOR between two layouts with different database
      units was not working correctly.
    * Enhancements: progress bar shown also for "-z" mode scripts:
      Scripts running in KLayout with the "-z" option (don't
      show main window) were not experiencing progress reporting
      before. Now a small modal window is shown during long-running
      operations that indicates the progress and provides a Cancel
      button to abort the operation.
    * Bugfix: Crash on using "Edit/Make cell":
      This happened sometimes if the selected objects contained
      instances.
    * Bugfix: Invalid behavior of paths with reflecting segments:
      For example a path made of the points (0, 0), (0, 1000)
      and (0, 0) had a reflecting segment which cause some
      computations (for example the bounding box) to return
      invalid results.


author: matthias@koefferlein.de
changelog:
  - Update to 0.24.8
    * Bugfix: XOR and different or big database units:
      With tiling, XOR between two layouts with different database
      units was still not working correctly. Also, when the database unit
      was larger than 1nm, the XOR feature was dropping results sometimes
      when tiling was on.
    * Enhancements: progress bar shown also for "-z" mode scripts:
      The solution of 0.24.7 has been modified to avoid annoying
      progress bar windows popping up in background-window mode:
      Now, progress bar windows will only pop up if an active main
      window is present. This will enable progress bars for scripts that
      open their own main windows but still keep the application GUI-less
      when the script does not do so.
    * Bugfix: Crash on empty panel:
      When "New/Panel" is used a view without a layout is created.
      An attempt to create layout on such panels crashed the application.
    * Bugfix: LEF reader now can read PIN statements including VIA
    * Bugfix: Polygon smoothing was not working properly in some cases
      Previously the smoothing function was sometimes dropping vertexes
      from the polygons.
      Smoothing now does also guarantee not to exceed the given
      distance.
    * Bugfix: Sorting cells by area now sorts cells by name as second choice
      In the previous version, cells with identical area were
      grouped but the order was arbitrary. Now the name is used as
      the second-level sorting criterion which keeps such cells
      sorted by name.


author: matthias@koefferlein.de
changelog:
  - Update to 0.24.9
    * Enhancements: The RBA::Region#smooth function was enhanced to
      give somewhat better results
    * Enhancements: DXF's circle approximation can now also specified
      through an "accuracy" parameter: if less than the number of
      specified points is required to achieve the given accuracy, the
      number is reduced accordingly. This also applies to the polygon
      interpolation of spline and arc curves.
    * Enhancement: RBA integration now is compatible with Ruby 2.3
      which allows building on Ubuntu 16 as well.
    * Enhancement: OASIS files with instance angles >360 were rejected
      before. Now, this has turned into a warning.
    * Bugfix: DEF reader was failing to read MASK/via combinations.
    * Bugfix: The marker browser's "show only rules with errors" option
      was enabled again on sorting of errors.
    * Bugfix: Using Layout objects for inputs didn't work
    * Bugfix: Copying Hierarchy treets containing PCell's made the
      PCell's being turned into static cells.


