Ejemplo n.º 1
0
def AddVector(vecdir, base_point):
    if base_point == None:
        base_point = [0, 0, 0]
    tip_point = rs.PointAdd(base_point, vecdir)
    line = rs.AddLine(base_point, tip_point)
    if line:
        return rs.CurveArrows(line, 2)
Ejemplo n.º 2
0
def AddVectorArrow(base, vector):
    vec_normal = rs.VectorUnitize(vector)
    vec_scale = rs.VectorScale(vec_normal, 200)
    p = rs.PointAdd(base, vec_scale)
    line = rs.AddLine(base, p)
    rs.CurveArrows(line, 2)

    return p
Ejemplo n.º 3
0
def plot_reaction_forces(structure, step, layer=None, scale=1.0):
    """ Plots reaction forces for the Structure analysis results.

    Parameters
    ----------
    structure : obj
        Structure object.
    step : str
        Name of the Step.
    layer : str
        Layer name for plotting.
    scale : float
        Scale of the arrows.

    Returns
    -------
    None

    """

    if not layer:
        layer = '{0}-{1}'.format(step, 'reactions')

    rs.CurrentLayer(rs.AddLayer(layer))
    rs.DeleteObjects(rs.ObjectsByLayer(layer))
    rs.EnableRedraw(False)

    rfx = structure.results[step]['nodal']['rfx']
    rfy = structure.results[step]['nodal']['rfy']
    rfz = structure.results[step]['nodal']['rfz']

    nkeys = rfx.keys()
    v = [scale_vector([rfx[i], rfy[i], rfz[i]], -scale * 0.001) for i in nkeys]
    rm = [length_vector(i) for i in v]
    rmax = max(rm)
    nodes = structure.nodes_xyz(nkeys)

    for i in nkeys:

        if rm[i] > 0.001:
            l = rs.AddLine(nodes[i], add_vectors(nodes[i], v[i]))
            rs.CurveArrows(l, 1)
            col = [
                int(j) for j in colorbar(rm[i] / rmax, input='float', type=255)
            ]
            rs.ObjectColor(l, col)
            vector = [rfx[i], rfy[i], rfz[i]]
            name = json.dumps({
                'rfx': rfx[i],
                'rfy': rfy[i],
                'rfz': rfz[i],
                'rfm': length_vector(vector)
            })
            rs.ObjectName(l, '_' + name)

    rs.CurrentLayer(rs.AddLayer('Default'))
    rs.LayerVisible(layer, False)
    rs.EnableRedraw(True)
Ejemplo n.º 4
0
def select_quad_mesh_strip(mesh, text='key'):
	"""Select quad mesh strip.

	Parameters
	----------
	mesh : QuadMesh, CoarseQuadMesh
		The quad mesh or coarse quad mesh.
	text : str
		Optional argument to show the strip key or density. The key by default.

	Returns
	-------
	hashable
		The strip key.
	"""
	
	n = mesh.number_of_strips()

	# different colors per strip
	strip_to_color = {skey: scale_vector([float(i), 0, n - 1 - float(i)], 255 / (n - 1)) for i, skey in enumerate(mesh.strips())}

	rs.EnableRedraw(False)

	# add strip polylines with colors and arrows
	guids_to_strip = {rs.AddPolyline(mesh.strip_edge_midpoint_polyline(skey)): skey for skey in mesh.strips()}
	for guid, skey in guids_to_strip.items():
		rs.ObjectColor(guid, strip_to_color[skey])
		rs.CurveArrows(guid, arrow_style = 3)

	# show strip key or density
	if text == 'key' or text == 'density':
		if text == 'key':
			guids_to_dot = {guid: rs.AddTextDot(skey, Polyline(mesh.strip_edge_midpoint_polyline(skey)).point(t = .5)) for guid, skey in guids_to_strip.items()}
		elif text == 'density':
			guids_to_dot = {guid: rs.AddTextDot(mesh.get_strip_density(skey), Polyline(mesh.strip_edge_midpoint_polyline(skey)).point(t = .5)) for guid, skey in guids_to_strip.items()}
		for guid, dot in guids_to_dot.items():
			rs.ObjectColor(dot, rs.ObjectColor(guid))

	# return polyline strip
	rs.EnableRedraw(True)
	skey = guids_to_strip.get(rs.GetObject('Get strip.', filter = 4), None)
	rs.EnableRedraw(False)

	# delete objects
	rs.DeleteObjects(guids_to_strip.keys())
	if text == 'key' or text == 'density':
		rs.DeleteObjects(guids_to_dot.values())
	
	return skey
