LayerProperties setters

Hi all,

It is my very first post in this forum, but I exhausted the possibilities to find the solution in programming reference and previous forum posts (closest related: https://www.klayout.de/forum/comments.php?DiscussionID=332&page=1#Item_9).

My problem is related to usage of setters (e.g. fill_color class LayerProperties)). Despite that in the reference is as python setter listed fill_color, the interpreter is returning an exception (Cannot call a setter on a const reference in LayerProperties.fill_color (Class exceptions.RuntimeError)). I have tried to change the setter for fill_color_, but this is not affecting the UI anyway.

I am providing a snippet of test code. It is designed to change colors of layers upon the dose factor represented as datatype value (EBL related stuff).

import pya
import math
import sys
import colorsys

# Enter your Python code here
#Shape boolean operation testing 
app = pya.Application.instance()
mw = app.main_window()
lv = mw.current_view()
ly = lv.active_cellview().layout()
tc = lv.active_cellview().cell
cv_index = lv.active_cellview().cell_index
dbu = ly.dbu

def getKey(item):
    return item[1]

def ReturnColor(x, arr): #just workaround - should be refined !!! extremely slow
  for i in arr:
    #print "Looking for index {} in {}".format(x, i)
    if i[0] == x:
      #print "found"
      return i[2]
  return -1


#requested data
ReqLayer = 1

all_layers = ly.layer_indices()
#print all_layers

indxDose = []
for layer in all_layers:
  layer_info = ly.get_info(layer)
  #print layer_info
  if layer_info.layer == ReqLayer:
    #print layer_info.datatype
    indxDose.append([layer, layer_info.datatype, 0])

sorted(indxDose, key = getKey) 

for i in range(0, len(indxDose)):
  reqColor = 0.71 * float(i)/len(indxDose)
  r,g,b = colorsys.hls_to_rgb(reqColor, 0.5, 1)
  #print "rgb({},{},{})".format(int(r*255),int(g*255),int(b*255))
  reqColorRGB = (int(r*255)<<16) + (int(g*255)<<8) + int(b*255)
  indxDose[i][2] = reqColorRGB 

Liter = lv.begin_layers()

while not Liter.at_end():
  lp = Liter.current()
  #print lp.layer_index()
  #print "Layer index:{}".format(lp.layer_index())
  if lp.cellview() == cv_index:
    Color = ReturnColor(lp.layer_index(), indxDose)
    if Color != -1:
      print "Color value for index:{} is {}".format(lp.layer_index(), Color)
      print "Color before:{}".format(lp.fill_color)
      print "Color before_:{}".format(lp.fill_color_)
      lp.fill_color = Color
      print "Color after:{}".format(lp.fill_color)
      lp.frame_color_ = 0xFFFFFFFF
      lp.dither_pattern_ = 20
    #else:
      #print "not found"
  Liter.next()

lv.add_missing_layers()

Thank you a lot for any idea.

git@gitlab.com:jakub.sadilek/klayout-raith.git
git@gitlab.com:jakub.sadilek/Klayout-extensions.git

Comments

Sign In or Register to comment.