@version 2.2 @warnings @script modeler /* script for converting splines to 2pt poly chain guides for Sasquatch or SasLite */ // steve@hurleyworks.com main { //_______________ requestor stuff _______________// col = 50; row = 30; offset = 35; segments = 8; rootname = "root"; hairname = "hair"; surfaces = 1; tip = 100; extrude = 1; reduce = 0; reqbegin("Make Guides 6.5b version 2.0 4/28/01"); reqsize(340,335); c1 = ctlminislider("# of segments",segments,1,100); ctlposition(c1,col+31,row); c2 = ctlstring("Base name ",rootname); ctlposition(c2,col+42,row + offset); c3 = ctlstring("Hair name",hairname); ctlposition(c3,col+50,row + (2*offset)); c4 = ctlminislider("# of random surfaces",surfaces,1,100); ctlposition(c4,col - 2,row + (3*offset)); c5 = ctlminislider("Tip hair %",tip,0,100); ctlposition(c5,col+52,row + (4*offset)); c6 = ctlchoice("Extrude type",extrude,@"KNOTS","LENGTHS"@); ctlposition(c6,col+37,row + (5*offset)); c7 = ctlminislider("Random reduction %",reduce,0,100); ctlposition(c7,col,row + (6*offset)); return if !reqpost(); segments = getvalue(c1); rootname= getvalue(c2); hairname = getvalue(c3); surfaces = getvalue(c4); tip = getvalue(c5)/100; extrude = getvalue(c6); reduce = getvalue(c7)/100; reqend(); selmode(USER); //____________layer stuff_____________// fg = lyrfg(); bg = lyrbg(); empty = lyrempty(); pnt_lyr = empty[1]; spln_lyr = empty[2]; worklayer = empty[3]; plant_lyr = empty[4]; copy(); lyrsetfg(worklayer); paste(); // see if there's anything here that's not a curve // if(!editbegin()){ error("need some geometry here");return;} x = 0; foreach(p,polygons) { ++x; polyID += p; if(!polyID[x].isCurve()) { non_curve = 1; break; } if(non_curve) break; } editend(); // cut the non curves // if(non_curve) { selpolygon(SET,CURVE); selinvert(); cut(); } polyID = nil; // reset this guy before using again // if(!editbegin()){ error("need some splines");return;} splines = Mesh(); count = splines.polygonCount(worklayer); foreach(p,polygons) polyID += p; moninit(count,"...making guides"); for(x = 1;x <= count;++x) { makeit = randu(); if(makeit <= reduce) continue; // bail out of the loop if reduction hits firstpnt = splines.vertex(polyID[x],1); firstpnt_pos = splines.position(firstpnt); editend(); selpolygon(SET,POLYID,polyID[x]); copy(); lyrsetfg(spln_lyr); paste(); mergepoints(); lyrsetfg(pnt_lyr); lyrsetbg(spln_lyr); editbegin(); hairname_n = nil; hairname_n = random(1,surfaces); hairnames = hairname + hairname_n; if(surfaces == 1) hairnames = hairname; basehair = hairnames + "_base"; pntID = addpoint(firstpnt_pos); addpolygon(pntID,rootname); addpolygon(pntID,hairnames); editend(); selpolygon(SET,SURFACE,hairnames); railextrude(segments,extrude); mergepoints(); //______________rename for tip bias______________ // if(tip != 1) { pgonID = nil; editbegin(); foreach(p,polygons) pgonID += p; base_segments = segments - (tip * segments); base_segments = round(base_segments,0); for(b = 2;b <= base_segments; ++b) { polysurface(pgonID[b],basehair); } editend(); } cut(); lyrsetfg(plant_lyr); paste(); lyrsetfg(spln_lyr); cut(); lyrsetfg(worklayer); monstep(); } monend(); editend(); cut(); lyrsetfg(plant_lyr); }