def create_end_caps(self, corners, vector): srf = rs.AddPolyline( [corners[0], corners[1], corners[2], corners[3], corners[0]]) curve = rs.AddCurve( [corners[0], rs.PointAdd(corners[0], rs.VectorScale(vector, 3))]) return rs.AddSweep1(curve, [srf])
def sweepSec(crv, plane, vec): rect = profileXform(rectFrame(), plane, vec) sweep = rs.AddSweep1(crv, rect, closed=True) sweep = rs.CapPlanarHoles(sweep) if rect: rs.DeleteObjects(rect) if crv: rs.DeleteObjects(crv) return sweep
def sweepMult(): crvProfiles = rs.GetObjects("select Curves to Sweep", 4); #get rail profile crvRail = rs.GetObject("select rail to sweep through",4); #for each curve in crvProfiles, sweep the curve for crv in crvProfiles: if(rs.IsCurve(crv)): rs.AddSweep1(crvRail,crv);
def sweepSec(crv, plane, vec): # rs.AddPlaneSurface( plane, 1, 1 ) rect = profile2(plane, vec) sweep = rs.AddSweep1(crv, rect, closed=True) sweep = rs.CapPlanarHoles(sweep) if rect: rs.DeleteObjects(rect) if crv: rs.DeleteObjects(crv) return sweep
def renderSubTree(self, startRadius, growthFactor, curveDegree): #start radius is the radius at the tip of the smallest branches #growth Factor is the factor by which the start radius grows #as it moves towards the root, node by node #curveDegree is the degree of the curves of the tree treeID = rs.AddGroup() while True: deepCh = self.deepestChild() startNode = deepCh[0] if startNode == None: #this is the case where the whole tree is rendered #later return the group id of the group #that contains the whole tree from here return treeID curNode = startNode nodeList = [startNode] while (not curNode.parent is None) and (not curNode.isDone): nodeList.append(curNode.parent) curNode = curNode.parent posList = [] i = 0 while i < len(nodeList): posList.append(nodeList[i].pos) i += 1 curveID = rs.AddCurve(posList,curveDegree) curDom = rs.CurveDomain(curveID) node1 = rs.EvaluateCurve(curveID, curDom[0]) node2 = rs.EvaluateCurve(curveID, curDom[1]) tan1 = rs.CurveTangent(curveID, curDom[0]) tan2 = rs.CurveTangent(curveID, curDom[1]) plane1 = rs.PlaneFromNormal(node1, tan1) plane2 = rs.PlaneFromNormal(node2, tan2) radius1 = startRadius radius2 = (growthFactor**len(nodeList))*startRadius circles = [] circles.append(rs.AddCircle(plane1, radius1)) circles.append(rs.AddCircle(plane2, radius2)) branch = rs.AddSweep1(curveID, circles, True) rs.AddObjectToGroup(branch, treeID) rs.DeleteObjects(circles) rs.DeleteObject(curveID) for nd in nodeList: nd.isDone = True
def loft_profiles_aux(profiles, rails, is_ruled, is_closed): profiles_refs = list([profile.realize()._ref for profile in profiles]) rails_refs = list([rail.realize()._ref for rail in rails]) if len(rails_refs) == 0: return singleton( rh.AddLoftSrf(profiles_refs, None, None, 2 if is_ruled else 0, 0, 0, is_closed)) elif len(rails_refs) == 1: return singleton(rh.AddSweep1(rails_refs[0], profiles_refs)) elif len(rails_refs) == 2: return singleton(rh.AddSweep2(rails_refs, profiles_refs)) elif len(rails_refs) > 2: print('Warning: Rhino only supports two rails but were passed {0}'. format(len(rails))) return singleton(rh.AddSweep2(rails_refs[:2], profiles_refs)) else: #Remove? raise RuntimeError( 'Rhino only supports two rails but were passed {0}'.format( len(rails)))
def sweep_path_curve(path, profile, rotation, scale): def transf_t(t, r, s): plane = rh.CurvePerpFrame(path, rh.CurveParameter(path, t)) xform = rh.XformChangeBasis(plane, geo.Plane.WorldXY) xform = rh.XformMultiply(xform, rh.XformScale(s)) xform = rh.XformMultiply( xform, geo.Transform.Rotation(r, geo.Vector3d(0, 0, 1), rawu0)) return rh.TransformObject(profile, xform, True) if rotation == 0 and scale == 1: profiles = [transf_t(0.0, 0, 1)] else: n = 10 profiles = [ transf_t(t, r, s) for t, r, s in zip(division(0, 1, n), division(0, rotation, n), division(1, scale, n)) ] r = rh.AddSweep1(path, profiles) rh.DeleteObjects(profiles) return r
def sweepVolume(crv, tool_id, z_pos): tangent = rs.CurveTangent(crv, rs.CurveParameter(crv, 0)) origin = rs.CurveStartPoint(crv) block = rs.InsertBlock( tool_id, (0,0,0), scale=(1,1,1) ) # rs.DeleteObjects(objs) # pt2 = [origin.X, origin.Y + perp.XAxis[1], origin.Z] pt2 = [origin.X, origin.Y , origin.Z + 1] pt3 = [origin.X + tangent.X, origin.Y + tangent.Y , origin.Z + tangent.Z] ref = [(0,0,0),(0,1,0),(0,0,1)] target = [origin, pt2 ,pt3] block = rs.OrientObject(block, ref, target) objs = rs.ExplodeBlockInstance(block) profile = None for item in objs: if rs.ObjectLayer(item) == 'HULP::C_Toolcontours' or rs.ObjectLayer(item) == 'Hulp::C_Toolcontours': profile = rs.CopyObject(item) rs.DeleteObjects(objs) if not profile: rs.MessageBox('there is no layer named "C_Toolcontours" in block %s' % rs.BlockInstanceName(block)) return False profile = rs.OffsetCurve(profile, rs.CurveAreaCentroid(profile)[0], 0.001, style=1) # rs.MoveObject(profile, (0,0,z_pos)) # rail = obj # rail_crv = rs.coercecurve(rail) # if not rail_crv: return # # cross_sections = [profile] # if not cross_sections: return # cross_sections = [rs.coercecurve(crv) for crv in cross_sections] # # sweep = Rhino.Geometry.SweepOneRail() # sweep.AngleToleranceRadians = scriptcontext.doc.ModelAngleToleranceRadians # sweep.ClosedSweep = True # # sweep.MiterType = 2 # sweep.SweepTolerance = scriptcontext.doc.ModelAbsoluteTolerance # sweep.SetToRoadlikeTop() # breps = sweep.PerformSweep(rail_crv, cross_sections) # for brep in breps: scriptcontext.doc.Objects.AddBrep(brep) # scriptcontext.doc.Views.Redraw() # # # surface_id = rs.LastCreatedObjects() # METHOD1 surface_id = rs.AddSweep1( crv, profile, True ) rs.CapPlanarHoles(surface_id) pt = rs.CurveAreaCentroid(profile)[0] pt2 = (pt.X, pt.Y, pt.Z+1) rev = rs.AddRevSrf( profile, (pt, pt2) ) rs.MoveObject(surface_id, (0,0,z_pos)) rs.MoveObject(rev, (0,0,z_pos)) return [surface_id, rev] rs.UnselectAllObjects() rs.SelectObjects([crv, profile]) result = rs.Command("_-Sweep1 _Enter Style=RoadlikeTop _Enter", False) if result: rs.DeleteObject(profile) surface_id = rs.LastCreatedObjects() rs.CapPlanarHoles(surface_id) rs.DeleteObjects(objs) rs.MoveObject(surface_id, (0,0,z_pos)) return surface_id
mx = mid[0] my = mid[1] mz = mid[2] + pf # only z co-ordinate is changing top = (mx, my, mz) #for making a curved roof list_crv1 = rs.AddInterpCurve([pts_crv1[i], top, pts_crv2[i] ]) #list of curves are stored here if (i < len(pts_crv1) - 1): npt1 = pts_crv1[ i + 1] # n=new; i.e points are selected on the suceeding line npt2 = pts_crv2[i + 1] nmid = gmp(npt1, npt2) r = rs.Distance(pts_crv1[i + 1], pts_crv2[i + 1]) npf = r / 4 #pf=proportionate factor upf = npf * 1.6 # upper proportionate factor nmx = nmid[0] nmy = nmid[1] nmz = nmid[2] + upf ntop = (nmx, nmy, nmz) rail = rs.AddLine(pts_crv1[i], npt1) list_crv2 = rs.AddInterpCurve([npt1, ntop, npt2]) srf = rs.AddSweep1(rail, [list_crv1, list_crv2])