def innerPanel():
    objs = rs.GetObjects("Select objects to add frame to", filter = 24, group = True,preselect = True)
    if objs is None:
        return
    dist = rs.GetReal("Offset Distance")
    if dist is None:
        return
    rs.EnableRedraw(False)
    
    srfs = []
    
    for obj in objs:
        if rs.IsPolysurface(obj):
            srfs = srfs + rs.ExplodePolysurfaces(obj)
        else:
            srfs.append(rs.CopyObject(obj))
    
    for srf in srfs:
        if rs.IsSurfacePlanar(srf):
            edgeCrvs = rs.DuplicateEdgeCurves(srf)
            border = rs.JoinCurves(edgeCrvs, True)
            innerEdge = rs.OffsetCurveOnSurface(border, srf, dist)
            #rs.SplitBrep(srf, innerEdge)
            rs.AddPlanarSrf(innerEdge)
            rs.DeleteObject(innerEdge)
            rs.DeleteObject(border)
        else:
            print "A surface was not planar"
    rs.DeleteObjects(srfs)
    rs.EnableRedraw(True)
Ejemplo n.º 2
0
    def curvature(self, points=None):
        """"""
        if not points:
            points = self.heightfield()

        curvature = []

        if rs.IsPolysurface(self.guid):
            rs.EnableRedraw(False)
            faces = {}
            for point in points:
                bcp = rs.BrepClosestPoint(self.guid, point)
                uv = bcp[1]
                index = bcp[2][1]
                try:
                    face = faces[index]
                except (TypeError, IndexError):
                    face = rs.ExtractSurface(self.guid, index, True)
                    faces[index] = face
                props = rs.SurfaceCurvature(face, uv)
                curvature.append((point, (props[1], props[3], props[5])))
            rs.DeleteObjects(faces.values())
            rs.EnableRedraw(False)
        elif rs.IsSurface(self.guid):
            for point in points:
                bcp = rs.BrepClosestPoint(self.guid, point)
                uv = bcp[1]
                props = rs.SurfaceCurvature(self.guid, uv)
                curvature.append((point, (props[1], props[3], props[5])))
        else:
            raise RhinoSurfaceError('object is not a surface')

        return curvature
Ejemplo n.º 3
0
def setObjAreaValue(obj):
    if rs.IsSurface(obj):
        setSrfAreaValue(obj)
    elif rs.IsPolysurface(obj) and rs.IsPolysurfaceClosed(obj):
        setBrepFA(obj)
    else:
        pass
Ejemplo n.º 4
0
def setObjAreaValue(obj):
    if rs.IsSurface(obj):
        setSrfAreaValue(obj)
    elif rs.IsPolysurface(obj) and rs.IsPolysurfaceClosed(obj):
        setBrepFA(obj)
    else:
        rs.SetUserText(obj, "area", 'na')
Ejemplo n.º 5
0
def shape_from_ref(r):
    with parameter(immediate_mode, False):
        obj = _geometry_from_id(r)
        ref = native_ref(r)
        if isinstance(obj, geo.Point):
            return point.new_ref(ref, fromPt(obj.Location))
        elif isinstance(obj, geo.Curve):
            if rh.IsLine(r) or rh.IsPolyline(r):
                if rh.IsCurveClosed(r):
                    return polygon.new_ref(
                        ref, [fromPt(p) for p in rh.CurvePoints(r)[:-1]])
                else:
                    return line.new_ref(ref,
                                        [fromPt(p) for p in rh.CurvePoints(r)])
            elif obj.IsCircle(Rhino.RhinoMath.ZeroTolerance):
                return circle.new_ref(ref, fromPt(rh.CircleCenterPoint(r)),
                                      rh.CircleRadius(r))
            elif rh.IsCurveClosed(r):
                return closed_spline.new_ref(
                    ref, [fromPt(p) for p in rh.CurvePoints(r)])
            else:
                return spline.new_ref(ref,
                                      [fromPt(p) for p in rh.CurvePoints(r)])
        elif rh.IsObject(r) and rh.IsObjectSolid(r):
            return solid(native_ref(r))
        elif rh.IsSurface(r) or rh.IsPolysurface(r):
            return surface(native_ref(r))
        else:
            raise RuntimeError("{0}: Unknown Rhino object {1}".format(
                'shape_from_ref', r))
 def Cut(self, polysurface, holes):
     for hole in holes:
         new = rs.SplitBrep(polysurface, hole, True)
         polysurface = next(x for x in new if rs.IsPolysurface(x))
         for n in new:
             if n is not polysurface:
                 rs.DeleteObject(n)
     return rs.JoinSurfaces([polysurface] + holes, True)
