def CreateStraightPipe(name, diameter, thickness, startO, endO, length): #correction = XYZ(0, 0, diameter/2) #print("Diameter" + str(diameter)) #print(name) correction = XYZ(0, 0, 0) start = startO + correction end = endO + correction #print(name) #print(length) if (end - start).GetLength() > 0.1: pp = Plane.CreateByNormalAndOrigin(end - start, start) profile = CurveLoop().Create([ Arc.Create(pp, diameter / 2 + thickness, 0, math.pi), Arc.Create(pp, diameter / 2 + thickness, math.pi, math.pi * 2) ]) geo = GeometryCreationUtilities.CreateExtrusionGeometry([profile], end - start, length) ele = DirectShape.CreateElement(doc, ElementId(-2000151)) ele.SetShape([geo]) ele.SetName(name) return ele.Id else: print("Duct too small") return None
def CreateCurvePipe(name, diameter, thickness, startO, endO, middleO): #print(name) # print("Diameter" + str(diameter)) #correction = XYZ(0, 0, diameter / 2) correction = XYZ(0, 0, 0) start = startO + correction end = endO + correction middle = middleO + correction #print(name) #print(start) #print(end) #print(middle) path = Arc.Create(start, end, middle) pathCurve = CurveLoop().Create([path]) pp = Plane.CreateByNormalAndOrigin( path.ComputeDerivatives(0, True).BasisX, start) profile = CurveLoop().Create([ Arc.Create(pp, diameter / 2 + thickness, 0, math.pi), Arc.Create(pp, diameter / 2 + thickness, math.pi, math.pi * 2) ]) geo = GeometryCreationUtilities.CreateSweptGeometry( pathCurve, 0, path.GetEndParameter(0), [profile]) ele = DirectShape.CreateElement(doc, ElementId(-2000151)) ele.SetShape([geo]) ele.SetName(name) return ele.Id
def CreateRoundStrutwithCone(name, diameter, start, height, coneHeight, topDiameter, frameHeight): #print(name) vector = XYZ(0, 0, height*-1) coneVector = XYZ(0, 0, (coneHeight-frameHeight)*-1) frameVector = XYZ(0, 0, frameHeight * -1) pp = Plane.CreateByNormalAndOrigin(vector, start + coneVector + frameVector*2) ppCone = Plane.CreateByNormalAndOrigin(vector, start + frameVector) ppFrame = Plane.CreateByNormalAndOrigin(vector, start) frameProfile = CurveLoop().Create([Arc.Create(ppFrame, topDiameter/2, 0, math.pi), Arc.Create(ppFrame, topDiameter/2, math.pi, math.pi*2)]) coneProfile = CurveLoop().Create([Arc.Create(ppCone, topDiameter/2 + frameHeight + 1/12, 0, math.pi), Arc.Create(ppCone, topDiameter/2 + frameHeight + 1/12, math.pi, math.pi*2)]) profile = CurveLoop().Create([Arc.Create(pp, diameter/2, 0, math.pi), Arc.Create(pp, diameter/2, math.pi, math.pi*2)]) frame = GeometryCreationUtilities.CreateExtrusionGeometry([frameProfile], frameVector, frameHeight) geo = GeometryCreationUtilities.CreateExtrusionGeometry([profile], vector, height - coneHeight-frameHeight) try: cone = GeometryCreationUtilities.CreateLoftGeometry([coneProfile, profile], SolidOptions(ElementId.InvalidElementId, ElementId.InvalidElementId)) # Create Element ele = DirectShape.CreateElement(doc, ElementId(-2000151)) ele.SetShape([geo, cone, frame]) ele.SetName(name) return ele.Id except: ele = DirectShape.CreateElement(doc, ElementId(-2000151)) ele.SetShape([geo, frame]) ele.SetName(name) return ele.Id
def CreateRoundStrut(name, diameter, start, height): vector = XYZ(0, 0, height * -1) print(name) print(height) pp = Plane.CreateByNormalAndOrigin(vector, start) profile = CurveLoop().Create([ Arc.Create(pp, diameter / 2, 0, math.pi), Arc.Create(pp, diameter / 2, math.pi, math.pi * 2) ]) geo = GeometryCreationUtilities.CreateExtrusionGeometry([profile], vector, height) ele = DirectShape.CreateElement(doc, ElementId(-2000151)) ele.SetShape([geo]) ele.SetName(name) return ele.Id
def CreateStraightPipe(name, diameter, thickness, startO, endO, length): correction = XYZ(0, 0, diameter / 2) start = startO + correction end = endO + correction print(name) print(length) pp = Plane.CreateByNormalAndOrigin(end - start, start) profile = CurveLoop().Create([ Arc.Create(pp, diameter / 2 + thickness, 0, math.pi), Arc.Create(pp, diameter / 2 + thickness, math.pi, math.pi * 2) ]) geo = GeometryCreationUtilities.CreateExtrusionGeometry([profile], end - start, length) ele = DirectShape.CreateElement(doc, ElementId(-2000151)) ele.SetShape([geo]) ele.SetName(name) return ele.Id
def print_arc(cls, point, plane=None, radius=0.3): doc = __revit__.ActiveUIDocument.Document active_view = doc.ActiveView creDoc = __revit__.ActiveUIDocument.Document.Create if not plane: plane = Plane.CreateByNormalAndOrigin(active_view.ViewDirection, point) sketchPlane = SketchPlane.Create(doc, plane) new_arc = Arc.Create(point, radius, 0, pi * 2, plane.XVec, plane.YVec) m_line = creDoc.NewModelCurve(new_arc, sketchPlane) return m_line
def CreateCurveDuct(name, width, height, thickness, startO, endO, middleO): #correction = XYZ(0, 0, height / 2) correction = XYZ(0, 0, 0) #print(name) start = startO + correction end = endO + correction middle = middleO + correction ele = () if start.X == end.X and start.Y == end.Y and start.Z == end.Z: print("Curve error, start is the same as end") return None else: path = Arc.Create(start, end, middle) #print(name) #print(start) #print(end) #print(middle) #print(path.Center) pathCurve = CurveLoop().Create([path]) pp = Plane.CreateByNormalAndOrigin( path.ComputeDerivatives(0, True).BasisX, start) profile1 = Arc.Create(pp, width / 2 + thickness, 0, math.pi) normalVec = path.ComputeDerivatives(0, True).BasisX interVector = XYZ((normalVec).Y * -1, (normalVec).X, 0) a = profile1.GetEndPoint(0) vector1 = a - start vector2 = XYZ((a - start).X, (a - start).Y, 0) # angle = vector2.AngleTo(vector1) angle = vector1.AngleOnPlaneTo(interVector, (end - start).Normalize()) #print(angle) trans1 = Transform.CreateRotationAtPoint( path.ComputeDerivatives(0, True).BasisX, angle, start) trans2 = Transform.CreateRotationAtPoint( path.ComputeDerivatives(0, True).BasisX, angle * (-1), start) trans3 = Transform.CreateRotationAtPoint( path.ComputeDerivatives(0, True).BasisX, angle * (-1) + math.pi / 2, start) trans4 = Transform.CreateRotationAtPoint( path.ComputeDerivatives(0, True).BasisX, angle + math.pi / 2, start) b = profile1.GetEndPoint(1) profile2 = Arc.Create(pp, height / 2 + thickness, math.pi / 2, math.pi * 3 / 2) c = profile2.GetEndPoint(0) d = profile2.GetEndPoint(1) point1 = a + c - start point2 = b + c - start point3 = b + d - start point4 = a + d - start numbers = {} list = [] l1 = Line.CreateBound(point1, point2) l1Test1 = l1.CreateTransformed(trans1) l1Test2 = l1.CreateTransformed(trans2) l1Test3 = l1.CreateTransformed(trans3) l1Test4 = l1.CreateTransformed(trans4) numbers[abs(l1Test1.GetEndPoint(0).Z - l1Test1.GetEndPoint(1).Z)] = trans1 numbers[abs(l1Test2.GetEndPoint(0).Z - l1Test2.GetEndPoint(1).Z)] = trans2 numbers[abs(l1Test3.GetEndPoint(0).Z - l1Test3.GetEndPoint(1).Z)] = trans3 numbers[abs(l1Test4.GetEndPoint(0).Z - l1Test4.GetEndPoint(1).Z)] = trans4 list.append(abs(l1Test1.GetEndPoint(0).Z - l1Test1.GetEndPoint(1).Z)) list.append(abs(l1Test2.GetEndPoint(0).Z - l1Test2.GetEndPoint(1).Z)) list.append(abs(l1Test3.GetEndPoint(0).Z - l1Test3.GetEndPoint(1).Z)) list.append(abs(l1Test4.GetEndPoint(0).Z - l1Test4.GetEndPoint(1).Z)) list.sort() profileorigion = CurveLoop().Create([ Line.CreateBound(point1, point2), Line.CreateBound(point2, point3), Line.CreateBound(point3, point4), Line.CreateBound(point4, point1) ]) profile = CurveLoop.CreateViaTransform(profileorigion, numbers[list[0]]) geo = GeometryCreationUtilities.CreateSweptGeometry( pathCurve, 0, path.GetEndParameter(0), [profile]) ele = DirectShape.CreateElement(doc, ElementId(-2000151)) ele.SetShape([geo]) ele.SetName(name) return ele.Id
def CreateStraightDuct(csdname, csdwidth, csdheight, thickness, csdstartO, csdendO, csdlength): #print(csdname) #correction = XYZ(0, 0, csdheight / 2) correction = XYZ(0, 0, 0) csdstart = csdstartO + correction csdend = csdendO + correction if (csdend - csdstart).GetLength() > 0.1: pp = Plane.CreateByNormalAndOrigin(csdend - csdstart, csdstart) profile1 = Arc.Create(pp, csdwidth / 2 + thickness, 0, math.pi) interVector = XYZ((csdend - csdstart).Y * -1, (csdend - csdstart).X, 0) a = profile1.GetEndPoint(0) b = profile1.GetEndPoint(1) profile2 = Arc.Create(pp, csdheight / 2 + thickness, math.pi / 2, math.pi * 3 / 2) c = profile2.GetEndPoint(0) d = profile2.GetEndPoint(1) point1 = a + c - csdstart point2 = b + c - csdstart point3 = b + d - csdstart point4 = a + d - csdstart l1 = Line.CreateBound(point1, point2) vector1 = point1 - point2 vector2 = XYZ((point1 - point2).X, (point1 - point2).Y, 0) #print(vector1) #print(vector2) angle = vector1.AngleOnPlaneTo(interVector, (csdend - csdstart).Normalize()) #angle = vector2.AngleTo(vector1) #print(angle) #print(point1) #print(point2) trans1 = Transform.CreateRotationAtPoint(csdend - csdstart, angle, csdstart) trans2 = Transform.CreateRotationAtPoint(csdend - csdstart, angle * (-1), csdstart) trans3 = Transform.CreateRotationAtPoint(csdend - csdstart, angle * (-1) + math.pi / 2, csdstart) trans4 = Transform.CreateRotationAtPoint(csdend - csdstart, angle + math.pi / 2, csdstart) #print(angle) #print(angle*(-1)) #print(angle * (-1) + math.pi/2) #print(angle + math.pi / 2) #print(point4) profileorigion = CurveLoop().Create([ Line.CreateBound(point1, point2), Line.CreateBound(point2, point3), Line.CreateBound(point3, point4), Line.CreateBound(point4, point1) ]) #print(l1.GetEndPoint(0)) #print(l1.GetEndPoint(1)) numbers = {} list = [] l1Test1 = l1.CreateTransformed(trans1) l1Test2 = l1.CreateTransformed(trans2) l1Test3 = l1.CreateTransformed(trans3) l1Test4 = l1.CreateTransformed(trans4) numbers[abs(l1Test1.GetEndPoint(0).Z - l1Test1.GetEndPoint(1).Z)] = trans1 numbers[abs(l1Test2.GetEndPoint(0).Z - l1Test2.GetEndPoint(1).Z)] = trans2 numbers[abs(l1Test3.GetEndPoint(0).Z - l1Test3.GetEndPoint(1).Z)] = trans3 numbers[abs(l1Test4.GetEndPoint(0).Z - l1Test4.GetEndPoint(1).Z)] = trans4 list.append(abs(l1Test1.GetEndPoint(0).Z - l1Test1.GetEndPoint(1).Z)) list.append(abs(l1Test2.GetEndPoint(0).Z - l1Test2.GetEndPoint(1).Z)) list.append(abs(l1Test3.GetEndPoint(0).Z - l1Test3.GetEndPoint(1).Z)) list.append(abs(l1Test4.GetEndPoint(0).Z - l1Test4.GetEndPoint(1).Z)) list.sort() finalProfile = CurveLoop.CreateViaTransform(profileorigion, numbers[list[0]]) geo = GeometryCreationUtilities.CreateExtrusionGeometry( [finalProfile], csdend - csdstart, csdlength) ele = DirectShape.CreateElement(doc, ElementId(-2000151)) ele.SetShape([geo]) ele.SetName(csdname) return ele.Id else: print("Duct too small") return None
def AngleAdjustment(csdend, csdstart, csdwidth, csdheight, thickness): pp = Plane.CreateByNormalAndOrigin(csdend - csdstart, csdstart) interVector = XYZ((csdend - csdstart).Y * -1, (csdend - csdstart).X, 0) profile1 = Arc.Create(pp, csdwidth / 2 + thickness, 0, math.pi) #print(pp.XVec) #print(pp.YVec) a = profile1.GetEndPoint(0) b = profile1.GetEndPoint(1) profile2 = Arc.Create(pp, csdheight / 2 + thickness, math.pi / 2, math.pi * 3 / 2) c = profile2.GetEndPoint(0) d = profile2.GetEndPoint(1) point1 = a + c - csdstart point2 = b + c - csdstart point3 = b + d - csdstart point4 = a + d - csdstart l1 = Line.CreateBound(point1, point2) vector1 = point1 - point2 vector2 = XYZ((point1 - point2).X, (point1 - point2).Y, 0) vector3 = point1 - point4 #print(vector1) #print(vector2) angle = vector1.AngleOnPlaneTo(interVector, (csdend - csdstart).Normalize()) #print(angle) #print(point1) #print(point2) trans1 = Transform.CreateRotationAtPoint(csdend - csdstart, angle, point2) trans2 = Transform.CreateRotationAtPoint(csdend - csdstart, angle * (-1), point2) trans3 = Transform.CreateRotationAtPoint(csdend - csdstart, angle * (-1) + math.pi / 2, point2) trans4 = Transform.CreateRotationAtPoint(csdend - csdstart, angle + math.pi / 2, point2) #print(angle) #print(angle*(-1)) #print(angle * (-1) + math.pi/2) #print(angle + math.pi / 2) #print(point4) profileorigion = CurveLoop().Create([ Line.CreateBound(point1, point2), Line.CreateBound(point2, point3), Line.CreateBound(point3, point4), Line.CreateBound(point4, point1) ]) #print(l1.GetEndPoint(0)) #print(l1.GetEndPoint(1)) numbers = {} list = [] l1Test1 = l1.CreateTransformed(trans1) l1Test2 = l1.CreateTransformed(trans2) l1Test3 = l1.CreateTransformed(trans3) l1Test4 = l1.CreateTransformed(trans4) #print(l1Test1.GetEndPoint(0)) #print(l1Test1.GetEndPoint(1)) #print(l1Test2.GetEndPoint(0)) #print(l1Test2.GetEndPoint(1)) #print(l1Test3.GetEndPoint(0)) #print(l1Test3.GetEndPoint(1)) #print(l1Test4.GetEndPoint(0)) #print(l1Test4.GetEndPoint(1)) numbers[abs(l1Test1.GetEndPoint(0).Z - l1Test1.GetEndPoint(1).Z)] = trans1 numbers[abs(l1Test2.GetEndPoint(0).Z - l1Test2.GetEndPoint(1).Z)] = trans2 numbers[abs(l1Test3.GetEndPoint(0).Z - l1Test3.GetEndPoint(1).Z)] = trans3 numbers[abs(l1Test4.GetEndPoint(0).Z - l1Test4.GetEndPoint(1).Z)] = trans4 list.append(abs(l1Test1.GetEndPoint(0).Z - l1Test1.GetEndPoint(1).Z)) list.append(abs(l1Test2.GetEndPoint(0).Z - l1Test2.GetEndPoint(1).Z)) list.append(abs(l1Test3.GetEndPoint(0).Z - l1Test3.GetEndPoint(1).Z)) list.append(abs(l1Test4.GetEndPoint(0).Z - l1Test4.GetEndPoint(1).Z)) list.sort()