예제 #1
0
파일: script.py 프로젝트: rheesk22/pyrevit
def reorient():
    face = revit.pick_face()

    if face:
        with revit.Transaction('Orient to Selected Face'):
            # calculate normal
            if HOST_APP.is_newer_than(2015):
                normal_vec = face.ComputeNormal(DB.UV(0, 0))
            else:
                normal_vec = face.Normal

            # create base plane for sketchplane
            if HOST_APP.is_newer_than(2016):
                base_plane = \
                    DB.Plane.CreateByNormalAndOrigin(normal_vec, face.Origin)
            else:
                base_plane = DB.Plane(normal_vec, face.Origin)

            # now that we have the base_plane and normal_vec
            # let's create the sketchplane
            sp = DB.SketchPlane.Create(revit.doc, base_plane)

            # orient the 3D view looking at the sketchplane
            revit.active_view.OrientTo(normal_vec.Negate())
            # set the sketchplane to active
            revit.uidoc.ActiveView.SketchPlane = sp

        revit.uidoc.RefreshActiveView()
예제 #2
0
def orientsectionbox(view):
    try:
        face = revit.pick_face()
        box = view.GetSectionBox()
        norm = face.ComputeNormal(DB.UV(0, 0)).Normalize()
        boxNormal = box.Transform.Basis[0].Normalize()
        angle = norm.AngleTo(boxNormal)
        axis = DB.XYZ(0, 0, 1.0)
        origin = DB.XYZ(box.Min.X + (box.Max.X - box.Min.X) / 2,
                        box.Min.Y + (box.Max.Y - box.Min.Y) / 2, 0.0)
        if norm.Y * boxNormal.X < 0:
            rotate = \
                DB.Transform.CreateRotationAtPoint(axis, Math.PI / 2 - angle,
                                                   origin)
        else:
            rotate = DB.Transform.CreateRotationAtPoint(axis, angle, origin)
        box.Transform = box.Transform.Multiply(rotate)
        with revit.Transaction('Orient Section Box to Face'):
            view.SetSectionBox(box)
            revit.uidoc.RefreshActiveView()
    except Exception:
        pass
예제 #3
0
"""Pickup painted surface material and apply to other surfaces."""
#pylint: disable=E0401,C0111,W0613,C0103,broad-except
from pyrevit import revit, UI
from pyrevit import forms

with forms.WarningBar(title='Pick source object:'):
    source_face = revit.pick_face()

if source_face:
    material_id = source_face.MaterialElementId
    material = revit.doc.GetElement(material_id)

    with forms.WarningBar(title='Pick faces to match materials:'):
        while True:
            try:
                dest_ref = \
                    revit.uidoc.Selection.PickObject(
                        UI.Selection.ObjectType.Face
                        )
            except Exception:
                break

            if not dest_ref:
                break

            dest_element = revit.doc.GetElement(dest_ref)
            dest_face = dest_element.GetGeometryObjectFromReference(dest_ref)

            with revit.Transaction('Match Painted Materials'):
                revit.doc.Paint(dest_element.Id, dest_face, material_id)
예제 #4
0
                                            DB.XYZ(0, 0, 1))
    result = []
    for i in NewCurve.GetCurveLoopIterator():
        result.append(i)
    return result


def EdgeArrayArrayToList(EdgeArray):
    _List = List[DB.Curve]()
    for i in EdgeArray:
        for c in i:
            _List.Add(c.AsCurve())
    return _List


picked = revit.pick_face()

#for i in picked.get_Geometry(DB.Options ()):
#for c in i.GetInstanceGeometry():
#	print(c)
#	c=i


class BAT_Room:
    def __init__(self, Room):
        self.Room = Room
        self.WrapedRoom = db.Element(self.Room)
        self.RoomLevelId = self.Room.Level.Id
        self.RoomLevel = self.Room.Level

    @property