Ejemplo n.º 7
0
def ColorBySize():
    try:
        objs = rs.GetObjects("Select objects to color",
                             1073815613,
                             preselect=True)
        if objs is None: return
        print "Select First Color"
        firstColor = rs.GetColor()
        if firstColor is None: return
        print "Select Second Color"
        secondColor = rs.GetColor(firstColor)
        if secondColor is None: return

        rs.EnableRedraw(False)

        colorLine = rs.AddLine(firstColor, secondColor)

        areas = []
        for obj in objs:
            if rs.IsCurve(obj):
                if rs.IsCurveClosed(obj):
                    areas.append(rs.CurveArea(obj)[0])
                else:
                    areas.append(rs.CurveLength(obj))
            elif rs.IsSurface(obj):
                areas.append(rs.SurfaceArea(obj)[0])
            elif rs.IsPolysurface(obj):
                if rs.IsPolysurfaceClosed(obj):
                    areas.append(rs.SurfaceVolume(obj)[0])
            elif rs.IsHatch(obj):
                areas.append(rs.Area(obj))
            else:
                print "Only curves, hatches, and surfaces supported"
                return

        newAreas = list(areas)
        objAreas = zip(newAreas, objs)
        objAreas.sort()
        objSorted = [objs for newAreas, objs in objAreas]

        areas.sort()
        normalParams = utils.RemapList(areas, 0, 1)

        colors = []
        for t in normalParams:
            param = rs.CurveParameter(colorLine, t)
            colors.append(rs.EvaluateCurve(colorLine, param))

        for i, obj in enumerate(objSorted):
            rs.ObjectColor(obj, (colors[i].X, colors[i].Y, colors[i].Z))

        rs.DeleteObject(colorLine)
        rs.EnableRedraw(True)
        return True
    except:
        return False
Ejemplo n.º 8
0
 def revol(r):
     if rh.IsCurve(r):
         return native_ref(rh.AddRevSrf(r, axis, start, end))
     elif rh.IsSurface(r) or rh.IsPolysurface(r):
         out_refs = revolve_borders(r, axis, start, end, True)
         in_refs = revolve_borders(r, axis, start, end, False)
         return subtract_refs(single_ref_or_union(out_refs),
                              [native_ref(r) for r in in_refs], shape)
     else:
         raise RuntimeError("Can't revolve the shape")
Ejemplo n.º 9
0
    def heightfield(self, density=10, over_space=True):
        """"""
        try:
            du, dv = density
        except TypeError:
            du = density
            dv = density

        du = int(du)
        dv = int(dv)

        xyz = []

        rs.EnableRedraw(False)

        if rs.IsPolysurface(self.guid):
            faces = rs.ExplodePolysurfaces(self.guid)
        elif rs.IsSurface(self.guid):
            faces = [self.guid]
        else:
            raise RhinoSurfaceError('object is not a surface')

        if over_space:
            for guid in faces:
                face = RhinoSurface(guid)
                uv = face.space(density)
                for u, v in uv:
                    xyz.append(list(rs.EvaluateSurface(face.guid, u, v)))
        else:
            for guid in faces:
                bbox = rs.BoundingBox(guid)
                xmin = bbox[0][0]
                xmax = bbox[1][0]
                ymin = bbox[0][1]
                ymax = bbox[3][1]
                xstep = 1.0 * (xmax - xmin) / (du - 1)
                ystep = 1.0 * (ymax - ymin) / (dv - 1)
                seeds = []
                for i in xrange(du):
                    for j in xrange(dv):
                        seed = xmin + i * xstep, ymin + j * ystep, 0
                        seeds.append(seed)
                points = map(list,
                             rs.ProjectPointToSurface(seeds, guid, [0, 0, 1]))
                xyz += points

        if len(faces) > 1:
            rs.DeleteObjects(faces)

        rs.EnableRedraw(True)

        return xyz
