Beispiel #1
0
 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])
Beispiel #2
0
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);
Beispiel #4
0
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
Beispiel #5
0
	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
Beispiel #6
0
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)))
Beispiel #7
0
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
Beispiel #8
0
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])