Ejemplo n.º 5
0
def AddVector(base, vec):
    rs.AddPoint(base)
    tip = rs.PointAdd(base, vec)
    line = rs.AddLine(base, tip)
    rs.CurveArrows(line, 2)
Ejemplo n.º 6
0
def AddVector(base, vec):
    tip = rs.PointAdd(base, vec)
    line = rs.AddLine(base, tip)
    rs.CurveArrows(line, 2)

    return line
Ejemplo n.º 7
0
        def makeFireStair(rect, landingLevels):
            #HARD VARIABLES
            minGapSize = .2
            minTread = .260
            maxRiser = .180
            thickness = .15

            #(1)Determine Run Direction
            rs.SimplifyCurve(rect)
            rectSegments = rs.ExplodeCurves(rect)
            edge1 = rectSegments[0]
            edge3 = rectSegments[1]
            rs.DeleteObject(rectSegments[2])
            rs.DeleteObject(rectSegments[3])
            if rs.CurveLength(edge1) > rs.CurveLength(edge3):
                longEdge = edge1
                shortEdge = edge3
            else:
                longEdge = edge3
                shortEdge = edge1
            longVec = rs.VectorCreate(rs.CurveStartPoint(longEdge),
                                      rs.CurveEndPoint(longEdge))
            longVecRev = rs.VectorReverse(longVec)
            shortVec = rs.VectorCreate(rs.CurveStartPoint(shortEdge),
                                       rs.CurveEndPoint(shortEdge))
            shortVecRev = rs.VectorReverse(shortVec)
            rs.CurveArrows(longEdge, 2)
            rs.CurveArrows(shortEdge, 2)

            #(2)Stair Width
            stairWidth = (rs.CurveLength(shortEdge) - minGapSize) / 2

            #LandingRect
            landing1Plane = rs.PlaneFromFrame(rs.CurveStartPoint(shortEdge),
                                              shortVecRev, longVecRev)
            landing1 = rs.AddRectangle(landing1Plane,
                                       rs.CurveLength(shortEdge), stairWidth)
            landing2Plane = rs.PlaneFromFrame(rs.CurveEndPoint(longEdge),
                                              shortVec, longVec)
            landing2 = rs.AddRectangle(landing2Plane,
                                       rs.CurveLength(shortEdge), stairWidth)

            #(3)Run Length
            runLength = rs.CurveLength(longEdge) - (stairWidth * 2)

            #RunRects
            run1Plane = rs.PlaneFromFrame(
                rs.CurveEditPoints(landing1)[3], shortVecRev, longVecRev)
            run1Rect = rs.AddRectangle(run1Plane, stairWidth, runLength)
            run2Plane = rs.PlaneFromFrame(
                rs.CurveEditPoints(landing2)[3], shortVec, longVec)
            run2Rect = rs.AddRectangle(run2Plane, stairWidth, runLength)

            #(4)Num Flights between Landings
            numLevels = len(landingLevels)
            deltaLevels = []
            runsPerLevel = []
            maxRisersPerRun = math.floor(runLength / minTread)
            numRuns = 0

            for i in range(0, numLevels - 1):
                deltaLevels.append(landingLevels[i + 1] - landingLevels[i])
                minNumRisers = math.ceil(deltaLevels[i] / maxRiser)
                runsPerLevel.append(math.ceil(minNumRisers / maxRisersPerRun))
                numRuns = numRuns + int(runsPerLevel[i])

            #(5) Which flights

            listOfRuns = []
            for i in range(0, numRuns):
                if i % 2:  #if even
                    listOfRuns.append(rs.CopyObject(run1Rect))
                else:
                    listOfRuns.append(rs.CopyObject(run2Rect))

            #(6) Num Treads per run
            runsDeltaHeight = []
            for i in range(0, numLevels - 1):
                for j in range(0, int(runsPerLevel[i])):
                    runsDeltaHeight.append(deltaLevels[i] / runsPerLevel[i])

            numRisersPerRun = []
            for i in range(0, numRuns):
                numRisersPerRun.append(math.ceil(runsDeltaHeight[i] /
                                                 maxRiser))

            #(7) Move Runs
            elevation = 0
            landings = []
            for i in range(0, numRuns):
                elevation = elevation + runsDeltaHeight[i]
                translation = rs.VectorCreate([0, 0, elevation], [0, 0, 0])
                rs.MoveObject(listOfRuns[i], translation)
                if i % 2:
                    landings.append(
                        rs.MoveObject(rs.CopyObject(landing2), translation))
                else:
                    landings.append(
                        rs.MoveObject(rs.CopyObject(landing1), translation))

            #(8) Make Landings
            stairGeo = []
            for i in range(0, numRuns):
                dir = rs.VectorCreate([0, 0, 0], [0, 0, runsDeltaHeight[i]])
                #rs.MoveObject(landings[i], dir)
                path = rs.AddLine([0, 0, 0], [0, 0, -thickness])
                geo = rs.ExtrudeCurve(landings[i], path)
                rs.CapPlanarHoles(geo)
                stairGeo.append(geo)
                rs.DeleteObject(path)
            rs.DeleteObjects(landings)

            #(9) Draw Stairs
            runs = []
            for i in range(0, numRuns):
                runs.append(
                    Run(listOfRuns[i], runsDeltaHeight[i], numRisersPerRun[i]))
                stairGeo.append(runs[i].make())

            finalGeo = rs.BooleanUnion(stairGeo, delete_input=True)
            #Cleanup
            rs.DeleteObjects(listOfRuns)
            rs.DeleteObjects(rectSegments)
            rs.DeleteObject(landing1)
            rs.DeleteObject(landing2)
            rs.DeleteObject(run1Rect)
            rs.DeleteObject(run2Rect)
            print "done"
            return finalGeo
