def RemoveSurfacesIfAnyIntersectBoundary(self, surf, boundaries):
     """
     checks if a surface intersects the boundary and deletes the surface
     An auxilliary method to trim extruding fractures.
     
     Parameters
     ----------
     surf: GUID
         guid of a Rhino surface
     boundaries: list
         list of boundary guids
     """
     # Checks if a surface intersects a boundary
     # If so, it deletes it and any created intersections
     # Could run this with any set of boundary surfaces
     # Intended to run with the CreateSetOfExtendedBoundaries function
     for boundary in boundaries:
         intersections = (rs.IntersectBreps(boundary, surf))
         if intersections is not None:  # If there are intersections
             # Delete this surface
             rs.DeleteObject(surf)
             # delete the surface from domain fractures list
             self.my_fractures.remove(surf)
             # Delete all created intersections
             for inter in intersections:
                 rs.DeleteObject(inter)
             return True  # WHY RETURN TRUE AND FALSE?
     return False
Exemple #2
0
def LinearDimJoin(object_id0, object_id1):
    annotation_object0 = sc.doc.Objects.Find( object_id0 )
    dim0 = annotation_object0.Geometry
    annotation_object1 = sc.doc.Objects.Find( object_id1 )
    dim1 = annotation_object1.Geometry
    if isinstance(dim0, Rhino.Geometry.LinearDimension) and isinstance(dim1, Rhino.Geometry.LinearDimension):
        _, extensionLine01End, extensionLine02End, arrowhead01End, arrowhead02End, dimlinepoint0, _ = dim0.Get3dPoints() 
        _, extensionLine11End, extensionLine12End, arrowhead11End, arrowhead12End, dimlinepoint1, _ = dim1.Get3dPoints() 

        line0 = geo.Line(arrowhead01End, arrowhead02End)
        direct0=rs.VectorUnitize(line0.Direction)
        line1 = geo.Line(arrowhead11End, arrowhead12End)
        direct1=rs.VectorUnitize(line1.Direction)
        if rs.IsVectorParallelTo(direct0, direct1 ) != 0 :
            param0 = line0.ClosestParameter(line1.From)
            param1 = line0.ClosestParameter(line1.To)
            paramDictionary = {
                    0.0 : extensionLine01End, 
                    1.0 : extensionLine02End, 
                    param0 : extensionLine11End, 
                    param1 : extensionLine12End
                    }
            extensionLineList = []
            for key in sorted(paramDictionary.keys()):
                extensionLineList.append(paramDictionary[key])

            distance0 = line0.DistanceTo(extensionLineList[0],False)
            distance1 = line1.DistanceTo(extensionLineList[0],False)
            if distance0 > distance1: 
                rs.AddLinearDimension(dim0.Plane, extensionLineList[0], extensionLineList[len(extensionLineList)-1], dimlinepoint0 )
            else:
                rs.AddLinearDimension(dim1.Plane, extensionLineList[0], extensionLineList[len(extensionLineList)-1], dimlinepoint1 )

            rs.DeleteObject(object_id0)
            rs.DeleteObject(object_id1)
Exemple #3
0
def mergeCoincidentLines(segments):
    """
    removes coincident, consecutive segments

    input: List of GUIDs
    returns: List of GUIDs
    """
    newSegments = []
    i = 0
    while i < len(segments):
        if (i < len(segments) - 1):  #if coincident, delete both, add new.
            a = rs.VectorCreate(rs.CurveStartPoint(segments[i]),
                                rs.CurveEndPoint(segments[i]))
            b = rs.VectorCreate(rs.CurveStartPoint(segments[i + 1]),
                                rs.CurveEndPoint(segments[i + 1]))
            a = rs.VectorUnitize(a)
            b = rs.VectorUnitize(b)
            aAng = rs.VectorAngle(a, b)
            if (aAng < .00001):
                newLine = rs.AddLine(rs.CurveStartPoint(segments[i]),
                                     rs.CurveEndPoint(segments[i + 1]))
                rs.DeleteObject(segments[i])
                rs.DeleteObject(segments[i + 1])
                newSegments.append(newLine)
                i = i + 2
            else:
                newSegments.append(
                    segments[i])  #if not coincident, add to array
                i = i + 1
        else:
            newSegments.append(segments[i])  #add last seg to array
            i = i + 1
    return newSegments
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)
Exemple #5
0
def offsetext():
    def RepresentsInt(s):
        try: 
            int(s)
            return True
        except ValueError:
            return False
    
    
    viste = rs.ViewNames()
    for viewport in viste:
        rs.ViewDisplayMode(viewport,"Shaded")
    diametro = rs.StringBox("dimensione della punta","10","scontornatura")
    if RepresentsInt(diametro):
        diametro = int(diametro)
    else:
        diametro = 10
    brep =  rs.GetObjects("dammi un solido",16)
    brepexp = rs.ExplodePolysurfaces(brep)
    get_val = rs.GetEdgeCurves("dammi le curve")
    surf_edge = []
    
    for i in get_val:
        surf_edge.append(i[0])
    surf_edge = rs.coerceguidlist(surf_edge)
    if len(surf_edge)>1:
        surf_edge = rs.JoinCurves(surf_edge,True)
    surface = rs.GetObjects("conferma la selezione",8,False,True,1,1)

    print surf_edge
    uv= []
    temp_edge = rs.ExplodeCurves(surf_edge,False)
    new_surface = rs.CopyObject(surface,(0,0,0))
    list_evpt =[]
    for i in temp_edge:
        evpt =rs.CurveMidPoint(i)
        print evpt
        list_evpt.append(evpt)
    for i in list_evpt:
        bord= rs.SurfaceClosestPoint(new_surface,i)
        uv.append(bord)
    for i in uv:
        rs.ExtendSurface(new_surface,i,diametro*10)
    edge = rs.OffsetCurveOnSurface(surf_edge,new_surface,-diametro)
    print edge
    if rs.CurveLength(edge)<rs.CurveLength(surf_edge):
        rs.DeleteObject(edge)
        edge =  rs.OffsetCurveOnSurface(surf_edge,new_surface,diametro)
    surf_edge = rs.ExplodeCurves(surf_edge,True)
    print edge
    
    rs.ObjectColor(edge,(0,0,255))
    for i in brepexp:
        rs.DeleteObject(i)
    for i in temp_edge:
        rs.DeleteObject(i)
    for i in surf_edge:
        rs.DeleteObject(i)
    
    rs.DeleteObjects([new_surface,surface])
