예제 #1
0
 def project_points(self, points):
     projections = []
     for point in points:
         ppoints = rs.ProjectPointToSurface(point, self.guid, [0, 0, 1])
         if not ppoints:
             raise RhinoSurfaceError('Could not project point to surface.')
         ppoint = ppoints[0]
         projections.append(list(ppoint))
     return projections
예제 #2
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
예제 #3
0
mdl.add([
    RollerDisplacementY(name='disp_top', nodes='nset_top'),
    RollerDisplacementY(name='disp_bot', nodes='nset_bot'),
])

# Loads

mdl.add(GravityLoad(name='load_gravity', elements='elset_mesh'))

mesh = mesh_from_guid(Mesh(), rs.ObjectsByLayer('elset_mesh')[0])
point_loads = {}
for key in mesh.vertices():
    xyz = mesh.vertex_coordinates(key)
    pt = rs.ProjectPointToSurface([xyz],
                                  rs.ObjectsByLayer('surface')[0],
                                  [0, 0, 1])[0]
    pz = mesh.vertex_area(key) * distance_point_point(xyz, pt) * 2400 * 9.81
    point_loads[mdl.check_node_exists(xyz)] = {'z': -pz}
mdl.add(PointLoads(name='load_points', components=point_loads))

# Steps

displacements = ['disp_top', 'disp_bot']
loads = ['load_gravity', 'load_points']

