Assume that I draw a point on the model.active_view, and create another 2 scenes by using different camera settings. I want to get the position of the point by using screen_coords method for each page.
What I current can do is this:
mod.pages.each do |page|
mod.pages.selected_page = page
view = mod.active_model
view.screen_coords(point)
end
But it has some side effects when using mod.pages.selected_page = page
, switch from one page to another will cost some time. After the script was executed, the camera of each page was different from the original one, and it will recover after some seconds.
So is there any way could get the screen coordinates of the point of each page without using mod.pages.selected_page = page
method?
There is only 1 instance of the Sketchup::View
class for a model.
Pages do not have their view
own instance.
Page transitions should be switched off whilst you iterate the pages …
mod = Sketchup.active_model
opts = mod.options['PageOptions']
# Get the previous setting:
prev = opts['ShowTransition']
# Set page transitions off:
opts['ShowTransition']= false
pages = mod.pages
view = mod.active_view
# Save the current scene page:
current_page = pages.selected_page
# Map each scene page to a screen point:
screen_points = pages.map do |page|
pages.selected_page = page
view.screen_coords(point)
end
# Restore the previous page and transition setting:
pages.selected_page= current_page
opts['ShowTransition']= prev
puts screen_points.inspect
3 Likes
Thanks so much, I got tracked by this problem for a long time
I forgot to show that the initial page should be restored after the iteration and before restoring the prev
transition setting.
Added to above snippet …
pages.selected_page= current_page