Exemple #6
0
def GenStaggeredCourtyardBlock(site_crv, setback, stepbacks, bay_gap, fsr_li,
                               flr_depth):
    bldg_srf_li = []
    outer_setback_crv = rs.OffsetCurve(site_crv,
                                       rs.CurveAreaCentroid(site_crv)[0],
                                       setback)
    inner_floor_crv = rs.OffsetCurve(site_crv,
                                     rs.CurveAreaCentroid(site_crv)[0],
                                     setback + flr_depth)
    req_ht = (rs.CurveArea(site_crv)[0] * fsr_li[0]) / (
        rs.CurveArea(outer_setback_crv)[0] - rs.CurveArea(inner_floor_crv)[0])
    l = rs.AddLine([0, 0, 0], [0, 0, req_ht])
    srf = rs.AddPlanarSrf([outer_setback_crv, inner_floor_crv])
    srf2 = rs.ExtrudeSurface(srf, l)
    rs.DeleteObject(l)
    prev_ht = req_ht
    k = 1
    for depth in stepbacks:
        req_ar = rs.CurveArea(site_crv)[0] * fsr_li[k]
        itr_stepback_crv = rs.OffsetCurve(site_crv,
                                          rs.CurveAreaCentroid(site_crv)[0],
                                          setback + depth)
        got_ar = rs.CurveArea(itr_stepback_crv)[0] - rs.CurveArea(
            inner_floor_crv)[0]
        ht = req_ar / got_ar
        l = rs.AddLine([0, 0, 0], [0, 0, ht])
        srf = rs.AddPlanarSrf([itr_stepback_crv, inner_floor_crv])
        srf2 = rs.ExtrudeSurface(srf, l)
        rs.MoveObject(srf2, [0, 0, prev_ht])
        rs.DeleteObject(l)
        rs.DeleteObject(srf)
        bldg_srf_li.append(srf2)  #
        prev_ht += ht
        k += 1
Exemple #7
0
 def getIntxCrv(self, poly):
     intxCrv=rs.CurveBooleanIntersection(self.SITECRV,poly)
     if(len(intxCrv)>0):
         maxCrv=intxCrv[0]
         maxAr=0.0
         for i in intxCrv: 
             ar=rs.CurveArea(i)[0]
             if(ar>maxAr):
                 maxAr=ar
                 maxCrv=i
         crvpts=rs.CurvePoints(maxCrv)
         rs.DeleteObjects(intxCrv)
         for i in intxCrv:
             try:
                 rs.DeleteObject(i)
                 pass
             except:
                 print("#1. curve not deleted")
         return crvpts
     else:
         for i in intxCrv:
             try:
                 rs.DeleteObject(i)
             except:
                 print("#2. curve not deleted")
         return
Exemple #8
0
def filterObjects(objs):
    new_list = []
    for obj in objs:
        if rs.LayerVisible( rs.ObjectLayer(obj) ):
            # only export visible layers
            if rs.IsCurve(obj):
                new_list.append(obj)

            elif rs.IsPoint(obj):
                # convert to circle
                layer = rs.ObjectLayer(obj)
                point=rs.coerce3dpoint(obj)

                circle = rs.AddCircle(rs.WorldXYPlane(),3)

                rs.ObjectLayer(circle, layer)
                rs.MoveObject(circle, [point.X, point.Y, point.Z])
                new_list.append(circle)
                rs.DeleteObject(obj)
                # rs.DeleteObject(point)

            else:
                # remove from obj list
                rs.DeleteObject(obj)
        else:
            # remove from obj list
            rs.DeleteObject(obj)

    return new_list
def exportData():
    # Generating sensor points
    pts = setSensorLocation()

    # Make csv file
    file_object = open("points1.csv", "w")

    # import sensor value
    file_data = open("values.csv", "r")
    data = file_data.readlines()

    valList = []

    for index in range(0, len(data)):
        valNum = float(data[index])
        valList.append(valNum)

    maxNum = max(valList)
    minNum = min(valList)

    # index initialization
    i = 0

    # Writing csv file: iteration
    for pt in pts:
        coord = rs.PointCoordinates(pt)

        dataLine = str(coord)
        dataLine = dataLine + " ," + data[i]

        val = float(data[i])

        visLine = makeHeight(pt, val)
        pipe = makePipe(visLine)

        # Making layers and their colors depending on value
        color = mapVal2Color(minNum, maxNum, i, val)

        rs.EnableRedraw(False)

        # Visualization: assigning layer to point
        #rs.ObjectLayer(pt, layername)
        #rs.ObjectLayer(visLine, layername)
        #rs.ObjectLayer(pipe, layername)

        # GUID to Brep
        pipeBrep = rs.coercebrep(pipe)

        AddMaterial(pipeBrep, i, color)

        rs.DeleteObject(pt)
        rs.DeleteObject(visLine)
        rs.DeleteObject(pipe)

        i = i + 1
        file_object.writelines(dataLine)

    file_object.close()
    file_data.close()
    print("data export done")
Exemple #10
0
def draw(pts):
    rs.EnableRedraw(0)
    sleep(0.05)
    RhinoApp.Wait()
    for i in range(4):
        for j in range(4):
            if recs[i][j]:
                rs.DeleteObject(recs[i][j])
            if tags[i][j]:
                rs.DeleteObject(tags[i][j])
            if pts[i][j]:
                recs[i][j] = rs.AddRectangle(
                    rs.PlaneFromNormal((i + 0.1, j + 0.1, 0), (0, 0, 1)), 0.8,
                    0.8)
                tags[i][j] = rs.AddText(pts[i][j], (i + 0.5, j + 0.5, 0),
                                        0.2 + (0.1 / len(str(pts[i][j]))),
                                        'Arial', 0, 131074)
                if pts[i][j] <= 4:
                    rs.ObjectColor(tags[i][j], (245, 245, 220))
                    rs.ObjectColor(recs[i][j], (245, 245, 220))
                if 8 <= pts[i][j] <= 16:
                    rs.ObjectColor(tags[i][j], (245, 97, 0))
                    rs.ObjectColor(recs[i][j], (245, 97, 0))
                if 32 <= pts[i][j] <= 64:
                    rs.ObjectColor(tags[i][j], (245, 7, 0))
                    rs.ObjectColor(recs[i][j], (245, 9, 0))
                if pts[i][j] > 64:
                    rs.ObjectColor(tags[i][j], (245, 197, 44))
                    rs.ObjectColor(recs[i][j], (245, 197, 44))
    rs.EnableRedraw(1)
Exemple #11
0
 def recSplit(self, iniPts, counter=0):
     p=iniPts
     vertical=False
     if(rs.Distance(p[0],p[1])>rs.Distance(p[0],p[3])):
         vertical=True
     if(vertical==True):
         p0,p1=self.verSplit(iniPts)
     else:
         p0,p1=self.horSplit(iniPts)
     poly0=rs.AddPolyline(p0)
     poly1=rs.AddPolyline(p1)
     counter+=1
     if(counter<DIV):
         pts0=self.getIntxCrv(poly0)
         pts1=self.getIntxCrv(poly1)
         rs.DeleteObject(poly0)
         rs.DeleteObject(poly1)
         self.recSplit(pts0,counter)
         self.recSplit(pts1,counter)
     else:
         intxCrv0=rs.CurveBooleanIntersection(self.SITECRV,poly0)
         intxCrv1=rs.CurveBooleanIntersection(self.SITECRV,poly1)
         rs.DeleteObject(poly0)
         rs.DeleteObject(poly1)
         for i in intxCrv0:
             self.FPOLY.append(i)
         for i in intxCrv1:
             self.FPOLY.append(i)
     rs.DeleteObject(self.crv)
Exemple #12
0
def genHalfPlanes(site_crv, int_crv):
    B = rs.BoundingBox(site_crv)
    polyBB = rs.AddPolyline([B[0], B[1], B[2], B[3], B[0]])
    diagB = 2 * rs.Distance(B[0], B[2])
    rays = []
    int_pts = rs.CurvePoints(int_crv)
    bsp_tree = []
    bsp_tree.append(site_crv)
    for i in range(len(int_pts) - 1):
        a = int_pts[i]
        b = int_pts[i + 1]
        m = [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2, 0]
        p = [
            m[0] + (a[0] - m[0]) * diagB / (rs.Distance(a, m)),
            m[1] + (a[1] - m[1]) * diagB / (rs.Distance(a, m)), 0
        ]
        q = [
            m[0] + (b[0] - m[0]) * diagB / (rs.Distance(b, m)),
            m[1] + (b[1] - m[1]) * diagB / (rs.Distance(b, m)), 0
        ]
        u = [q[0] - p[0], q[1] - p[1], 0]
        v = [-u[1], u[0], 0]
        r = [p[0] + v[0], p[1] + v[1], 0]
        s = [q[0] + v[0], q[1] + v[1], 0]
        w = [u[1], -u[0], 0]
        R = [p[0] + w[0], p[1] + w[1], 0]
        S = [q[0] + w[0], q[1] + w[1], 0]
        polyA = rs.AddPolyline([p, q, s, r, p])
        polyB = rs.AddPolyline([p, q, S, R, p])

        used_crv = []
        new_crv = []
        for bsp_crv in bsp_tree:
            sum = 0
            try:
                crvA = rs.CurveBooleanIntersection(bsp_crv, polyA)
                new_crv.append(crvA)
                sum += 1
            except:
                pass
            try:
                crvB = rs.CurveBooleanIntersection(bsp_crv, polyB)
                new_crv.append(crvB)
                sum += 1
            except:
                pass
            if (sum > 0):
                used_crv.append(bsp_crv)

        for crv in new_crv:
            bsp_tree.append(crv)
        for crv in used_crv:
            bsp_tree.remove(crv)
            rs.DeleteObject(crv)

        rs.DeleteObject(polyA)
        rs.DeleteObject(polyB)

    rs.DeleteObject(polyBB)
    return bsp_tree