Ejemplo n.º 10
0
def wallBaseSrf(crv, width):
    rs.SimplifyCurve(crv)
    if rs.IsCurveClosed(crv):
        domain = rs.CurveDomain(crv)
        parameter = (domain[0] + domain[1]) / 2.0
        rs.CurveSeam(crv, parameter)
    offsets = map(lambda x: rs.OffsetCurve(crv, [0, 0, 0], x),
                  [width / 2, -width / 2])
    section = rs.AddLoftSrf(offsets, loft_type=2)

    if offsets: rs.DeleteObjects(offsets)
    if rs.IsPolysurface(section):
        return rs.ExplodePolysurfaces(section, delete_input=True)
    return section
Ejemplo n.º 11
0
    def setAdditiveObj(self):
        #set object to be additived
        #if selected obj isnt closed, return False

        tmp = rs.GetObject("Select object which you want additive")

        #adapt to unclosed polysurface
        if rs.IsMesh(tmp):
            self.addtiveObj = rs.MeshToNurb(tmp)

        elif rs.IsPolysurface(tmp):
            self.addtiveObj = tmp

        else:
            print("please select \"mesh\" or \"polysurface\"")

        return True
Ejemplo n.º 12
0
    def descent(self, points=None):
        """"""
        if not points:
            points = self.heightfield()

        tol = rs.UnitAbsoluteTolerance()

        descent = []

        if rs.IsPolysurface(self.guid):
            rs.EnableRedraw(False)
            faces = {}
            for p0 in points:
                p = p0[:]
                p[2] -= 2 * tol
                bcp = rs.BrepClosestPoint(self.guid, p)
                uv = bcp[1]
                index = bcp[2][1]
                try:
                    face = faces[index]
                except (TypeError, IndexError):
                    face = rs.ExtractSurface(self.guid, index, True)
                    faces[index] = face
                p1 = rs.EvaluateSurface(face, uv[0], uv[1])
                vector = [p1[_] - p0[_] for _ in range(3)]
                descent.append((p0, vector))
            rs.DeleteObjects(faces.values())
            rs.EnableRedraw(True)
        elif rs.IsSurface(self.guid):
            for p0 in points:
                p = p0[:]
                p[2] -= 2 * tol
                bcp = rs.BrepClosestPoint(self.guid, p)
                uv = bcp[1]
                p1 = rs.EvaluateSurface(self.guid, uv[0], uv[1])
                vector = [p1[_] - p0[_] for _ in range(3)]
                descent.append((p0, vector))
        else:
            raise RhinoSurfaceError('object is not a surface')

        return descent
Ejemplo n.º 13
0
    def setAdditiveObj(self):
        '''
        set object that is added
        when pick object, it must be mesh or polysurface
        if picked object is mesh, it will be converted to polysurface
        '''

        tmp = rs.GetObject("Pick a additive obj",
                           rs.filter.polysurface | rs.filter.mesh)

        if rs.IsMesh(tmp):
            self.additiveObj = rs.MeshToNurb(tmp)

        elif rs.IsPolysurface(tmp):
            self.additiveObj = tmp

        else:
            print("Please select \"mesh\" or \"polysurface\"")
            return False

        return True
Ejemplo n.º 14
0
    def space(self, density=10):
        """"""
        try:
            du, dv = density
        except TypeError:
            du = density
            dv = density

        density_u = int(du)
        density_v = int(dv)

        uv = []

        rs.EnableRedraw(False)

        if rs.IsPolysurface(self.guid):
            faces = rs.ExplodePolysurfaces(self.guid)
        elif rs.IsSurface(self.guid):
            faces = [self.guid]
        else:
            raise Exception('Object is not a surface.')

        for face in faces:
            domain_u = rs.SurfaceDomain(face, 0)
            domain_v = rs.SurfaceDomain(face, 1)
            du = (domain_u[1] - domain_u[0]) / (density_u - 1)
            dv = (domain_v[1] - domain_v[0]) / (density_v - 1)

            for i in range(density_u):
                for j in range(density_v):
                    uv.append((domain_u[0] + i * du, domain_v[0] + j * dv))

        if len(faces) > 1:
            rs.DeleteObjects(faces)

        rs.EnableRedraw(True)

        return uv
Ejemplo n.º 15
0
def makeWall(crvs, width):
    rs.EnableRedraw(False)
    breps = []
    shapes = []

    for crv in crvs:
        rs.SimplifyCurve(crv)
        shape = offsetBothCrvs(crv, width)
        if rs.IsPolysurface(shape):
            surfs = rs.ExplodePolysurfaces(shape)
            for surf in surfs:
                shapes.append(surf)
            if shape: rs.DeleteObjects(shape)
        else:
            shapes.append(shape)

    for shape in shapes:
        railCurve = addRail(shape)
        breps.append(rs.ExtrudeSurface(shape, railCurve))
        if railCurve: rs.DeleteObjects(railCurve)

    if shapes: rs.DeleteObjects(shapes)
    rs.EnableRedraw(False)
    return breps
