def OnFormClosed(self, sender, e): generatedStair = rs.ObjectsByName( "GdC9V&^a^rGZZNgiWFH&aTRQLLscu*9AZCmhk8t2!a") generatedHandrail = rs.ObjectsByName( "qe7g&G5LzXEvbudtPT8xCxQbisusFVqCPqMsiHK2jc") rs.DeleteObjects(rs.ObjectsByName( "xAbJgNV6^bz6azN&6E$Q^WeX$Dd^vygCz5z7Hmynb5")) rs.DeleteObjects(rs.ObjectsByName("BC6#DT5LCQX*#8r97Tquf5gNF")) if generatedStair: rs.DeleteObject(generatedStair) if generatedHandrail: rs.DeleteObjects(generatedHandrail) self.Close(False)
def OnOKButtonClick(self, sender, e): # remove object name to avoid deletion generatedStair = rs.ObjectsByName( "GdC9V&^a^rGZZNgiWFH&aTRQLLscu*9AZCmhk8t2!a") generatedHandrail = rs.ObjectsByName( "qe7g&G5LzXEvbudtPT8xCxQbisusFVqCPqMsiHK2jc") rs.DeleteObjects(rs.ObjectsByName( "xAbJgNV6^bz6azN&6E$Q^WeX$Dd^vygCz5z7Hmynb5")) rs.DeleteObjects(rs.ObjectsByName("BC6#DT5LCQX*#8r97Tquf5gNF")) if generatedStair: rs.ObjectName(generatedStair, name="www.landarchtools.com") if generatedHandrail: rs.ObjectName(generatedHandrail, name="www.landarchtools.com") self.Close(True)
def get_objects(name=None, color=None, layer=None): guids = rs.AllObjects() if name: guids = list(set(guids) & set(rs.ObjectsByName(name))) if color: guids = list(set(guids) & set(rs.ObjectsByColor(color))) if layer: guids = list(set(guids) & set(rs.ObjectsByLayer(layer))) return guids
def RestoreWorldCoordinate(): try: rs.EnableRedraw(False) # retreive northing and easting from text object obj = rs.ObjectsByName("_ORIGIN_TEXT_") if obj: text = rs.TextObjectText(obj) textList = text.split() easting = float(textList[1]) northing = float(textList[3]) # create reference coordinates to make vector orPoint = (easting, northing, 0) point = rs.PointCoordinates(rs.ObjectsByName("_ORIGIN_POINT_")) vector = rs.VectorCreate(orPoint, point) # move all objects back to original origin point allObj = rs.AllObjects() rs.MoveObjects(allObj, vector) # delete coordinate geometry isCurrent = rs.IsLayerCurrent("_ORIGIN_") if isCurrent == False: rs.PurgeLayer("_ORIGIN_") if isCurrent == True: defaultCheck = rs.IsLayer("Default") if defaultCheck == True: rs.CurrentLayer("Default") rs.PurgeLayer("_ORIGIN_") if defaultCheck == False: rs.AddLayer("Default") rs.CurrentLayer("Default") rs.PurgeLayer("_ORIGIN_") rs.EnableRedraw(True) except: print("Failed to execute") rs.EnableRedraw(True) return
def get_num_layer(): count = 0 objID = [] while 1: count += 1 zero_str = '000000' objName = 'Layer: ' + zero_str[:-len(str(count))] + str(count) + ' Wall1' objID.append(rs.ObjectsByName(objName)) if objID[-1] == []: # rs.HideObjects(objID[:]) return count - 1
def get_objects(name=None, color=None, layer=None, type=None): """Get identifiers of Rhino objects, potentially filtered by name, color, layer, or type. Parameters ---------- name : str, optional color : tuple or list, optional RGB color components in integer format (0-255). layer : str, optional type : Rhino.DocObjects.ObjectType, optional The object type. Returns ------- list The GUIDs of the objects matching the filter parameters. Examples -------- .. code-block:: python import compas_rhino guids_all = compas_rhino.get_objects() guids_compas = compas_rhino.get_objects(name='COMPAS.*') guids_red = compas_rhino.get_objects(color=(255, 0, 0)) guids_points = compas_rhino.get_objects(type=compas_rhino.rs.filter.point) guids_redpoints = compas_rhino.get_objects(color=(255, 0, 0), type=compas_rhino.rs.filter.point) .. code-block:: python guids_all = set(compas_rhino.get_objects()) guids_compas = set(compas_rhino.get_objects(name='COMPAS.*')) guids_red = set(compas_rhino.get_objects(color=(255, 0, 0))) guids_points = set(compas_rhino.get_objects(type=compas_rhino.rs.filter.point)) guids_redpoints = set(compas_rhino.get_objects(color=(255, 0, 0), type=compas_rhino.rs.filter.point)) print guids_compas.issubset(guids_all) print guids_all.issubset(guids_compas) # True, False print guids_red.issubset(guids_all) print guids_points.issubset(guids_all) print guids_redpoints.issubset(guids_all) # True, True, True print guids_redpoints.issubset(guids_points) print guids_redpoints.issubset(guids_red) print guids_points.issubset(guids_red) # True, True, False """ guids = rs.AllObjects() if name: guids = list(set(guids) & set(rs.ObjectsByName(name))) if color: guids = list(set(guids) & set(rs.ObjectsByColor(color))) if layer: guids = list(set(guids) & set(rs.ObjectsByLayer(layer))) if type: guids = list(set(guids) & set(rs.ObjectsByType(type))) return guids
elevation = rs.GetReal("what's the elevation angle?") # ask for an elevation angle, just like up top azimuth = rs.GetReal("what's the azimuth angle?") # ask for an azimuth angle azimuth *= -1 # flip the azimuth - because by default, rhino rotates things CCW, and compasses go CW # rotate that first point to the elevation angle # rotate works like this: RotateObject( object_to_rotate, center_point, angle_to_rotate, rotation_axis, copy_yes/no ) rs.RotateObject(starterPt, [0,0,0], elevation, axis=[1,0,0], copy=True) rs.RotateObject(rs.FirstObject(), [0,0,0], azimuth, axis=[0,0,1], copy=False) # do the same thing for the azimuth listOfPoints.append(rs.FirstObject()) # once we have the final location, add that point to our listOfPoints list rs.CurrentLayer("sun rays") # switch to the sun rays layer sunRay = rs.AddLine([0,0,0],rs.FirstObject()) # on that layer, draw a line for the ray rs.CurrentLayer(dayName) # switch back to the current day (for the next loop) #this is the end of the "for loop" - note how the next "if" statement isn't indented as much if(listOfPoints): # check whether listOfPoints has anything in it sunpath = rs.AddInterpCurve(listOfPoints) # add an interpolated curve (one that goes THROUGH the points) newsunpath = rs.PullCurve(sunSphere, sunpath, False) # pull that curve to the sphere rs.ObjectName(newsunpath, dayName) # name it using the 'dayName' variable from earlier - fyi, object names show up if you type 'properties' in rhino rs.DeleteObject(sunpath) # delete the old (non-pulled) curve crvstojoin = rs.ObjectsByName(dayName, True) # sometimes pulling breaks up a curve, so we have to gather all those pieces if (len(crvstojoin) > 1): # if, in fact, there are multiple curves crvstojoin = rs.JoinCurves(crvstojoin, True) # join them rs.ObjectName(crvstojoin, dayName) # for some reason joining things kills their names - so if you want, rename the final curve rs.DeleteObject(starterPt) # finally, delete that original point that we copied and rotated around rs.DeleteObject(sunSphere) # and delete the sphere. else: # if we didn't successfully get points or radius print "please enter positive values!" # explain why nothing happened
def handrailGen(self, sender, e): flip = self.flipC.Checked hType = self.handrailTypeC.SelectedIndex handrailOffset = int(self.handrailOffsetC.Value) * scale tread = int(self.treadC.Value) * scale riser = int(self.riserC.Value) * scale numSteps = int(self.numStepsC.Value) hEndLength = int(self.handrailExtensionC.Value) * scale pipeDiameter = int(self.handrailDiameterC.Value) * scale hHeight = int(self.handrailHeightC.Value) * scale topLine = rs.AddLine(line[0], line[1]) rs.ObjectName(topLine, "BC6#DT5LCQX*#8r97Tquf5gNF") topPoint = line[0] genHandrail = self.genHandrailBool.Checked rs.EnableRedraw(False) if genHandrail == False: iteration = rs.ObjectsByName( "qe7g&G5LzXEvbudtPT8xCxQbisusFVqCPqMsiHK2jc") if iteration: rs.DeleteObjects(iteration) rs.EnableRedraw(True) if genHandrail == True: # Delete any existing iteration iteration = rs.ObjectsByName( "qe7g&G5LzXEvbudtPT8xCxQbisusFVqCPqMsiHK2jc") if iteration: rs.DeleteObjects(iteration) # get perp line - length of stair t = rs.CurveClosestPoint(topLine, topPoint) planeNormal = rs.CurveNormal(topLine) tangent = rs.CurveTangent(topLine, t) if flip == False: curveNormal = rs.VectorCrossProduct(planeNormal, tangent) else: curveNormal = rs.VectorReverse( rs.VectorCrossProduct(planeNormal, tangent)) # Get guide curve scaledV = rs.VectorReverse( rs.VectorScale(curveNormal, tread*numSteps)) ptGuide1 = rs.AddPoint(line[0]) ptGuide2 = rs.CopyObject(ptGuide1, scaledV) rs.MoveObjects([ptGuide1, ptGuide2], [ 0, 0, (riser*numSteps)*-1]) curve = rs.AddCurve([ptGuide1, ptGuide2]) # Get vector for step run vectorRun = rs.VectorCreate( topPoint, topPoint + curveNormal * tread) # Setup curves for handrail curve1 = curve curve2 = rs.MoveObject(rs.CopyObject(curve1, rs.VectorCreate(line[1], rs.CurveStartPoint(curve1))), [0, 0, (riser * numSteps)*-1]) midPoint = rs.CurveMidPoint(userCurve) # Main slanted handrail curve pt1 = rs.MoveObject(rs.MoveObject(rs.CurveStartPoint(curve1), vectorRun), [ 0, 0, hHeight + (riser*numSteps)]) pt2 = rs.MoveObject(rs.MoveObject( rs.CurveEndPoint(curve1), vectorRun), [0, 0, hHeight]) mainCurve = rs.AddCurve([pt1, pt2]) # Top leveled handrail curve at 300mm standard DDA pt3 = rs.CopyObject(pt1, rs.VectorReverse( rs.VectorScale(rs.VectorUnitize(vectorRun), hEndLength))) topCurve = rs.AddCurve([pt1, pt3]) # Bottom leveled handrail curve at 300mm standard DDA pt4 = rs.CopyObject(pt2, rs.VectorScale( rs.VectorUnitize(vectorRun), hEndLength)) bottomCurve = rs.AddCurve([pt2, pt4]) # Start list of construction geometry for later cleanup hGeoList = [curve1, curve2, pt1, pt2, mainCurve, pt3, topCurve, pt4, bottomCurve, ptGuide1, ptGuide2, curve, topLine] # IF STATEMENTS FOR HANDRAIL TYPE # 1 180 degree, no return if hType == 0: # Lower Handrail return hpt1 = rs.CopyObject(pt4, [0, 0, (pipeDiameter * 2) * -1]) hpt2 = rs.MoveObject(rs.CopyObject( pt4, [0, 0, pipeDiameter * -1]), rs.VectorScale(rs.VectorUnitize(vectorRun), pipeDiameter)) lowerH = rs.AddArc3Pt(pt4, hpt1, hpt2) # Upper Handrail return hpt3 = rs.CopyObject(pt3, [0, 0, (pipeDiameter * 2) * -1]) hpt4 = rs.MoveObject(rs.CopyObject(pt3, [0, 0, pipeDiameter * -1]), rs.VectorReverse( rs.VectorScale(rs.VectorUnitize(vectorRun), pipeDiameter))) upperH = rs.AddArc3Pt(pt3, hpt3, hpt4) # Draw leg upper lpt1 = rs.CurveMidPoint(topCurve) lpt2 = rs.CopyObject(lpt1, [0, 0, hHeight*-1]) lCurveUpper = rs.AddCurve([lpt1, lpt2]) # Draw leg lower lpt3 = rs.CopyObject(pt2, [0, 0, hHeight*-1]) lCurveLower = rs.AddCurve([pt2, lpt3]) # Make vectors to move handrails into place moveShort = rs.VectorScale(userVector, handrailOffset) moveLong = rs.VectorScale( userVector, rs.CurveLength(userCurve) - (handrailOffset*2)) # Join, offset skeleton hCurve = rs.JoinCurves( [mainCurve, topCurve, bottomCurve, lowerH, upperH]) hCurve1 = rs.CopyObject(hCurve, moveShort) lCurveUpper1 = rs.CopyObject(lCurveUpper, moveShort) lCurveLower1 = rs.CopyObject(lCurveLower, moveShort) # Pipe skeleton pipe1 = rs.AddPipe( hCurve1, 0, pipeDiameter/2, blend_type=0, cap=1) pipe2 = rs.AddPipe( lCurveUpper1, 0, pipeDiameter/2, blend_type=0, cap=1) pipe3 = rs.AddPipe( lCurveLower1, 0, pipeDiameter/2, blend_type=0, cap=1) # form list of generated geo handrailGeo1 = [pipe1, pipe2, pipe3] # Name geo for deletion for i in handrailGeo1: rs.ObjectName( i, "qe7g&G5LzXEvbudtPT8xCxQbisusFVqCPqMsiHK2jc") # copy handrailGeo2 = rs.CopyObjects(handrailGeo1, moveLong) # Cleanup construction linework hGeoList.extend([hpt1, hpt2, lowerH, hpt3, hpt4, upperH, lpt2, lpt3, lCurveLower, hCurve, hCurve1, lCurveUpper1, lCurveLower1, lCurveUpper]) rs.DeleteObjects(hGeoList) rs.EnableRedraw(True) # 2 180 degree, full return if hType == 1: rs.EnableRedraw(False) # Lower handrail return hpt1 = rs.CopyObject(pt4, [0, 0, (hEndLength/3)*-2]) hpt2 = rs.CopyObject(pt2, [0, 0, (hEndLength/3)*-2]) hCurve11 = rs.AddPolyline([pt4, hpt1, hpt2]) lowerH = rs.JoinCurves([bottomCurve, hCurve11]) # Upper handrail return hpt3 = rs.CopyObject(pt3, [0, 0, (hEndLength/3)*-2]) hpt4 = rs.CopyObject(rs.CurveMidPoint( topCurve), [0, 0, (hEndLength/3)*-2]) hCurve2 = rs.AddPolyline([pt3, hpt3, hpt4]) upperH = rs.JoinCurves([topCurve, hCurve2]) # Draw leg upper lpt1 = rs.CurveMidPoint(topCurve) lpt2 = rs.CopyObject(lpt1, [0, 0, hHeight*-1]) lCurveUpper = rs.AddCurve([lpt1, lpt2]) # Draw leg lower lpt3 = rs.CopyObject(pt2, [0, 0, hHeight*-1]) lCurveLower = rs.AddCurve([pt2, lpt3]) # Make vectors to move handrails into place moveShort = rs.VectorScale(userVector, handrailOffset) moveLong = rs.VectorScale( userVector, rs.CurveLength(userCurve) - (handrailOffset*2)) # Pipe skeleton move hCurve1 = rs.JoinCurves([lowerH, upperH, mainCurve]) rs.MoveObjects( [hCurve1, lCurveUpper, lCurveLower], moveShort) # Pipe pipe1 = rs.AddPipe( hCurve1, 0, pipeDiameter/2, blend_type=0, cap=1) pipe2 = rs.AddPipe( lCurveUpper, 0, pipeDiameter/2, blend_type=0, cap=1) pipe3 = rs.AddPipe( lCurveLower, 0, pipeDiameter/2, blend_type=0, cap=1) handrailGeo1 = [pipe1, pipe2, pipe3] # Name geo for deletion for i in handrailGeo1: rs.ObjectName( i, "qe7g&G5LzXEvbudtPT8xCxQbisusFVqCPqMsiHK2jc") # Move and copy into position handrailGeo2 = rs.CopyObjects(handrailGeo1, moveLong) # Cleanup hGeoList.extend([hpt1, hpt2, hCurve11, lowerH, hpt3, hpt4, hCurve2, upperH, lpt2, lCurveUpper, lpt3, lCurveLower, hCurve1]) rs.DeleteObjects(hGeoList) rs.EnableRedraw(True) # 3 Ground triangle return if hType == 2: rs.EnableRedraw(False) # Draw leg upper lpt1 = rs.CurveMidPoint(topCurve) lpt2 = rs.CopyObject(lpt1, [0, 0, hHeight*-1]) lCurveUpper = rs.AddCurve([lpt1, lpt2]) # Draw leg lower lpt3 = rs.CopyObject(pt2, [0, 0, hHeight*-1]) lCurveLower = rs.AddCurve([pt2, lpt3]) # Lower Return lowerH = rs.AddCurve([pt4, lpt3]) # Upper Return upperH = rs.AddCurve([pt3, lpt2]) # Make vectors to move handrails into place moveShort = rs.VectorScale(userVector, handrailOffset) moveLong = rs.VectorScale( userVector, rs.CurveLength(userCurve) - (handrailOffset*2)) # Join Curves and move hCurve = rs.JoinCurves( [mainCurve, topCurve, bottomCurve, lowerH, upperH]) rs.MoveObjects( [hCurve, lCurveUpper, lCurveLower], moveShort) # pipe pipe1 = rs.AddPipe(hCurve, 0, pipeDiameter / 2, blend_type=0, cap=1) pipe2 = rs.AddPipe( lCurveUpper, 0, pipeDiameter/2, blend_type=0, cap=1) pipe3 = rs.AddPipe( lCurveLower, 0, pipeDiameter/2, blend_type=0, cap=1) handrailGeo1 = [pipe1, pipe2, pipe3] # Name geo for deletion for i in handrailGeo1: rs.ObjectName( i, "qe7g&G5LzXEvbudtPT8xCxQbisusFVqCPqMsiHK2jc") # move and copy into place handrailGeo2 = rs.CopyObjects(handrailGeo1, moveLong) # Cleanup hGeoList.extend( [lpt2, lCurveUpper, lpt3, lCurveLower, lowerH, upperH, hCurve, topLine]) rs.DeleteObjects(hGeoList) rs.EnableRedraw(True) # 4 Ground return if hType == 3: rs.EnableRedraw(False) # Draw leg upper lpt1 = rs.CurveMidPoint(topCurve) lpt2 = rs.CopyObject(lpt1, [0, 0, hHeight*-1]) lCurveUpper = rs.AddCurve([lpt1, lpt2]) # Draw leg lower lpt3 = rs.CopyObject(pt2, [0, 0, hHeight*-1]) lCurveLower = rs.AddCurve([pt2, lpt3]) # Lower Return hpt1 = rs.CopyObject(pt4, [0, 0, hHeight*-1]) hCurve1 = rs.AddCurve([pt4, hpt1]) # Upper Return hpt2 = rs.CopyObject(pt3, [0, 0, hHeight*-1]) hCurve2 = rs.AddCurve([pt3, hpt2]) # Join curves hCurve = rs.JoinCurves( [mainCurve, topCurve, bottomCurve, hCurve1, hCurve2]) # Get Vectors moveShort = rs.VectorScale(userVector, handrailOffset) moveLong = rs.VectorScale( userVector, rs.CurveLength(userCurve) - (handrailOffset*2)) # move rs.MoveObjects( [hCurve, lCurveUpper, lCurveLower], moveShort) # Pipe pipe1 = rs.AddPipe(hCurve, 0, pipeDiameter / 2, blend_type=0, cap=1) pipe2 = rs.AddPipe( lCurveUpper, 0, pipeDiameter/2, blend_type=0, cap=1) pipe3 = rs.AddPipe( lCurveLower, 0, pipeDiameter/2, blend_type=0, cap=1) handrailGeo1 = [pipe1, pipe2, pipe3] # Name geo for deletion for i in handrailGeo1: rs.ObjectName( i, "qe7g&G5LzXEvbudtPT8xCxQbisusFVqCPqMsiHK2jc") # move and copy into place handrailGeo2 = rs.CopyObjects(handrailGeo1, moveLong) # Clean up hGeoList.extend([lpt2, lCurveUpper, lpt3, lCurveLower, hpt1, hCurve1, hpt2, hCurve2, hCurve, topLine]) rs.DeleteObjects(hGeoList) rs.EnableRedraw(True) # 5 Wall return if hType == 4: rs.EnableRedraw(False) # Draw leg upper lpt1 = rs.CurveMidPoint(topCurve) lpt2 = rs.CopyObject(lpt1, [0, 0, hHeight*-1]) lCurveUpper = rs.AddCurve([lpt1, lpt2]) # Draw leg lower lpt3 = rs.CopyObject(pt2, [0, 0, hHeight*-1]) lCurveLower = rs.AddCurve([pt2, lpt3]) # get vectors vector1 = rs.VectorScale(rs.VectorUnitize( rs.VectorReverse(userVector)), handrailOffset) vector2 = rs.VectorScale( userVector, rs.CurveLength(userCurve)) # Lower Return hpt1 = rs.CopyObject(pt4, vector1) hCurve1 = rs.AddCurve([pt4, hpt1]) # Upper Return hpt2 = rs.CopyObject(pt3, vector1) hCurve2 = rs.AddCurve([pt3, hpt2]) # Join main curves hCurveMain1 = rs.JoinCurves( [mainCurve, topCurve, bottomCurve]) # Get Vectors moveShort = rs.VectorScale(userVector, handrailOffset) moveLong = rs.VectorScale( userVector, rs.CurveLength(userCurve) - handrailOffset) # Copy hanrail 2 hCurveMain2 = rs.CopyObject(hCurveMain1, moveLong) hCurve3 = rs.CopyObject(hCurve1, vector2) hCurve4 = rs.CopyObject(hCurve2, vector2) lCurveUpper2 = rs.CopyObject(lCurveUpper, moveLong) lCurveLower2 = rs.CopyObject(lCurveLower, moveLong) # Join curves hCurveJoined1 = rs.JoinCurves( [hCurve1, hCurve2, hCurveMain1]) hCurveJoined2 = rs.JoinCurves( [hCurveMain2, hCurve3, hCurve4, ]) # Pipe pipe1 = rs.AddPipe( hCurveJoined1, 0, pipeDiameter/2, blend_type=0, cap=1) pipe2 = rs.AddPipe( lCurveLower, 0, pipeDiameter/2, blend_type=0, cap=1) pipe3 = rs.AddPipe( lCurveUpper, 0, pipeDiameter/2, blend_type=0, cap=1) pipe4 = rs.AddPipe( hCurveJoined2, 0, pipeDiameter/2, blend_type=0, cap=1) pipe5 = rs.AddPipe( lCurveUpper2, 0, pipeDiameter/2, blend_type=0, cap=1) pipe6 = rs.AddPipe( lCurveLower2, 0, pipeDiameter/2, blend_type=0, cap=1) handrailGeo1 = [pipe1, pipe2, pipe3, pipe3, pipe4, pipe5, pipe6] # Name geo for deletion for i in handrailGeo1: rs.ObjectName( i, "qe7g&G5LzXEvbudtPT8xCxQbisusFVqCPqMsiHK2jc") # Move handrail 1 into place rs.MoveObjects([pipe1, pipe2, pipe3], moveShort) # Cleanup hGeoList.extend([lpt2, lCurveUpper, lpt3, lCurveLower, hpt1, hCurve1, hpt2, hCurve2, hCurveMain1, hCurveMain2, hCurve3, hCurve4, lCurveUpper2, lCurveLower2, hCurveJoined1, hCurveJoined2]) rs.DeleteObjects(hGeoList) rs.EnableRedraw(True)
def stairGen(self, sender, e): # Variables and defaults tread = int(self.treadC.Value) * scale riser = int(self.riserC.Value) * scale numSteps = int(self.numStepsC.Value) flip = self.flipC.Checked stairLength = tread * numSteps genStair = self.genStairBool.Checked curveList = [] junkList = [] # get user line for top width of stair rs.EnableRedraw(False) if genStair == False: iteration = rs.ObjectsByName( "GdC9V&^a^rGZZNgiWFH&aTRQLLscu*9AZCmhk8t2!a") if iteration: rs.DeleteObject(iteration) rs.EnableRedraw(True) if genStair == True: # Delete any existing iteration iteration = rs.ObjectsByName( "GdC9V&^a^rGZZNgiWFH&aTRQLLscu*9AZCmhk8t2!a") if iteration: rs.DeleteObject(iteration) topLine = rs.AddLine(line[0], line[1]) topPoint = line[0] stepPoint = topPoint # get perp line - length of stair t = rs.CurveClosestPoint(topLine, topPoint) planeNormal = rs.CurveNormal(topLine) tangent = rs.CurveTangent(topLine, t) curveNormal = rs.VectorCrossProduct(planeNormal, tangent) # Get vector vectorRun = rs.VectorCreate( topPoint, topPoint + curveNormal * tread) # Bool flip direction of stair (add bool option in GUI) if flip == True: vector = rs.VectorReverse(vectorRun) else: vector = vectorRun # loop through number of steps to gen step curve for i in range(numSteps): pt01 = rs.AddPoint(stepPoint) pt02 = rs.CopyObject(pt01, vector) pt03 = rs.CopyObject(pt02, [0, 0, riser*-1]) curve = rs.AddPolyline([pt01, pt02, pt03]) curveList.append(curve) stepPoint = rs.CurveEndPoint(curve) rs.DeleteObjects([pt01, pt02, pt03]) # Extrude stair curve to full width joinedCurve = rs.JoinCurves(curveList) bottomPoint = rs.CopyObject( line[0], [0, 0, (riser*numSteps)*-1]) stairBottom = rs.CurveEndPoint(joinedCurve) curve = rs.AddPolyline([line[0], bottomPoint, stairBottom]) # createhandrail curve and return it handRailCurve = rs.AddCurve([bottomPoint, stairBottom]) curveList.append(curve) joinedCurves = rs.JoinCurves(curveList) stair = rs.ExtrudeCurveStraight(joinedCurves, line[0], line[1]) rs.CapPlanarHoles(stair) # this identifies the generated stair geometry rs.ObjectName( stair, "GdC9V&^a^rGZZNgiWFH&aTRQLLscu*9AZCmhk8t2!a") # clean up leftover geometry junkList.extend([bottomPoint, joinedCurve, joinedCurves, topLine, handRailCurve]) junkList = junkList + curveList rs.DeleteObjects(junkList) rs.EnableRedraw(True)
points = data['OBJECT GEOMETRY - POINT COORDINATES'] lines = data['OBJECT GEOMETRY - LINES 01 - GENERAL'] areas = data['OBJECT GEOMETRY - AREAS 01 - GENERAL'] design_strips = data['OBJECT GEOMETRY - DESIGN STRIPS'] # Add structural points for key, attr in points.iteritems(): rs.CurrentLayer('s_points') obj = rs.AddPoint([attr['GlobalX'], attr['GlobalY'], attr['GlobalZ']]) if obj: rs.ObjectName(obj, str(key)) # Add structural lines for key, attr in lines.iteritems(): rs.CurrentLayer('s_lines') start = rs.coerce3dpoint(rs.ObjectsByName('Point ' + attr['PointI'])[0]) end = rs.coerce3dpoint(rs.ObjectsByName('Point ' + attr['PointJ'])[0]) if start and end: rs.AddLine(start, end) # Add structural areas for key, attr in areas.iteritems(): rs.CurrentLayer('s_areas') numPoints = int(attr['NumPoints']) point_list = [] for i in xrange(numPoints): point_list.append( rs.coerce3dpoint( rs.ObjectsByName('Point ' + attr['Point' + str(i + 1)])[0])) point_list.append(point_list[0]) outline = rs.AddPolyline(point_list)
def get_shape_named(name): return shape_from_ref(rh.ObjectsByName(name, False, False, False)[0])
def get_name_for_retrieval(): name = rs.GetString("Enter 'h' or 'v'") select = True guids = rs.ObjectsByName(name, select) rs.SelectObjects(guids)