コード例 #1
0
ファイル: script.py プロジェクト: tkahng/nerv_pyrevit
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
コード例 #2
0
ファイル: DirectShape_Create.py プロジェクト: more600D/Dynamo
def create_directshape(room_collection):
    if room_collection:
        document = room_collection[0].Document
        direct_shapes_col = FilteredElementCollector(document).OfClass(DirectShape).ToElements()
        if direct_shapes_col:
            for shape in direct_shapes_col:
                document.Delete(shape.Id)
        datashape = []
        bad_rooms = []
        for room in room_collection:
            try:
                calculator = SpatialElementGeometryCalculator(document)
                geometry_result = calculator.CalculateSpatialElementGeometry(room)
                room_solid = geometry_result.GetGeometry()
                geometry_objects = List[GeometryObject]()
                geometry_objects.Add(room_solid)
                room_name = room.get_Parameter(BuiltInParameter.ROOM_NAME).AsString()

                ds_type = get_directshape_type(room_name)
                ds = DirectShape.CreateElementInstance(document,
                                                       ds_type.Id,
                                                       ElementId(BuiltInCategory.OST_GenericModel),
                                                       room_name,
                                                       Transform.Identity)
                ds.SetTypeId(ds_type.Id)
                ds.SetShape(geometry_objects)
                datashape.append(ds)
            except Exception:
                bad_rooms.append(room)
        return datashape, bad_rooms
コード例 #3
0
def create_directshape(room_collection, view_name):
    if room_collection:
        document = room_collection[0].Document
        delete_class_elements(DirectShape, document)
        delete_class_elements(DirectShapeType, document)
        datashape = []
        bad_rooms = []
        view = create_view(document, view_name)
        data_colors = get_color_from_colorscheme(document.ActiveView)
        if data_colors:
            for room in room_collection:
                try:
                    calculator = SpatialElementGeometryCalculator(document)
                    geometry_result = calculator.CalculateSpatialElementGeometry(room)
                    room_solid = geometry_result.GetGeometry()
                    geometry_objects = List[GeometryObject]()
                    geometry_objects.Add(room_solid)
                    room_name = room.get_Parameter(BuiltInParameter.ROOM_NAME).AsString()

                    ds_type = get_directshape_type(room_name)
                    ds = DirectShape.CreateElementInstance(document, ds_type.Id, \
                        ElementId(BuiltInCategory.OST_GenericModel), \
                        room_name, Transform.Identity)
                    ds.ApplicationId = uiapp.ActiveAddInId.ToString()
                    ds.ApplicationDataId = room.UniqueId
                    ds.SetTypeId(ds_type.Id)
                    ds.SetShape(geometry_objects)
                    view.SetElementOverrides(ds.Id, get_overidegraphics(data_colors[room_name]))
                    datashape.append(ds)
                except Exception:
                    bad_rooms.append(room)
            return room_collection
        else:
            return 'Перейдите на вид,\r\nгде применена цветовая схема'
コード例 #4
0
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
コード例 #5
0
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
コード例 #6
0
def CreateCubeStrut(csdname, csdwidth, csdlength, csdheight, csdstart,
                    csdrotation, scdthickness):
    #print(csdname)
    vector = XYZ(0, 0, csdheight * -1)
    pp = Plane.CreateByNormalAndOrigin(vector, csdstart)

    trans = Transform.CreateRotationAtPoint(vector, csdrotation, csdstart)

    point1 = csdstart + XYZ(csdwidth / 2, csdlength / 2, 0)
    point2 = csdstart + XYZ(csdwidth / 2 * -1, csdlength / 2, 0)
    point3 = csdstart + XYZ(csdwidth / 2 * -1, csdlength / 2 * -1, 0)
    point4 = csdstart + XYZ(csdwidth / 2, csdlength / 2 * -1, 0)

    profileorigion = CurveLoop().Create([
        Line.CreateBound(point1, point2),
        Line.CreateBound(point2, point3),
        Line.CreateBound(point3, point4),
        Line.CreateBound(point4, point1)
    ])

    finalProfile = CurveLoop.CreateViaTransform(profileorigion, trans)
    geo = GeometryCreationUtilities.CreateExtrusionGeometry([finalProfile],
                                                            vector, csdheight)
    ele = DirectShape.CreateElement(doc, ElementId(-2000151))
    ele.SetShape([geo])
    ele.SetName(csdname)
    return ele.Id