Exemple #13
0
def meshSwipPolyAlongPoly(profile, rail):
    profile = rs.CopyObject(profile)
    pts = rs.CurveEditPoints(rail)
    baseVect = Rhino.Geometry.Point3d(0, 1, 0)

    meshes = []
    for i in range(0, len(pts) - 2):
        p0 = pts[i]
        p1 = pts[i + 1]
        p2 = pts[i + 2]

        v1 = rs.VectorUnitize(p1 - p0)
        v2 = rs.VectorUnitize(p2 - p1)
        rv1 = rs.VectorUnitize(p0 - p1)
        vect = p1 - p0

        mid = rs.VectorUnitize((rv1 + v2) / 2)
        np = p1 + mid
        up = p1 + Rhino.Geometry.Point3d(0, 0, 1)
        pln = rs.PlaneFromPoints(p1, np, up)

        mesh, pjpts = meshExtrudePolyToByVectPlane(profile, vect, pln)
        meshes.append(mesh)
        rs.DeleteObject(profile)
        profile = rs.AddPolyline(pjpts)

    mesh = rs.JoinMeshes(meshes, True)
    rs.DeleteObject(profile)
    return mesh
Exemple #14
0
def GenStagerredBlock(site_crv, setback, stepbacks, bay_gap, fsr_li,
                      flr_depths):
    bldg_srf_li = []
    setback_crv = rs.OffsetCurve(site_crv,
                                 rs.CurveAreaCentroid(site_crv)[0], setback)
    ht = fsr_li[0] * rs.CurveArea(site_crv)[0] / rs.CurveArea(setback_crv)[0]
    pl_srf0 = rs.AddPlanarSrf(setback_crv)
    l = rs.AddLine([0, 0, 0], [0, 0, ht])
    ext_srf = rs.ExtrudeSurface(pl_srf0, l)
    rs.DeleteObjects([l, pl_srf0])
    k = 1
    for depth in stepbacks:
        stepback_crv = rs.OffsetCurve(setback_crv,
                                      rs.CurveAreaCentroid(site_crv)[0], depth)
        ht2 = rs.CurveArea(site_crv)[0] * fsr_li[k] / rs.CurveArea(
            stepback_crv)[0]
        l = rs.AddLine([0, 0, 0], [0, 0, ht2])
        pl_srf = rs.AddPlanarSrf(stepback_crv)
        ext_srf = rs.ExtrudeSurface(pl_srf, l)
        rs.MoveObject(ext_srf, [0, 0, ht])
        bldg_srf_li.append(ext_srf)
        rs.DeleteObject(l)
        rs.DeleteObject(pl_srf)
        ht += ht2
        k += 1
Exemple #15
0
 def delResult(self):
     for i in self.req_obj:
         srf = i.getSrf()
         try:
             rs.DeleteObjects(srf)
         except:
             try:
                 rs.DeleteObjects(srf)
             except:
                 pass
         int_poly = i.getReqPoly()
         try:
             rs.DeleteObjects(int_poly)
         except:
             try:
                 rs.DeleteObject(int_poly)
             except:
                 pass
         bound_poly = i.getGenPoly()
         try:
             rs.DeleteObjects(bound_poly)
         except:
             try:
                 rs.DeleteObject(bound_poly)
             except:
                 pass
def collisionDetection(used_timber_list, not_used_timber_list, unused_timber,
                       id_connect):
    num_used_timber = len(used_timber_list)
    num_not_used_timber = len(not_used_timber_list)
    sum_timber = num_used_timber + num_not_used_timber

    timber1 = unused_timber  # これから生成するTimber
    count = 0  # timber1と他のused_timberが衝突していない時のカウント

    # 衝突判定(unused_timberとused_listのtimber同士の接触判定)
    for i in range(num_used_timber):

        # 接合部は衝突とみなさない
        if i == id_connect:
            count = count + 1

        # 接合部材以外のused_timberとの衝突判定
        else:
            timber2 = used_timber_list[i]
            curve = rs.IntersectBreps(timber1.surface, timber2.surface)

            # 衝突していない場合
            if curve is None:
                count = count + 1

            # 衝突している場合
            else:
                # 衝突部に目印の球体を生成 --> ただの目印なので接触処理するときはコメントアウトしてもらえればと
                # mark_sphere = createMarkSphere(curve)
                # rs.ObjectLayer(mark_sphere, "collision")

                # objectを削除
                rs.DeleteObject(curve[0])
                break

    # 衝突判定(unused_timberとnot_used_listのtimber同士の接触判定)
    for j in range(num_not_used_timber):
        timber2 = not_used_timber_list[j]
        curve = rs.IntersectBreps(timber1.surface, timber2.surface)

        # 衝突していない場合
        if curve is None:
            count = count + 1

        # 衝突している場合
        else:
            # 衝突部に目印の球体を生成 --> ただの目印なので接触処理するときはコメントアウトしてもらえればと
            # mark_sphere = createMarkSphere(curve)
            # rs.ObjectLayer(mark_sphere, "collision")

            # objectを削除
            rs.DeleteObject(curve[0])

    # unused_timberがどの部材とも衝突してない場合
    if count == sum_timber:
        return False
    # unused_timberがいずれかの部材と衝突している場合
    else:
        return True
Exemple #17
0
 def Fillet(self, radius):
     curve0 = self.curves.pop()
     curve1 = self.curves.pop()
     curve = rs.AddFilletCurve(curve0, curve1, radius, self.currentPoint,
                               self.currentPoint)
     rs.DeleteObject(curve0)
     rs.DeleteObject(curve1)
     self.curves.append(curve)
Exemple #18
0
def editing_topology(coarse_pseudo_quad_mesh):
    """Edit the topology of a pattern, i.e. its singularities, via its strips.

    Parameters
    ----------
    coarse_pseudo_quad_mesh : CoarsePseudoQuadMesh
            The pattern to edit.

    """

    while True:

        # update drawing
        rs.EnableRedraw(False)
        artist = rhino_artist.MeshArtist(coarse_pseudo_quad_mesh)
        guid = artist.draw_mesh()
        rs.EnableRedraw(True)

        # choose operation
        operation = rs.GetString('edit strip topology?',
                                 strings=['add', 'delete', 'split', 'exit'])

        # stop if asked
        if operation is None or operation == 'exit':
            rs.DeleteObject(guid)
            break

        # apply operation
        if operation == 'add':
            skey = add_strip(coarse_pseudo_quad_mesh,
                             select_mesh_polyedge(coarse_pseudo_quad_mesh))[0]
            coarse_pseudo_quad_mesh.set_strip_density(skey, 1)

        elif operation == 'delete':
            skeys = set(select_quad_mesh_strips(coarse_pseudo_quad_mesh))
            skey_to_skeys = delete_strips(coarse_pseudo_quad_mesh, skeys)
            if skey_to_skeys is not None:
                for skey_0, skeys in skey_to_skeys.items():
                    d = int(
                        ceil(
                            float(
                                coarse_pseudo_quad_mesh.get_strip_density(
                                    skey_0)) / 2.))
                    coarse_pseudo_quad_mesh.set_strips_density(d, skeys)

        elif operation == 'split':
            skey = select_quad_mesh_strip(coarse_pseudo_quad_mesh)
            n = rs.GetInteger('number of splits', number=2, minimum=2)
            skeys = split_strip(coarse_pseudo_quad_mesh, skey, n=n)
            # update data
            d = int(
                ceil(
                    float(coarse_pseudo_quad_mesh.get_strip_density(skey)) /
                    float(n)))
            coarse_pseudo_quad_mesh.set_strips_density(d, skeys)

        # delete drawing
        rs.DeleteObject(guid)
Exemple #19
0
def GetFracture ():
    dx = rs.GetReal("Enter x-axis direction:")
    if not dx:
        dx = 0.0
    print "x-axis direction: ", dx
    objs = rs.ObjectsByType(8,False)
    cir_objs = rs.ObjectsByType(4)
    
    #delete all circles
    for cur_obj in cir_objs:
        if rs.IsCircle(cur_obj):
            rs.DeleteObject(cur_obj)
    occor = []
    radius = []
    center = []
    
    #for all surface
    for obj in objs:
        rs.UnselectAllObjects()
        rs.SelectObject(obj)
        rs.Command ("_Silhouette")
        created_objs = rs.LastCreatedObjects()
        #not a circle
        if len(created_objs) !=1:
            rs.DeleteObjects(created_objs)
            print "unvailded surface"
            continue
        created_objs = created_objs[0]
        #not a circle
        if not rs.IsCircle(created_objs):
            rs.DeleteObject(created_objs)
            print "unvailded surface, not circle"
            continue
        point = rs.CircleCenterPoint(created_objs)
        center.append(point)
        r = rs.CircleRadius(created_objs)
        radius.append(r)
        normal = rs.SurfaceNormal(obj,[0,0])
        occor.append(GetDirDip(normal,dx))
        rs.DeleteObject(created_objs)
    print center
    print occor
    print radius
    path = rs.DocumentPath()
    path_l = path.split("\\")
    path_l[len(path_l)-1] = "fracture.dat"
    file = open("\\".join(path_l),"w")
    file.write(str(len(occor)))
    file.write('\n')
    for i in range (len(occor)):
        file.write("%.15f " % center[i][0])
        file.write("%.15f " % center[i][1])
        file.write("%.15f " % center[i][2])
        file.write ("%.15f " % occor[i][0])
        file.write ("%.15f " % occor[i][1])
        file.write ("%.15f " % radius[i])
        file.write ("0.0001 0.1 30\n")
    file.close ()
