Skip to content

Instantly share code, notes, and snippets.

@justinline
Created January 8, 2018 18:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save justinline/9727a567a1491ad164d185a4274efdae to your computer and use it in GitHub Desktop.
Save justinline/9727a567a1491ad164d185a4274efdae to your computer and use it in GitHub Desktop.
'''
Prints a cutting list for all linear dims on a layout page - Rhino for Mac
Requires dims to be on unique layer name. Must also select the detail view that dim is scaled on to find scale factor.
'''
import Rhino
import scriptcontext
import System.Guid, System.Drawing.Color
import re
import rhinoscriptsyntax as rs
from collections import Counter
def get_detail_scale():
detail = rs.GetObject("select a detail", rs.filter.detail)
if detail:
detscale = rs.DetailScale(detail)
return 1/detscale
else:
return
def make_dict(dimList):
d = {x:dimList.count(x) for x in dimList}
return d
def pretty_print(dimDict):
print("CUTTING LIST:")
for i in dimDict.items():
print('{} x {}'.format(i[1], i[0]))
print(dimDict)
def sel_layer():
# Prompt for a layer name
layername = scriptcontext.doc.Layers.CurrentLayer.Name
rc, layername = Rhino.Input.RhinoGet.GetString("Name of layer to select objects", True, layername)
if rc!=Rhino.Commands.Result.Success: return rc
# Get all of the objects on the layer. If layername is bogus, you will
# just get an empty list back
rhobjs = scriptcontext.doc.Objects.FindByLayer(layername)
if not rhobjs: Rhino.Commands.Result.Cancel
dimList = []
scale = get_detail_scale() or 1
for obj in rhobjs:
dim = round(obj.Geometry.NumericValue * scale)
if rs.IsLinearDimension(obj):
dimList.append(int(dim))
pretty_print(make_dict(dimList))
scriptcontext.doc.Views.Redraw()
return Rhino.Commands.Result.Success
if __name__=="__main__":
sel_layer()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment