It looks like you're new here. If you want to get involved, click one of these buttons!
Hello, I am trying to get the image of each shape in the layout for a specific layer. I could actually achieve that by using
lv.zoom_box(pya.DBox((l/dbu),(b/dbu), (r/dbu),(t/dbu)))
image_path = os.path.join(image_location, file_name + ".png")
lv.save_image(image_path,image_width,image_height)
However, I guess, I need to use Qimage because later I want to add the center coordinates of each shape on the image as a text.
I try the following but it fails to successfully write the image
my_q_image=lv.get_image_with_options (640, 480,1,0,0, pya.DBox(l/dbu, b/dbu, r/dbu, t/dbu),1)
check=my_q_image.save(image_path,'0',-1) #returns false if fail to write the image
print(check) #it is false :(
Here is my full code. Thanks in advance! (Note: If you could also provide the code for writing text, I would really appreciate!)
import pya
import os
mylayout = pya.Layout()
path=r'C:\Users\ACER\Desktop\Images\Cell4.oas'
image_location=r'C:\Users\ACER\Desktop\Images'
image_width=480
image_height=640
dbu=1000
lmap = mylayout.read(path)
app = pya.Application.instance()
mw = app.main_window()
mw.load_layout(path,0) #load the layout to the mainwindow so that you can see it
lv = mw.current_view()
mycell=mylayout.cell(0) # is a pointer to the 'cell' object (You can also refer to cell object with its name like: a=mylayout.cell(‘TOP’)
shapes = mycell.shapes(0) #iterate through all shapes in a given layer for a given cell
counter=0
for i in shapes.each():
#print(i.box_center) #center coordinates of of each box shape
#print(i.box) #bottom x , bottom y, upper x, upper y coordinates of the shape
l=i.box.left
b=i.box.bottom
r=i.box.right
t=i.box.top
counter=counter+1
file_name='shape'+str(counter) #makes file name as shape1, shape2 ...
image_path = os.path.join(image_location, file_name + ".png")
#lv.zoom_box(pya.DBox((l/dbu),(b/dbu), (r/dbu),(t/dbu))) #If you uncomment the following three lines it will work but then how to add a text?
#image_path = os.path.join(image_location, file_name + ".png")
#lv.save_image(image_path,image_width,image_height)
my_q_image=lv.get_image_with_options (640, 480,1,0,0, pya.DBox(l/dbu, b/dbu, r/dbu, t/dbu),1)
check=my_q_image.save(image_path,'0',-1) #returns false if fail to write the image
print(check) #it is false :(
Comments
Hi, Ege!
I tried next code on 0.26.4 on Linux and it worked for me:
Thanks for the answer eugene!
The second parameter to "QImage#save" should either be omitted or set to an empty string. 0 is a misleading because in C++ it's a "(const char *)0". There is no such thing in Python, but an empty string serves the same purpose.
Another symptom of automatic translation of the API.
Matthias