mdl.add([
    GeneralStep(name='step_bc', displacements=displacements),
    GeneralStep(name='step_loads', loads=loads, factor=1.35),
    BucklingStep(name='step_buckle',
                 loads=loads,
예제 #4
0
 def project_point(self, point, direction=(0, 0, 1)):
     projections = rs.ProjectPointToSurface(point, self.guid, direction)
     if not projections:
         return self.closest_point(point)
     return list(projections[0])
예제 #5
0
 def project_points(self, points, direction=(0, 0, 1), include_none=True):
     projections = rs.ProjectPointToSurface(points, self.guid, direction)
     if not projections:
         return self.closest_points(points)
     projections[:] = [self.closest_point(point) if not point else point for point in projections]
     return map(list, projections)
예제 #6
0
stepsx = int(xleng / cellsize) + 1

print stepsy, stepsx

rs.EnableRedraw(False)

ptlist = []

for i in range(stepsy):
    rows = []
    for j in range(stepsx):
        nowpt = [
            j * cellsize + min(xlist), i * cellsize + min(ylist),
            min(zlist)
        ]
        ptonsrf = rs.ProjectPointToSurface(nowpt, srf, [0, 0, 1])
        if len(ptonsrf) > 0:
            rs.AddPoints(ptonsrf)
            rows.append(ptonsrf[0])
        else:
            rows.append(nowpt)
            rs.AddPoint(nowpt)
    ptlist.append(rows)

print len(ptlist), len(rows)
print rows[0]
print rows[1]

#assign variables for text file
ncols = len(ptlist[0])
nrows = len(ptlist)
예제 #7
0
all_points = []
for i in range(0, 100):
    pt = rs.AddPoint(place_pts(100, 100, 100))
    index = rs.PointArrayClosestPoint(cloud, pt)
    cp = cloud[index]
    vect = rs.VectorCreate(cp, pt)
    #move = rs.MoveObject(pt,vect)
    #vector = rs.VectorCreate(index, pt)
    #index_points = rs.PointArrayClosestPoint(pipe_points, pt)
    #vector = rs.VectorCreate(index_points, pt)
    #rs.VectorCreate()
    #unit_vector = rs.VectorUnitize(vector)
    #new_pt = rs.MoveObject(pt, unit_vector)

    project = rs.ProjectPointToSurface(pt, pipe, vect)
    rs.AddPoints(project)

    all_points.append(pt)

#pipe_points = []
#for i in range(300):
#contour = rs.CurveContourPoints(pipe, point1, point2, 1)

#SurfaceDomain requires two arguments, second argument = u or v direction, 0 or 1 respectively
#dom_u = rs.SurfaceDomain(pipe,0)
#dom_v = rs.SurfaceDomain(pipe,1)
#eval_srf = rs.EvaluateSurface()(pipe,uv)

#cloud = rs.GetPoints()
#cloud.append(point1)
    rndm_number = random.uniform(0, max_probability)
    random.seed = random_seed
    param = rs.CurveClosestPoint(boundary_curve, i)
    pt = rs.EvaluateCurve(boundary_curve, param)
    # rndm_cull_points.append(pt)
    distance = rs.Distance(pt, i)
    invert_distance = 1.0 / distance
    # print(str(distance) + str(invert_distance) + ' r: ' + str(rndm_number))
    
    if invert_distance < rndm_number:
        rndm_cull_points.append(i)


# Project points to bottom surface
btm_surface = [bottom_surface] # Create a list with one single element
bottom_pts = rs.ProjectPointToSurface(rndm_cull_points, btm_surface, (0,0,-1))


# Project points to top surface
top_surface = [top_surface] # Create a list with one single element
top_pts = rs.ProjectPointToSurface(rndm_cull_points, top_surface, (0,0,1))


# Planes on the bottom
bottom_planes = []
for i in bottom_pts:
    view = rs.CurrentView()
    planes = rs.CreatePlane(i, (1,0,0), (0,1,0))
    bottom_planes.append(planes)
  
    
예제 #9
0
#set sample resolution
cellResolution = 1000  #mm

#plot 2D grid over surface
stepsY = int(distY / cellResolution) + 1
stepsX = int(distX / cellResolution) + 1

#project points to sand surface
ptList = []
for i in range(0, stepsY):
    row = []
    for j in range(0, stepsX):
        nowPt = [j * cellResolution, i * cellResolution, 0]
        #project points to sand surface
        ptOnSrf = rs.ProjectPointToSurface(nowPt, srf, [0, 0, 1])
        #project points to buildings
        ptOnBld = []
        if blds:
            for k in range(len(blds)):
                tempPtOnBld = rs.ProjectPointToSurface(nowPt, blds[k],
                                                       [0, 0, 1])
                if len(ptOnBld) == 0:
                    ptOnBld = tempPtOnBld
                #print tempPtOnBld, ptOnBld
        if ptOnSrf:

            #check for plant

            row.append([ptOnSrf[0], ptOnBld])  #append plant to this list
        """else:
예제 #10
0
distY = sortList[12][2]
distX = sortList[4][2]

#set sample resolution
cellSizeIdeal = 10  #m

#plot 2D grid over surface
stepsY = int(distY / cellSizeIdeal) + 1
stepsX = int(distX / cellSizeIdeal) + 1

ptList = []
for i in range(0, stepsY):
    row = []
    for j in range(0, stepsX):
        nowPt = [j * cellSizeIdeal, -i * cellSizeIdeal, 0]
        ptOnSrf = rs.ProjectPointToSurface(nowPt, srf, [0, 0, 1])
        if ptOnSrf:
            row.append(ptOnSrf[0])
        else:
            print "no point!"
    ptList.append(row)

#assign variables for text file
ncols = len(ptList[3])
nrows = len(ptList)
xllcorner = 0
yllcorner = 0
cellsize = cellSizeIdeal
NODATA_value = -9999

drawPts(ptList)
예제 #11
0
displacements = ['disp_top', 'disp_bot']

# Loads

mdl.add_load(GravityLoad(name='load_gravity', elements='elset_mesh'))
loads = ['load_gravity', 'load_points']

Gc = 2400 * 9.81
mesh = mesh_from_guid(Mesh(), rs.ObjectsByLayer('elset_mesh')[0])
surface = rs.ObjectsByLayer('surface')[0]
point_loads = {}

for key in mesh.vertices():
    xyz = mesh.vertex_coordinates(key)
    node = mdl.check_node_exists(xyz)
    pt = rs.ProjectPointToSurface([xyz], surface, [0, 0, 1])[0]
    pz = mesh.vertex_area(key) * distance_point_point(xyz, pt) * Gc
    point_loads[node] = {'z': -pz}
mdl.add_load(PointLoads(name='load_points', components=point_loads))

# Steps

mdl.add_steps([
    GeneralStep(name='step_bc', displacements=displacements),
    GeneralStep(name='step_loads', loads=loads, increments=300, factor=1.35),
    BucklingStep(name='step_buckle',
                 loads=loads,
                 displacements=displacements,
                 modes=1)
])
mdl.steps_order = ['step_bc', 'step_loads', 'step_buckle']