Ejemplo n.º 16
0
def setBrepHeight(obj):
    if rs.IsPolysurface(obj) and rs.IsPolysurfaceClosed(obj):
        height = brepGetZ(obj)
        height = height[2]
        rs.SetUserText(obj, "height", str(height))
Ejemplo n.º 17
0
def main():


    # get objects to export
    objs = rs.GetObjects("select objects to Make3d", 0, True, True)
    if not objs: print "make3d aborted"; return
    

        
    defaults = {
        'material_thickness':18
    }
    defaults = getDefaultValues(defaults, 'TNM_make3d')
    
    
    material_thickness = rs.GetReal("Material Thickness", number=defaults['material_thickness'])
    
    storeDefaultValues('TNM_make3d', {'material_thickness':material_thickness} )

    
    
    rs.EnableRedraw(False)

    checkPos(objs)

    set_volumes = []
    set_subtracts = []
    
    
    fail_objects =[]

    for obj in objs:
        if rs.IsBlockInstance(obj):   
            
            # get content
            copy = rs.CopyObject(obj)
            content = ce.explodeBlock( [copy] )
                        
            # filter objects to only curves and points
            copies = ce.filterObjects(content) 
            
            copies = ce.joinCurves(copies)

            # copies = ce.joinCurves(copies)
            ce.simplify(copies)
            
            volumes, subtracts = convertToVolumes(copies, material_thickness)
                        
            parts = volumes
            
            for subtract in subtracts:
                if rs.IsPolysurface(parts[0]) and rs.IsPolysurface(subtract) and rs.IsPolysurfaceClosed(parts[0]) and rs.IsPolysurfaceClosed(subtract):
                    
                    # print parts
                    # print subtract
                    
                    temp_parts =  rs.BooleanDifference(parts, [subtract], False)
                    if temp_parts:
                        print 'subtract success'
                        rs.DeleteObjects(parts)
                        rs.DeleteObject(subtract)
                        
                        parts = temp_parts
                    else:
                        print 'boolean differce failed on: %s' % subtract
                        fail_objects.append(subtract)
                else:
                    print 'boolean differce failed on: %s' % subtract
                    fail_objects.append(subtract)

            
            # addResultToBlock(obj, result)
            
        else:
            # add warning message collision check
            print obj

    rs.UnselectAllObjects()
    rs.SelectObjects(fail_objects)
    
    intersect = None
    # for i, volume in enumerate(set_volumes):
        # for j, subtracts in enumerate(set_subtracts):
            # if(i != j):
                # print rs.ObjectLayer(volume)
                
                # intersect = rs.BooleanIntersection(rs.CopyObject(volume), subtracts, False)
                # if intersect:
                    # rs.SelectObjects(intersect)
                    
                    
            # rs.DeleteObjects(subtracts)

            
       
    
    if intersect:
        rs.MessageBox("ERROR")
        
    rs.DeleteObjects(copies)
    
    ce.redraw()
Ejemplo n.º 18
0
import rhinoscriptsyntax as rs
# !-RunPythonScript "objectBottomFaceArea.py"

# rs.EnableRedraw(False)
faces = []
bndry = []
obj = rs.GetObject("Select polysurface to explode",
                   rs.filter.polysurface,
                   preselect=True)
if rs.IsPolysurface(obj):
    faces = rs.ExplodePolysurfaces(obj)

for face in faces:
    if rs.IsSurface(face):
        domainU = rs.SurfaceDomain(face, 0)
        domainV = rs.SurfaceDomain(face, 1)
        u = domainU[1] / 2.0
        v = domainV[1] / 2.0
        point = rs.EvaluateSurface(face, u, v)
        param = rs.SurfaceClosestPoint(face, point)
        normal = rs.SurfaceNormal(face, param)
        # print normal
        if normal.Z == -1:
            bndry.append(face)

for bnd in bndry:
    area = rs.SurfaceArea(bnd)[0]
    areapy = area / 3.3058
    print area, areapy
    txt = rs.ClipboardText(area)