-
Notifications
You must be signed in to change notification settings - Fork 13
/
LB Capture View.py
116 lines (103 loc) · 4.81 KB
/
LB Capture View.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# Ladybug: A Plugin for Environmental Analysis (GPL)
# This file is part of Ladybug.
#
# Copyright (c) 2024, Ladybug Tools.
# You should have received a copy of the GNU Affero General Public License
# along with Ladybug; If not, see <http://www.gnu.org/licenses/>.
#
# @license AGPL-3.0-or-later <https://spdx.org/licenses/AGPL-3.0-or-later>
"""
Capture views of the Rhino scene and save them to your hard drive as as a .png files.
_
This is particularly useful when creating animations and one needs to automate
the capturing of views. Note that images will likely have a Rhino world axes icon
in the lower left of the image unless you go to Options > Grid > and uncheck
"Show world axes icon".
-
Args:
_file_name: The file name, which the image will be saved as. Note that, for
animations, each saved image should have a different name. Otherwise,
the previous image will be overwritten by each successive image.
Unique names for each animation frame can be achieved by using the
animating slider to generate the file name.
_folder_: The folder into which the image file will be written. This should
be a complete path to the folder. If None, the images will be written
to one of the following default locations:
-
Windows - C:/Users/[USERNAME]/ladybug_tools/resources/captured_views/
Mac - /Users/[USERNAME]/ladybug_tools/resources/captured_views/
viewport_: Text for the Rhino viewport name which will be captured. This can
also be a list of viewports in which case multiple views will be
captured. If None, the default will be the active viewport (the
last viewport in which you navigated). Acceptable inputs include:
-
Perspective
Top
Bottom
Left
Right
Front
Back
any view name that has been saved within the Rhino file
width_: Integer for the width of the image to be captured in pixels. If None,
the default is the width of the Rhino viewport currently on the screen.
height_: Integer for the height of the image to be captured in pixels. If None,
the default is the height of the Rhino viewport currently on the screen.
mode_: Text for the display mode of the viewport to be captured.If None, the default
will be the display mode of the active viewport (the last viewport in
which you navigated). Acceptable inputs include:
-
Wireframe
Shaded
Rendered
Ghosted
X-Ray
Technical
Artistic
Pen
transparent_: Boolean to note whether the captured .png file should have a
transparent background. If None or False, the image will have the
Rhino viewport background color.
_capture: Set to "True" to capture the image of the Rhino viewport.
Returns:
file: The file path of the image taken with this component.
"""
ghenv.Component.Name = 'LB Capture View'
ghenv.Component.NickName = 'CaptureView'
ghenv.Component.Message = '1.8.0'
ghenv.Component.Category = 'Ladybug'
ghenv.Component.SubCategory = '4 :: Extra'
ghenv.Component.AdditionalHelpFromDocStrings = '2'
import os
try:
from ladybug.futil import preparedir
from ladybug.config import folders
except ImportError as e:
raise ImportError('\nFailed to import ladybug:\n\t{}'.format(e))
try:
from honeybee.config import folders
default_folder = os.path.join(folders.default_simulation_folder, 'captured_views')
except:
home_folder = os.getenv('HOME') or os.path.expanduser('~')
default_folder = os.path.join(home_folder, 'captured_views')
try:
from ladybug_rhino.grasshopper import all_required_inputs, bring_to_front
from ladybug_rhino.viewport import viewport_by_name, capture_view
except ImportError as e:
raise ImportError('\nFailed to import ladybug_rhino:\n\t{}'.format(e))
if all_required_inputs(ghenv.Component) and _capture:
# ensure the component runs last on the canvas
bring_to_front(ghenv.Component)
# prepare the folder
folder = _folder_ if _folder_ is not None else default_folder
preparedir(folder, remove_content=False)
# get the viewport objects
vp_names = viewport_ if len(viewport_) != 0 else [None]
viewports = [viewport_by_name(vp) for vp in vp_names]
# save the viewports to images
for i, view_p in enumerate(viewports):
f_name = _file_name if len(viewports) == 1 else \
'{}_{}'.format(_file_name, vp_names[i])
file_p = os.path.join(folder, f_name)
fp = capture_view(view_p, file_p, width_, height_, mode_, transparent_)
print(fp)