def collisionDetection_bridge(used_timber_list, not_used_timber_list,
                              unused_timber, id_connect_1, id_connect_2):
    num_used_timber = len(used_timber_list)
    num_not_used_timber = len(not_used_timber_list)
    sum_timber = num_used_timber + num_not_used_timber

    count = 0
    timber1 = unused_timber

    for i in range(num_used_timber):
        # 接合部は衝突とみなさない
        if i == id_connect_1:
            count = count + 1
        elif i == id_connect_2:
            count = count + 1

        # 接合部材以外のused_timberとの衝突判定
        else:
            timber2 = used_timber_list[i]
            curve = rs.IntersectBreps(timber1.surface, timber2.surface)

            if curve is None:
                count = count + 1
            else:
                # 衝突部に目印の球体を生成 --> ただの目印なので接触処理するときはコメントアウトしてもらえればと
                # mark_sphere = createMarkSphere(curve)
                # rs.ObjectLayer(mark_sphere, "collision")

                # objectを削除
                rs.DeleteObject(curve[0])

    for i in range(num_not_used_timber):
        # 接合部材以外のused_timberとの衝突判定

        timber2 = not_used_timber_list[i]
        curve = rs.IntersectBreps(timber1.surface, timber2.surface)

        # 衝突していない場合
        if curve is None:
            count = count + 1

        # 衝突している場合
        else:
            # 衝突部に目印の球体を生成 --> ただの目印なので接触処理するときはコメントアウトしてもらえればと
            # mark_sphere = createMarkSphere(curve)
            # rs.ObjectLayer(mark_sphere, "collision")

            # objectを削除
            rs.DeleteObject(curve[0])

    # unused_timberがどの部材とも衝突してない場合
    if count == sum_timber:
        return False

    # unused_timberがいずれかの部材と衝突している場合
    else:
        return True
Exemple #21
0
def editing_geometry_moving(coarse_pseudo_quad_mesh):
    """Edit the geometry of a pattern with moving.

    Parameters
    ----------
    coarse_pseudo_quad_mesh : CoarsePseudoQuadMesh
            The pattern to edit.

    """

    mesh_to_modify = rs.GetString('mesh to modify?',
                                  strings=[
                                      'coarse_pseudo_quad_mesh',
                                      'pseudo_quad_mesh', 'polygonal_mesh'
                                  ])
    if mesh_to_modify == 'coarse_pseudo_quad_mesh':
        mesh = coarse_pseudo_quad_mesh
    elif mesh_to_modify == 'pseudo_quad_mesh':
        mesh = coarse_pseudo_quad_mesh.get_quad_mesh()
    elif mesh_to_modify == 'polygonal_mesh':
        mesh = coarse_pseudo_quad_mesh.get_polygonal_mesh()
    else:
        return 0

    while True:

        rs.EnableRedraw(False)
        artist = rhino_artist.MeshArtist(mesh)
        guid = artist.draw_mesh()
        rs.EnableRedraw(True)

        artist = rhino_artist.MeshArtist(mesh, layer='mesh_artist')
        artist.clear_layer()
        artist.draw_vertexlabels(
            text={key: str(key)
                  for key in mesh.vertices()})
        artist.redraw()
        vkeys = rhino_helper.mesh_select_vertices(mesh,
                                                  message='vertices to move')
        artist.clear_layer()
        artist.redraw()
        rs.DeleteLayer('mesh_artist')

        if vkeys == []:
            rs.DeleteObject(guid)
            break

        rhino_helper.mesh_move_vertices(mesh, vkeys)
        rs.DeleteObject(guid)

    if mesh_to_modify == 'coarse_pseudo_quad_mesh':
        coarse_pseudo_quad_mesh = mesh
    elif mesh_to_modify == 'pseudo_quad_mesh':
        coarse_pseudo_quad_mesh.set_quad_mesh(mesh)
        coarse_pseudo_quad_mesh.set_polygonal_mesh(mesh.copy())
    elif mesh_to_modify == 'polygonal_mesh':
        coarse_pseudo_quad_mesh.set_polygonal_mesh(mesh)