Ejemplo n.º 8
0
def AddVector(vecdir, base_point=None):
    # Draws a vector (for visualization purposes)
    base_point = base_point or [0, 0, 0]
    tip_point = rs.PointAdd(base_point, vecdir)
    line = rs.AddLine(base_point, tip_point)
    if line: return rs.CurveArrows(line, 2)  # adds an arrow tip
def VectorDraw(vecdir, base_point=[0, 0, 0]):
    """Draws a vector starting at the given base point."""
    tip_point = rs.PointAdd(base_point, vecdir)
    line = rs.AddLine(base_point, tip_point)
    if line: return rs.CurveArrows(line, 2)  # adds an arrow tip
Ejemplo n.º 10
0
#coding=utf-8
import rhinoscriptsyntax as rs
lines = rs.GetObjects("选中直线", rs.filter.curve)
#lines = rs.ObjectsByGroup()
#lines = rs.ObjectsByName(line,True)
if lines:
    for i in lines:
        rs.CurveArrows(i, 2)
Ejemplo n.º 11
0
def drilling(curve_list, surface1, used_line2, unused_line, closest_p):
    split_num = 4
    point_list = []

    if not curve_list:
        # print("tan2: There is not curve")
        return

    if len(curve_list) != 1:
        cur_length = []
        length = 0

        # Message: unable to convert 0530c598-26e0-4ff5-a15a-389bd334aeff into Curve geometry
        for i in range(0, len(curve_list)):
            if rs.IsCurve(curve_list[i]):
                length = rs.CurveLength(curve_list[i])

        cur_length.append(length)

        curve_index = cur_length.index(max(cur_length))
        curve = curve_list[curve_index]

    else:
        curve = curve_list

    domain = rs.CurveDomain(curve)
    t = (domain[1] - domain[0]) / split_num

    for i in range(0, 4):
        dt = t * i
        point = rs.EvaluateCurve(curve, dt)
        point_list.append(point)

    # 直線の交点を求める
    line1 = rs.AddLine(point_list[0], point_list[2])
    line2 = rs.AddLine(point_list[1], point_list[3])

    vec1 = rs.VectorCreate(point_list[2], point_list[0])
    vec2 = rs.VectorCreate(point_list[3], point_list[1])

    cross = rs.VectorCrossProduct(vec1, vec2)
    normal = rs.VectorUnitize(cross)

    curveOnsurface1 = rs.ProjectCurveToSurface(line1, surface1, normal)
    curveOnsurface2 = rs.ProjectCurveToSurface(line2, surface1, normal)

    if len(curveOnsurface1) == 0:  # ttm add プロジェクションされていない可能性があるため
        new_vec1 = rs.VectorReverse(normal)
        curveOnsurface1 = rs.ProjectCurveToSurface(line1, surface1, new_vec1)

    if len(curveOnsurface2) == 0:  # ttm add プロジェクションされていない可能性があるため
        new_vec2 = rs.VectorReverse(normal)
        curveOnsurface2 = rs.ProjectCurveToSurface(line2, surface1, new_vec2)

    if len(curveOnsurface1) == 2 and len(curveOnsurface2) == 2:

        intersection1 = rs.CurveCurveIntersection(curveOnsurface1[0],
                                                  curveOnsurface2[0])
        intersection2 = rs.CurveCurveIntersection(curveOnsurface1[1],
                                                  curveOnsurface2[1])

        # 条件分岐
        if intersection1 is None:
            intersection1 = rs.CurveCurveIntersection(curveOnsurface1[0],
                                                      line2)

            if intersection1 is None:
                intersection1 = rs.CurveCurveIntersection(
                    curveOnsurface2[0], line1)

            if intersection1 is None:
                intersection1 = rs.CurveCurveIntersection(
                    curveOnsurface1[1], line2)

            if intersection1 is None:
                intersection1 = rs.CurveCurveIntersection(
                    curveOnsurface2[1], line1)

            if intersection1 is None:
                intersection1 = rs.CurveCurveIntersection(
                    curveOnsurface1[0], curveOnsurface2[1])
                intersection2 = rs.CurveCurveIntersection(
                    curveOnsurface1[1], curveOnsurface2[0])

    else:
        # normal_reverce = rs.VectorReverse(normal)
        # curveOnsurface1 = rs.ProjectCurveToSurface(line1, surface1, normal)
        # curveOnsurface2 = rs.ProjectCurveToSurface(line2, surface1, normal)

        intersection1 = rs.CurveCurveIntersection(
            curveOnsurface1[0], curveOnsurface2[0])  #index out of range: 0
        intersection2 = None

    # console
    # print("intersection1: %s" % (intersection1))
    # print("intersection2: %s" % (intersection2))

    if intersection1 is None and intersection2 is None:
        center_point = rs.CurveMidPoint(curveOnsurface1[0])

    elif intersection2 is None:
        center_point = intersection1[0][1]

    else:
        center_point1 = intersection1[0][1]
        center_point2 = intersection2[0][1]

        dis1 = rs.Distance(center_point1, closest_p)
        dis2 = rs.Distance(center_point2, closest_p)

        if dis1 > dis2:
            center_point = center_point2
        else:
            center_point = center_point1

    parameter1 = rs.CurveClosestPoint(unused_line, center_point)
    parameter2 = rs.CurveClosestPoint(used_line2, center_point)

    point1 = rs.EvaluateCurve(unused_line, parameter1)  # base point
    point2 = rs.EvaluateCurve(used_line2, parameter2)  # base point

    # ドリル穴のベクトルを生成
    drill_line = rs.AddLine(point1, point2)
    rs.CurveArrows(drill_line, 2)
    rs.ExtendCurveLength(drill_line, 0, 2, 100)

    drill_vec = rs.VectorCreate(point2, point1)

    # 外積計算より回転軸を生成
    start_point = rs.CurveStartPoint(unused_line)
    end_point = rs.CurveEndPoint(unused_line)

    distance1 = rs.Distance(start_point, center_point)
    distance2 = rs.Distance(end_point, center_point)

    if distance1 > distance2:
        select_point = end_point
    else:
        select_point = start_point

    # 回転平面を定義する
    origin_point = center_point
    x_point = point1
    y_point = select_point

    new_plane = rs.PlaneFromPoints(origin_point, x_point, y_point)
    rs.ViewCPlane(None, new_plane)

    rotate_p = origin_point

    vec1 = rs.VectorCreate(x_point, rotate_p)
    vec2 = rs.VectorCreate(y_point, rotate_p)

    cross = rs.VectorCrossProduct(vec1, vec2)
    cross_unit = rs.VectorUnitize(cross)
    rotate_vec = rs.VectorScale(
        cross_unit, 100)  # Message: Could not convert None to a Vector3d

    # 描画
    # new_rotate_axis = AddVector(center_point, rotate_vector)
    # rotate_axis = AddVector(rotate_p, rotate_vec)
    # rs.AddPoint(point1)
    # rs.AddPoint(point2)
    # rs.AddPoint(center_point)

    # object削除
    rs.DeleteObject(line1)
    rs.DeleteObject(line2)
    for i in range(0, len(curveOnsurface1)):
        rs.DeleteObject(curveOnsurface1[i])
    for i in range(0, len(curveOnsurface2)):
        rs.DeleteObject(curveOnsurface2[i])

    # 平面をもとのxy平面に戻す
    origin_point = (0, 0, 0)
    x_point = (100, 0, 0)
    y_point = (0, 100, 0)
    new_plane = rs.PlaneFromPoints(origin_point, x_point, y_point)
    rs.ViewCPlane(None, new_plane)

    # 戻り値(ドリルライン、ドリルベクトル、回転軸、回転軸点)
    return drill_line, drill_vec, rotate_vec, center_point
