I’m trying to automate an external CAM plugin I have through Grasshopper. Each operation I’m trying to automate requires me to input a surface, a surface edge, and a curve from the main Rhino doc. (I have potentially hundreds or thousands of surfaces work through in a given file which is why I want to automate).
I have generated pairs of matching named surfaces and closed curves on a named layer. The script grabs the the pair of GUIDs and names for the matching surfaces and curves. (For example data looks like:
[(('000_dsurfaces_srf', '312664e8-7a71-465a-ab99-0d17a72d1eb4'), ('000_dsurfaces_crv', '36064a53-ff8f-4e1d-90cf-133a2ec6275e')), (('001_dsurfaces_srf', '581d9b2b-4b4a-45f2-a8cd-3e8fd97c30d1'), ('001_dsurfaces_crv', '35468a3c-6e46-4fa1-acdf-0a4b52a2f04e'))]
What I need to do is:
- select a surface
- hit Enter
- select any one of the surface edges from the above surface
- hit enter
- select a curve
- hit enter twice.
I have GUIDs and Object names of the surfaces and curves I need, but I can’t figure out how to select one of the surface’s edges. Is it possible?
(Currently the plugin only works in Rhino 5, but I have both Rhino 5 & 6).
import rhinoscriptsyntax as rs import scriptcontext as sc import Rhino #Inputs: active, layer (layer name) if active: sc.doc = Rhino.RhinoDoc.ActiveDoc objects = rs.ObjectsByLayer(layer) names =  objs =  for obj in objects: name = rs.ObjectName(obj) names.append(name) objs.append(str(obj)) geoIDs = [(names[i], objs[i]) for i in range(0, len(objs))] geoIDs.sort() names = (zip(geoIDs[1::2], geoIDs[::2])) for c, (srf, crv) in enumerate(names): if c == 0: # temporary to get the script working with one line of data. print(c, srf, crv) rs.Command("~_-JCAM_AddCustomOperation _D " + "_-SelID " + srf + " _Enter _-SelID " + crv) ## still haven't quite figured out the rest of this line... else: # temp break # temp active = True else: active = False