-
0
2
2
-
1
0
7
- eeea6cff-1c6a-4f3a-8e09-07067d8aed19
- Shaded
- 1
-
100;150;0;0
-
100;0;150;0
- 637704113937691375
- text_only_once-ghp_cache_issue.ghx
- 0
-
-556
-32
- 1.25
- 0
- 0
- 1
- GhPython, Version=7.12.21285.17001, Culture=neutral, PublicKeyToken=null
- 7.12.21285.17001
- 00000000-0000-0000-0000-000000000000
- 9
- 410755b1-224a-4c1e-a407-bf32fb45ea7e
- 00000000-0000-0000-0000-000000000000
- GhPython Script
- """Prompts user to pick or select one or more objects.
Parameters:
message (str, optional): a prompt or message.
filter (number, optional): The type(s) of geometry (points, curves, surfaces, meshes,...)
that can be selected. Object types can be added together to filter
several different kinds of geometry. use the filter class to get values
Value Description
0 All objects (default)
1 Point
2 Point cloud
4 Curve
8 Surface or single-face brep
16 Polysurface or multiple-face
32 Mesh
256 Light
512 Annotation
4096 Instance or block reference
8192 Text dot object
16384 Grip object
32768 Detail
65536 Hatch
131072 Morph control
262144 SubD
134217728 Cage
268435456 Phantom
536870912 Clipping plane
1073741824 Extrusion
group (bool, optional): Honor object grouping. If omitted and the user picks a group,
the entire group will be picked (True). Note, if filter is set to a
value other than 0 (All objects), then group selection will be disabled.
preselect (bool, optional): Allow for the selection of pre-selected objects.
select (bool, optional): Select the picked objects. If False, the objects that are
picked are not selected.
objects ([guid, ...]): list of objects that are allowed to be selected
minimum_count, maximum_count(number): limits on number of objects allowed to be selected
custom_filter (str, optional): Calls a custom function in the script and passes the Rhino Object, Geometry, and component index and returns true or false indicating if the object can be selected
Returns:
list(guid, ...): identifiers of the picked objects
Example:
import rhinoscriptsyntax as rs
objectIds = rs.GetObjects("Pick some curves", rs.filter.curve)
for id in objectIds: print "Object identifier:", id
See Also:
GetCurveObject
GetObject
GetSurfaceObject
"""
__author__ = "gbourgeois"
__version__ = "2021.09.30"
import rhinoscriptsyntax as rs
if reset:
objects = rs.GetObjects()
guids = [str(o) for o in objects]
print(guids)
- Prompts user to pick or select one or more objects.
Parameters:
message (str, optional): a prompt or message.
filter (number, optional): The type(s) of geometry (points, curves, surfaces, meshes,...)
that can be selected. Object types can be added together to filter
several different kinds of geometry. use the filter class to get values
Value Description
0 All objects (default)
1 Point
2 Point cloud
4 Curve
8 Surface or single-face brep
16 Polysurface or multiple-face
32 Mesh
256 Light
512 Annotation
4096 Instance or block reference
8192 Text dot object
16384 Grip object
32768 Detail
65536 Hatch
131072 Morph control
262144 SubD
134217728 Cage
268435456 Phantom
536870912 Clipping plane
1073741824 Extrusion
group (bool, optional): Honor object grouping. If omitted and the user picks a group,
the entire group will be picked (True). Note, if filter is set to a
value other than 0 (All objects), then group selection will be disabled.
preselect (bool, optional): Allow for the selection of pre-selected objects.
select (bool, optional): Select the picked objects. If False, the objects that are
picked are not selected.
objects ([guid, ...]): list of objects that are allowed to be selected
minimum_count, maximum_count(number): limits on number of objects allowed to be selected
custom_filter (str, optional): Calls a custom function in the script and passes the Rhino Object, Geometry, and component index and returns true or false indicating if the object can be selected
Returns:
list(guid, ...): identifiers of the picked objects
Example:
import rhinoscriptsyntax as rs
objectIds = rs.GetObjects("Pick some curves", rs.filter.curve)
for id in objectIds: print "Object identifier:", id
See Also:
GetCurveObject
GetObject
GetSurfaceObject
-
1124
182
-
558
826
- true
- false
- 1
- false
- e8dc88d1-23f0-4c53-b92b-b3cbd41a725e
- false
- true
- GhPython Script
- GetObjects
-
364
75
102
85
-
412
118
- 1
- 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2
- 2
- 3ede854e-c753-40eb-84cb-b48008f14fd4
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- true
- Script variable Python
- dab48d3d-6268-4352-8471-a791e6f670cc
- reset
- reset
- true
- 0
- true
- 978fa713-bd32-4c79-9b6f-ad1bde1f9d07
- 1
- d60527f5-b5af-4ef6-8970-5f96fe412559
-
366
77
31
81
-
383
117.5
- The execution information, as output and error streams
- e92c161b-9756-4513-8aba-a415844b786b
- out
- out
- false
- 0
-
427
77
37
40
-
445.5
97.25
- Script variable Python
- 56e1c803-d79a-4138-8f3b-9ec0108fd974
- guids
- guids
- false
- 0
-
427
117
37
41
-
445.5
137.75
- 2e78987b-9dfb-42a2-8b76-3923ac8bd91a
- Boolean Toggle
- Boolean (true/false) toggle
- 978fa713-bd32-4c79-9b6f-ad1bde1f9d07
- Boolean Toggle
- Toggle
- false
- 0
- true
-
218
106
104
22
- 410755b1-224a-4c1e-a407-bf32fb45ea7e
- 00000000-0000-0000-0000-000000000000
- GhPython Script
- """Connect the RhinoDoc with scripting
"""
__author__ = "gbourgeois"
__version__ = "2021.10.21"
import Rhino
import scriptcontext as sc
sc.doc = Rhino.RhinoDoc.ActiveDoc
- Connect the RhinoDoc with scripting
-
128
128
-
741
702
- true
- true
- false
- 9c70b841-37d9-4261-98b8-7b883b3a6345
- false
- true
- GhPython Script
- Python
-
313
16
28
28
-
327
30
- 0
- 0
- 410755b1-224a-4c1e-a407-bf32fb45ea7e
- 00000000-0000-0000-0000-000000000000
- GhPython Script
- """Adds a text string to the document
Parameters:
text (str): the text to display
point_or_plane (point|plane): a 3-D point or the plane on which the text will lie.
The origin of the plane will be the origin point of the text
height (number, optional): the text height
font (str, optional): the text font
font_style (number, optional): any of the following flags
0 = normal
1 = bold
2 = italic
3 = bold and italic
justification (number, optional): text justification. Values may be added to create combinations.
1 = Left
2 = Center (horizontal)
4 = Right
65536 = Bottom
131072 = Middle (vertical)
262144 = Top
Returns:
guid: identifier for the object that was added to the doc on success
None: on failure
Example:
import rhinoscriptsyntax as rs
point = rs.GetPoint("Pick point")
if point: rs.AddText("Hello Rhino!", point)
See Also:
IsText
"""
guid = None
height=1.0
font=None
font_style=0
justification=None
from rhinoscriptsyntax import rhutil
import Rhino
import scriptcontext
import System
if not text: raise ValueError("text invalid")
if not isinstance(text, str): text = str(text)
point = rhutil.coerce3dpoint(point_or_plane)
plane = None
if not point: plane = rhutil.coerceplane(point_or_plane, True)
if not plane:
plane = scriptcontext.doc.Views.ActiveView.ActiveViewport.ConstructionPlane()
plane.Origin = point
if font != None and type(font) != str:
raise ValueError("font needs to be a quartet name")
bold = (1==font_style or 3==font_style)
italic = (2==font_style or 3==font_style)
ds = scriptcontext.doc.DimStyles.Current
if font == None:
qn = ds.Font.QuartetName
quartetBoldProp = ds.Font.Bold
quartetItalicProp = ds.Font.Italic
else:
qn = font
quartetBoldProp = False
quartetItalicProp = False
f = Rhino.DocObjects.Font.FromQuartetProperties(qn, quartetBoldProp, quartetItalicProp)
if f == None:
print("font error: there is a problem with the font {} and cannot be used to create a text entity".format(font))
raise scriptcontext.errorhandler()
te = Rhino.Geometry.TextEntity.Create(text, plane, ds, False, 0, 0)
te.TextHeight = height
if font != None:
te.Font = f
if bold != quartetBoldProp:
if Rhino.DocObjects.Font.FromQuartetProperties(qn, bold, False) == None:
print("'{}' does not have a 'bold' property so it will not be set.".format(qn))
else:
te.SetBold(bold)
if italic != quartetItalicProp:
if Rhino.DocObjects.Font.FromQuartetProperties(qn, False, italic) == None:
print("'{}' does not have an 'italic' property so it will not be set.".format(qn))
else:
te.SetItalic(italic)
if justification is not None:
h_map = [(1,0), (2,1), (4,2)]
v_map = [(65536,5), (131072,3), (262144,0)]
def getOneAlignFromMap(j, m, e):
lst = []
for k, v in m:
if int(j) & k:
lst.append(v)
return System.Enum.ToObject(e, lst[0]) if lst else None
h = getOneAlignFromMap(justification, h_map, Rhino.DocObjects.TextHorizontalAlignment)
if h != None:
te.TextHorizontalAlignment = h
v = getOneAlignFromMap(justification, v_map, Rhino.DocObjects.TextVerticalAlignment)
if v != None:
te.TextVerticalAlignment = v
id = scriptcontext.doc.Objects.Add(te);
if id==System.Guid.Empty: raise ValueError("unable to add text to document")
scriptcontext.doc.Views.Redraw()
guid = id
- Adds a text string to the document
Parameters:
text (str): the text to display
point_or_plane (point|plane): a 3-D point or the plane on which the text will lie.
The origin of the plane will be the origin point of the text
height (number, optional): the text height
font (str, optional): the text font
font_style (number, optional): any of the following flags
0 = normal
1 = bold
2 = italic
3 = bold and italic
justification (number, optional): text justification. Values may be added to create combinations.
1 = Left
2 = Center (horizontal)
4 = Right
65536 = Bottom
131072 = Middle (vertical)
262144 = Top
Returns:
guid: identifier for the object that was added to the doc on success
None: on failure
Example:
import rhinoscriptsyntax as rs
point = rs.GetPoint("Pick point")
if point: rs.AddText("Hello Rhino!", point)
See Also:
IsText
-
-1359
-9
-
558
826
- true
- false
- 1
- false
- 994af845-c8db-4167-8070-9f485e7e035b
- false
- true
- GhPython Script
- AddText
-
819
102
145
69
-
915
137
- 2
- 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2
- 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2
- 2
- 3ede854e-c753-40eb-84cb-b48008f14fd4
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- true
- Script variable Python
- 72abffcb-8169-446b-9470-b53b06671b81
- text
- text
- true
- 0
- true
- 68123ab0-9850-4b92-a9d1-bb693aa26847
- 1
- 37261734-eec7-4f50-b6a8-b8d1f3c4396b
-
821
104
79
32
-
862
120.25
- true
- Script variable GetObjects
- 9ae6b4c1-058a-4e3f-9a00-721db592f391
- x
- point_or_plane
- true
- 0
- true
- 330f0289-8a4e-4d84-859e-2d6121622f30
- 1
- 87f87f55-5b71-41f4-8aea-21d494016f81
-
821
136
79
33
-
862
152.75
- The execution information, as output and error streams
- 446f85bc-b527-4a7b-b068-a3249106657c
- out
- out
- false
- 0
-
930
104
32
32
-
946
120.25
- Script variable Python
- 151081d1-4342-4332-bea1-281b29801203
- guids
- guid
- false
- 0
-
930
136
32
33
-
946
152.75
- 410755b1-224a-4c1e-a407-bf32fb45ea7e
- 00000000-0000-0000-0000-000000000000
- GhPython Script
- """Prompts user to pick or select one or more objects.
Parameters:
message (str, optional): a prompt or message.
filter (number, optional): The type(s) of geometry (points, curves, surfaces, meshes,...)
that can be selected. Object types can be added together to filter
several different kinds of geometry. use the filter class to get values
Value Description
0 All objects (default)
1 Point
2 Point cloud
4 Curve
8 Surface or single-face brep
16 Polysurface or multiple-face
32 Mesh
256 Light
512 Annotation
4096 Instance or block reference
8192 Text dot object
16384 Grip object
32768 Detail
65536 Hatch
131072 Morph control
262144 SubD
134217728 Cage
268435456 Phantom
536870912 Clipping plane
1073741824 Extrusion
group (bool, optional): Honor object grouping. If omitted and the user picks a group,
the entire group will be picked (True). Note, if filter is set to a
value other than 0 (All objects), then group selection will be disabled.
preselect (bool, optional): Allow for the selection of pre-selected objects.
select (bool, optional): Select the picked objects. If False, the objects that are
picked are not selected.
objects ([guid, ...]): list of objects that are allowed to be selected
minimum_count, maximum_count(number): limits on number of objects allowed to be selected
custom_filter (str, optional): Calls a custom function in the script and passes the Rhino Object, Geometry, and component index and returns true or false indicating if the object can be selected
Returns:
list(guid, ...): identifiers of the picked objects
Example:
import rhinoscriptsyntax as rs
objectIds = rs.GetObjects("Pick some curves", rs.filter.curve)
for id in objectIds: print "Object identifier:", id
See Also:
GetCurveObject
GetObject
GetSurfaceObject
"""
__author__ = "gbourgeois"
__version__ = "2021.09.30"
import rhinoscriptsyntax as rs
if reset:
objects = rs.GetObjects()
guids = [str(o) for o in objects]
print(guids)
- Prompts user to pick or select one or more objects.
Parameters:
message (str, optional): a prompt or message.
filter (number, optional): The type(s) of geometry (points, curves, surfaces, meshes,...)
that can be selected. Object types can be added together to filter
several different kinds of geometry. use the filter class to get values
Value Description
0 All objects (default)
1 Point
2 Point cloud
4 Curve
8 Surface or single-face brep
16 Polysurface or multiple-face
32 Mesh
256 Light
512 Annotation
4096 Instance or block reference
8192 Text dot object
16384 Grip object
32768 Detail
65536 Hatch
131072 Morph control
262144 SubD
134217728 Cage
268435456 Phantom
536870912 Clipping plane
1073741824 Extrusion
group (bool, optional): Honor object grouping. If omitted and the user picks a group,
the entire group will be picked (True). Note, if filter is set to a
value other than 0 (All objects), then group selection will be disabled.
preselect (bool, optional): Allow for the selection of pre-selected objects.
select (bool, optional): Select the picked objects. If False, the objects that are
picked are not selected.
objects ([guid, ...]): list of objects that are allowed to be selected
minimum_count, maximum_count(number): limits on number of objects allowed to be selected
custom_filter (str, optional): Calls a custom function in the script and passes the Rhino Object, Geometry, and component index and returns true or false indicating if the object can be selected
Returns:
list(guid, ...): identifiers of the picked objects
Example:
import rhinoscriptsyntax as rs
objectIds = rs.GetObjects("Pick some curves", rs.filter.curve)
for id in objectIds: print "Object identifier:", id
See Also:
GetCurveObject
GetObject
GetSurfaceObject
-
1124
182
-
558
826
- true
- false
- 1
- false
- fd766213-0f1b-4197-8671-5a202a90ccd8
- false
- true
- GhPython Script
- GetObjects
-
60
63
102
85
-
108
106
- 1
- 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2
- 2
- 3ede854e-c753-40eb-84cb-b48008f14fd4
- 8ec86459-bf01-4409-baee-174d0d2b13d0
- true
- Script variable Python
- a437f376-5abf-43c2-8d80-bdd286a6d85a
- reset
- reset
- true
- 0
- true
- 978fa713-bd32-4c79-9b6f-ad1bde1f9d07
- 1
- d60527f5-b5af-4ef6-8970-5f96fe412559
-
62
65
31
81
-
79
105.5
- The execution information, as output and error streams
- 05752243-7869-4be7-b8f5-707a38c286aa
- out
- out
- false
- 0
-
123
65
37
40
-
141.5
85.25
- Script variable Python
- f4137375-eaea-4a68-aa19-d04a0810f7bf
- guids
- guids
- false
- 0
-
123
105
37
41
-
141.5
125.75
- 59e0b89a-e487-49f8-bab8-b5bab16be14c
- Panel
- A panel for custom notes and text values
- 68123ab0-9850-4b92-a9d1-bb693aa26847
- Panel
- false
- 0
- 0
- only once
-
696
99
82
20
- 0
- 0
- 0
-
696.0729
99.83011
-
255;255;255;90
- true
- true
- true
- false
- false
- true
- faf6e3bb-4c84-4cbf-bd88-6d6a0db5667a
- Guid
- Contains a collection of Globally Unique Identifiers
- de655f09-997e-406f-b6e7-670fb8401d3a
- Guid
- ID
- false
- 56e1c803-d79a-4138-8f3b-9ec0108fd974
- 1
-
503
163
50
24
-
528.6879
175.8117
- 4f8984c4-7c7a-4d69-b0a2-183cbb330d20
- Plane
- Contains a collection of three-dimensional axis-systems
- true
- 330f0289-8a4e-4d84-859e-2d6121622f30
- Plane
- Pln
- false
- ca8a10d8-4ad2-44c4-ac62-426047c022e6
- 1
-
665
203
50
24
-
690.7187
215.4842
- af9cdb9d-9617-4827-bb3c-9efd88c76a70
- Box Properties
- Get some properties of a box
- true
- 38e81093-5b91-4704-ae3b-2b5c99db1cab
- Box Properties
- BoxProp
-
572
147
65
104
-
602
199
- Box to analyze
- d02dfacc-b2fd-4e4b-b51b-b245666b7a97
- Box
- B
- false
- de655f09-997e-406f-b6e7-670fb8401d3a
- 1
-
574
149
13
100
-
582
199
- Center point of box
- ca8a10d8-4ad2-44c4-ac62-426047c022e6
- Center
- C
- false
- 0
-
617
149
18
20
-
626
159
- Diagonal vector of box
- d1fccefb-b48c-405e-b753-512720c1e782
- Diagonal
- D
- false
- 0
-
617
169
18
20
-
626
179
- Area of box
- dc9bc978-8027-41a1-b54c-5e736d809c1b
- Area
- A
- false
- 0
-
617
189
18
20
-
626
199
- Volume of box
- 0fd17af3-6a6e-43b8-9428-d751443ce6fd
- Volume
- V
- false
- 0
-
617
209
18
20
-
626
219
- Degeneracy of box
- 0bd0de25-e9d2-4acd-a370-e765f2c762bb
- Degeneracy
- d
- false
- 0
-
617
229
18
20
-
626
239
-
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