Ejemplo n.º 12
0
import rhinoscriptsyntax as rs

base_point = ( 20, 10, 5)
vector_A = ( 10, 10, 10)

rs.AddPoint(base_point)
tip_point = rs.PointAdd(base_point, vector_A)
line = rs.AddLine(base_point, tip_point)
rs.CurveArrows(line, 2)
Ejemplo n.º 13
0
def AddVector(vecdir, base_point=[0, 0, 0]):
    tip_point = rs.PointAdd(base_point, vecdir)
    line = rs.AddLine(base_point, tip_point)
    if line: return rs.CurveArrows(line, 2)  # adds an arrow tip
import rhinoscriptsyntax as rs
from compas_rhino.geometry import RhinoMesh
from compas_pattern.datastructures.mesh_quad.mesh_quad import QuadMesh

guids = rs.GetObjects('get quad meshes', filter = 32)
rs.EnableRedraw(False)
for guid in guids:
    mesh = QuadMesh.from_vertices_and_faces(*RhinoMesh.from_guid(guid).get_vertices_and_faces())
    mesh.collect_strips()
    polylines = [rs.AddPolyline(mesh.strip_edge_polyline(skey)) for skey in mesh.strips()]
    for polyline in polylines:
        rs.CurveArrows(polyline, 3)
Ejemplo n.º 15
0
def AddVector(vecdir, base_point):
    tip_point = rs.PointAdd(base_point, vecdir)
    line = rs.AddLine(base_point, tip_point)
    if line: rs.CurveArrows(line, 2)