def DropBlockToSurface():
    try:

        obj = rs.GetObjects('Select Objects',
                            rs.filter.curve | rs.filter.instance
                            | rs.filter.mesh | rs.filter.surface
                            | rs.filter.subd | rs.filter.light
                            | rs.filter.polysurface,
                            preselect=True)
        srf = rs.GetObject('Select Surface')

        if obj:
            if srf:

                rs.EnableRedraw(False)

                # Check if srf is a mesh, if so convert to Nurb
                isMesh = rs.IsMesh(srf)
                if isMesh == True:
                    srf = rs.MeshToNurb(srf)

                # For each object send test rays up and down in Z coord
                # Move each object to the ray test that hits a srf
                for i in obj:
                    bndBox = rs.BoundingBox(i)
                    pt1 = bndBox[0]
                    pt2 = bndBox[2]
                    crv = rs.AddLine(pt1, pt2)

                    if crv:
                        midcrv = rs.CurveMidPoint(crv)
                        rs.DeleteObject(crv)

                    ray_pt_up = rs.ShootRay(srf,
                                            midcrv, (0, 0, 1),
                                            reflections=1)
                    ray_pt_down = rs.ShootRay(srf,
                                              midcrv, (0, 0, -1),
                                              reflections=1)

                    if ray_pt_up:
                        vector = rs.VectorCreate(ray_pt_up[1], midcrv)
                        rs.MoveObject(i, vector)

                    if ray_pt_down:
                        vector = rs.VectorCreate(ray_pt_down[1], midcrv)
                        rs.MoveObject(i, vector)

                # deleate any created srf
                if isMesh == True:
                    rs.DeleteObject(srf)
                rs.EnableRedraw(True)

    except:
        print("Failed to execute")
        rs.EnableRedraw(True)
        return
Exemple #23
0
def process_floor(in_objects, floor_outline, outline_cut_height=None):
    """function used to process an individual floor.
	input:
		in_objects: the internal curves and breps selected for this floor
		floor_outline: the outline brep for the envelope
		outline_cut_height: height to cut at.
	output: (crv,[crv])
		crv: the offset boundary curve for the floor
		[crv]: the internal curves for the floor
		pt: lower-left reference point
		bdims = bounding dims of this floor
	"""

    #classify the inputs
    in_crvs, in_breps = brep_or_crv(in_objects)

    #get list of crvs to project
    brep_sections = []
    for b in in_breps:
        cut_height = wge.get_brep_height(b) / 2
        pcurves = wge.get_brep_plan_cut(rs.coercebrep(b), cut_height, D_TOL)
        brep_sections.extend(pcurves)

    b_section_guids = wru.add_curves_to_layer(brep_sections, LCUT_INDICES[0])
    in_crvs.extend(b_section_guids)

    #get the outline brep curve
    if not outline_cut_height:
        outline_cut_height = wge.get_brep_height(floor_outline)
    floor_outline_crvs = wge.get_brep_plan_cut(rs.coercebrep(floor_outline),
                                               outline_cut_height, D_TOL)
    floor_outline_crvs = wru.add_curves_to_layer(floor_outline_crvs,
                                                 LCUT_INDICES[1])

    #get bounding info for the floor outline
    bb = rs.BoundingBox(floor_outline)
    corner = bb[0]
    bdims = wge.get_bounding_dims(floor_outline)
    proj_srf = rs.AddSrfPt([bb[0], bb[1], bb[2], bb[3]])

    internal_crvs = rs.ProjectCurveToSurface(in_crvs, proj_srf,
                                             [0, 0, -1]) if in_crvs else []
    offset_floor_crv = rs.ProjectCurveToSurface(floor_outline_crvs, proj_srf,
                                                [0, 0, -1])

    #rs.DeleteObjects(in_crvs)
    rs.DeleteObjects(floor_outline_crvs)
    rs.DeleteObject(proj_srf)

    out_floor_crvs = rs.coercecurve(offset_floor_crv)
    out_internal_crvs = [rs.coercecurve(x) for x in internal_crvs]
    rs.DeleteObject(offset_floor_crv)
    rs.DeleteObjects(internal_crvs)
    rs.DeleteObjects(b_section_guids)
    #TODO: make sure objects are being deleted
    return out_floor_crvs, out_internal_crvs, corner, bdims
Exemple #24
0
def drawOpening(distance, length, block=0):
    if block == 1 and rs.IsBlock("window") == False:
        util.initWindowBlock()
    if block == 2 and rs.IsBlock("door") == False:
        util.initDoorBlock()
    if not rs.IsLayer("Axis"):
        util.initCaadLayer("Axis")

    twoLines = findTwoParallelLines()
    if not twoLines:
        return 0
    pi, linei, linej = twoLines
    if not linej:
        return 0
    pj = linej.CurveGeometry.Line.ClosestPoint(pi, False)

    oldLockMode = rs.LayerLocked("Axis", True)
    # side=0 start from startPoint , side=1 start from endPoint
    if rs.Distance(linei.CurveGeometry.Line.From, pi) <= rs.Distance(
            pi, linei.CurveGeometry.Line.To):
        side = 0
    else:
        side = 1

    # direct:
    #  0 | 1
    # -------
    #  2 | 3
    vji = rs.VectorCreate(pj, pi)
    vi = linei.CurveGeometry.Line.Direction
    angle = rs.Angle((0, 0, 0),
                     rs.VectorRotate(vji, -rs.Angle((0, 0, 0), vi)[0],
                                     (0, 0, 1)))
    if abs(angle[0] - 90) < sc.doc.ModelAbsoluteTolerance:
        line0 = linei
        line1 = linej
        if side == 0:
            direct = 2
        else:
            direct = 3
    elif abs(angle[0] + 90) < sc.doc.ModelAbsoluteTolerance:
        line0 = linej
        line1 = linei
        if side == 0:
            direct = 0
        else:
            direct = 1

    dl = DoubleLine(line0.CurveGeometry.Line, line1.CurveGeometry.Line)
    newLayer = rs.ObjectLayer(line0.Id)
    oldLayer = rs.CurrentLayer(newLayer)
    dl.drawOpening(distance, length, side, block, direct)
    rs.DeleteObject(line0.Id)
    rs.DeleteObject(line1.Id)
    rs.CurrentLayer(oldLayer)
    rs.LayerLocked("Axis", oldLockMode)