コード例 #7
0
ファイル: script.py プロジェクト: Melca-G/Aeolus
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
コード例 #8
0
ファイル: script.py プロジェクト: Melca-G/Aeolus
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
コード例 #9
0
import clr

clr.AddReference('RevitAPI')
clr.AddReference('RhinoCommon')
clr.AddReference('RhinoInside.Revit')

from Autodesk.Revit.DB import Transaction, ElementId, BuiltInCategory, DirectShape
from Rhino.Geometry import Point3d, Vector3d, Mesh, MeshingParameters, Sphere
from RhinoInside.Revit import Revit

import RhinoInside.Revit
clr.ImportExtensions(RhinoInside.Revit.Convert.Geometry)

doc = Revit.ActiveDBDocument

with Transaction(doc, "Sample7") as trans:
    trans.Start()

    sphere = Sphere(Point3d.Origin, 12 * Revit.ModelUnits)
    brep = sphere.ToBrep()
    meshes = Mesh.CreateFromBrep(brep, MeshingParameters.Default)

    category = ElementId(BuiltInCategory.OST_GenericModel)
    ds = DirectShape.CreateElement(doc, category)

    for mesh in meshes:
        ds.AppendShape(mesh.ToShape())

    trans.Commit()
コード例 #10
0
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
コード例 #11
0
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
    doc.GetElement(elem_id) for elem_id in uidoc.Selection.GetElementIds()
]
first_selected = selection[0]
solid_opt = SolidOptions(ElementId.InvalidElementId,
                         ElementId.InvalidElementId)

bbox = first_selected.get_BoundingBox(None)
bottom_z_offset = 0.1
bbox.Min = XYZ(bbox.Min.X, bbox.Min.Y, bbox.Min.Z - bottom_z_offset)
b1 = XYZ(bbox.Min.X, bbox.Min.Y, bbox.Min.Z)
b2 = XYZ(bbox.Max.X, bbox.Min.Y, bbox.Min.Z)
b3 = XYZ(bbox.Max.X, bbox.Max.Y, bbox.Min.Z)
b4 = XYZ(bbox.Min.X, bbox.Max.Y, bbox.Min.Z)
bbox_height = bbox.Max.Z - bbox.Min.Z

lines = List[Curve]()
lines.Add(Line.CreateBound(b1, b2))
lines.Add(Line.CreateBound(b2, b3))
lines.Add(Line.CreateBound(b3, b4))
lines.Add(Line.CreateBound(b4, b1))
rectangle = [CurveLoop.Create(lines)]

extrusion = GeometryCreationUtilities.CreateExtrusionGeometry(
    List[CurveLoop](rectangle), XYZ.BasisZ, bbox_height, solid_opt)

category_id = ElementId(Bic.OST_GenericModel)

with db.Transaction("solid_bbox_direct_shape") as tx:
    direct_shape = DirectShape.CreateElement(doc, category_id, "A", "B")
    direct_shape.SetShape([extrusion])
コード例 #13
0
a = 0
b = 0
for g_rooms in linkrooms:
    for room in g_rooms:
        if room.Area > 0:
            name = room.get_Parameter(BuiltInParameter.ROOM_NAME).AsString()
            number = room.get_Parameter(
                BuiltInParameter.ROOM_NUMBER).AsString()
            new = name + ';' + number
            list = []
            room.LimitOffset.Set(11)
            shell = room.ClosedShell
            geo = shell.GetEnumerator()
            for g in geo:
                list.append(g)
            ds = DirectShape.CreateElement(doc, id)
            try:
                ds.SetShape(list)
                ds.get_Parameter(
                    BuiltInParameter.ALL_MODEL_INSTANCE_COMMENTS).Set(new)
                a += 1
            except:
                print(room.Id.IntegerValue, new)
                b += 1
                sOptions = SpatialElementBoundaryOptions()
                boundary = room.GetBoundarySegments(sOptions)
                for bo in boundary:
                    print(bo.ToString())

            #elev = round(room.Level.Elevation)
#level2 = None