forked from CADacombs/rhinopython
-
Notifications
You must be signed in to change notification settings - Fork 0
/
xNurbsCurve_selectNonUniform.py
64 lines (50 loc) · 1.88 KB
/
xNurbsCurve_selectNonUniform.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
"""
190610: Created, starting with another script.
"""
import Rhino
import Rhino.DocObjects as rd
import Rhino.Geometry as rg
import scriptcontext as sc
import xKnotList
def main(bEcho=True, bDebug=False):
"""
"""
# Custom geometry filter to only select non-NurbsCurve wires.
def nurbsCurveGeometryFilter(rhObject, geom, compIdx):
if not isinstance(geom, rg.Curve): return False
return geom.GetType() == rg.NurbsCurve
Rhino.RhinoApp.SetCommandPrompt("Searching ...")
gObjs_Preselected = [rdObj.Id for rdObj in sc.doc.Objects.GetSelectedObjects(includeLights=False, includeGrips=False)]
gCrvs_Target = []
iter = rd.ObjectEnumeratorSettings()
iter.NormalObjects = True
iter.LockedObjects = False
iter.IncludeLights = False
iter.IncludeGrips = False
for rdRhinoObject in sc.doc.Objects.GetObjectList(iter):
if rdRhinoObject.Id in gObjs_Preselected:
continue
if rdRhinoObject.ObjectType != rd.ObjectType.Curve:
continue
rgCrv = rdRhinoObject.CurveGeometry
sCrvType = rgCrv.GetType().Name
if sCrvType == 'NurbsCurve':
if not xKnotList.isUniform(rgCrv.Knots):
gCrvs_Target.append(rdRhinoObject.Id)
rgCrv.Dispose()
ct_Selected = 0
sc.doc.Views.RedrawEnabled = False
for gCrv in gCrvs_Target:
if sc.doc.Objects.Select(gCrv):
ct_Selected += 1
sc.doc.Views.RedrawEnabled = True
if bEcho:
if gCrvs_Target:
s = "{} curve{} added to selection.".format(
ct_Selected,
'' if ct_Selected == 1 else 's')
print s
else:
print "\nNo curves added to selection."
return gCrvs_Target
if __name__ == '__main__': main(bEcho=bool(1), bDebug=bool(0))