Exemple #25
0
def plotPoint(pOne, pTwo):
    line = rs.AddLine(pOne, pTwo)
    coordinates = rs.CurveMidPoint(line)
    point = rs.AddPoint(coordinates)
    rs.DeleteObject(line)
    translation = rs.Distance(pOne, pTwo)
    rs.MoveObject(point, (0, 0, translation))
    result = rs.PointCoordinates(point)
    rs.DeleteObject(point)
    return result
Exemple #26
0
def trimSurface(sur):
    #sur = getSurfaces()['ref']
    pl = rs.AddPlaneSurface(rs.WorldXYPlane(), 40000.0, 6000.0)
    rs.MoveObject(pl, (-3000, -500, 2100))
    lsrf = rs.SplitBrep(sur, pl)
    rs.DeleteObject(pl)
    rs.DeleteObject(lsrf[0])
    rs.DeleteObject(sur)
    rs.ObjectName(lsrf[1], 'mod')
    return lsrf[1]
Exemple #27
0
def GenExtrBlock(site_crv, setback, flr_depth, bay_gap, fsr):
    setback_crv = rs.OffsetCurve(site_crv,
                                 rs.CurveAreaCentroid(site_crv)[0], setback)
    got_ar = rs.CurveArea(setback_crv)[0]
    req_ar = rs.CurveArea(site_crv)[0] * fsr
    ht = req_ar / got_ar
    l = rs.AddLine([0, 0, 0], [0, 0, ht])
    pl_srf = rs.AddPlanarSrf(setback_crv)
    ext_srf = rs.ExtrudeSurface(pl_srf, l)  #
    rs.DeleteObject(l)
    rs.DeleteObject(pl_srf)
def draw_sikaku(h):
    p1 = (1000, 1000, h)
    p2 = (1000, -1000, h)
    p3 = (1000, 0, h)
    p4 = (-1000, 0, h)
    path = rs.AddLine(p1, p2)
    side = rs.AddLine(p3, p4)
    plate = rs.ExtrudeCurve(path, side)
    rs.DeleteObject(path)
    rs.DeleteObject(side)
    return plate
Exemple #29
0
    def get_cut_curve(self):

        if self.compensation == 0: return rs.CopyObject(self.nurbs_curve)

        offset_distance = self.general_input["cut_diam"] * 0.5

        scl_obj = rs.ScaleObject(self.nurbs_curve, self.point, (1.2, 1.2, 1),
                                 True)
        offset_points = rs.BoundingBox(scl_obj)
        rs.DeleteObject(scl_obj)

        offset_point_a = offset_points[0]
        offset_point_b = self.point
        if not rs.PointInPlanarClosedCurve(self.point, self.nurbs_curve):
            offset_point_b = self.find_point_in_curve(self.nurbs_curve)
        offset_a = rs.OffsetCurve(self.nurbs_curve, offset_point_a,
                                  offset_distance, None, 2)
        offset_b = rs.OffsetCurve(self.nurbs_curve, offset_point_b,
                                  offset_distance, None, 2)

        #Revisa si el offset no genero curvas separadas y si es el caso asigna la curva original como offset comparativo
        if not offset_a or len(offset_a) != 1:
            self.log.append(
                "offset error: el cortador no cabe en una de las curvas, se reemplazo con la curva original."
            )
            if offset_a: rs.DeleteObjects(offset_a)
            offset_a = rs.CopyObject(self.nurbs_curve)

        if not offset_b or len(offset_b) != 1:
            self.log.append(
                "offset error: el cortador no cabe en una de las curvas, se reemplazo con la curva original."
            )
            if offset_b: rs.DeleteObjects(offset_b)
            offset_b = rs.CopyObject(self.nurbs_curve)

        #Revisa el area para saber cual es el offset interno o externo
        if rs.CurveArea(offset_a) < rs.CurveArea(offset_b):
            in_offset = offset_a
            out_offset = offset_b
        else:
            in_offset = offset_b
            out_offset = offset_a
        #Responde dependiendo que compensacion se necesita
        if self.compensation == 1:
            rs.DeleteObject(in_offset)
            return out_offset
        elif self.compensation == -1:
            rs.DeleteObject(out_offset)
            return in_offset
        else:
            rs.DeleteObject(in_offset)
            rs.DeleteObject(out_offset)
            return None
Exemple #30
0
def draw_sikaku(i):
    h = height = 100
    r = radius = 100
    theta = ma.radians(i)
    p1 = (0, 0, 0)
    p2 = (0, 0, h)
    path = rs.AddLine(p1, p2)
    side = rs.AddLine((0, 0, -3), (r * ma.cos(theta), r * ma.sin(theta), -3))
    plate = rs.ExtrudeCurve(side, path)
    rs.DeleteObject(path)
    rs.DeleteObject(side)
    return plate