Vanilla 1.1.4 is a product of Lussumo. More Information: Documentation, Community Support.
1 to 7 of 7
the request can probably be implemented, but the effort will be substantial. The basic approach for implementing a feature that provides mouse interaction is to employ the RBA::Plugin framework. A starting point is the documentation provided for the PluginFactory class and a basic introduction to this concept.
I feel you ask for a emulation of Virtuoso's slice feature. Please consider not keeping the results to yourself but publish them if you think it's useful for others. This is the spirit of open source.
one more suggestion: what about a feature like "separate into inner and outer parts"?
There are already two operations which you can use in order to split a polygon: "Edit/Selection/Intersection" and "Edit/Selection/Subtraction". So imagine you want to keep the right half of a polygon, you could:
Admittedly this is very tedious. But how about combining these instructions into a single operation, i.e "Edit/Selection/Separate Inside+Outside"? Then you do
the result would two polygons - the inside part and the outside part.
What do you think? This feature is just a combination of existing functions - hence should be straightforward to implement.
@Harri: thanks for the suggestion and yes, that's one more option.
I basically wanted to say, that within the framework of the current application it's possible to create a function that probably solves the problem stated. It's just not precisely like L-Edit. Instead of drawing a line you have a draw a mask shape. Within this approach, the solution is a few lines of script:
# This script requires two selections
# * the first selection is the "subject"
# * the second selection (Shift + click on object) is the "mask"
# The script will take all polygons from the subject and
# separate it into parts inside and outside of the mask.
# * as a side effect, the polygons are merged currently
# (solution: pass them separately through the boolean operation)
mw = RBA::Application::instance.main_window
lv = mw.current_view || raise("No layout loaded")
cv_index = nil
layer = nil
mask = RBA::Region::new
subjects = RBA::Region::new
shapes_to_delete = 
lv.each_object_selected do |obj|
if obj.shape.is_box? || obj.shape.is_polygon? || obj.shape.is_path?
poly = obj.shape.polygon.transformed(obj.trans)
if obj.seq == 0
subjects += poly
layer ||= obj.layer
cv_index ||= obj.cv_index
mask += poly
shapes_to_delete << obj.shape
layer || raise("No objects selected")
mask.is_empty? && raise("No mask objects selection (second selection)")
lv.transaction("Separate inside/outside of mask")
inside = subjects & mask
outside = subjects - mask
lv.cellview(cv_index).cell.shapes(layer).insert(inside + outside)
shapes_to_delete.each do |s|
This script can be bound to a menu: if you chose "edit_menu.selection_menu.intersection" it will be put in the "Edit/Selection" menu.