示例#1
0
    def testCreate(self):

        room = self.fixture.createRoom()

        t = revitron.Transaction()
        tag = revitron.RoomTag.center(room)
        t.commit()
        self.assertEquals(tag.Id.IntegerValue,
                          _(room).getTags()[0].Id.IntegerValue)

        t = revitron.Transaction()
        tag = revitron.RoomTag.topLeft(room)
        t.commit()
        self.assertEquals(tag.Id.IntegerValue,
                          _(room).getTags()[0].Id.IntegerValue)

        t = revitron.Transaction()
        tag = revitron.RoomTag.topRight(room)
        t.commit()
        self.assertEquals(tag.Id.IntegerValue,
                          _(room).getTags()[0].Id.IntegerValue)

        t = revitron.Transaction()
        tag = revitron.RoomTag.bottomLeft(room)
        t.commit()
        self.assertEquals(tag.Id.IntegerValue,
                          _(room).getTags()[0].Id.IntegerValue)

        t = revitron.Transaction()
        tag = revitron.RoomTag.bottomRight(room)
        t.commit()
        self.assertEquals(tag.Id.IntegerValue,
                          _(room).getTags()[0].Id.IntegerValue)
示例#2
0
 def testOrthoGridIntersections(self):
     ortho = revitron.OrthoGrid
     xyz = revitron.DB.XYZ
     with revitron.Transaction():
         x1 = ortho.newLineX(10, 'x1')
         x2 = ortho.newLineX(20, 'x2')
         x3 = ortho.newLineX(30, 'x3')
         x4 = ortho.newLineX(40, 'x4')
         y1 = ortho.newLineY(40, 'y1')
         y2 = ortho.newLineY(30, 'y2')
         y3 = ortho.newLineY(20, 'y3')
         y4 = ortho.newLineY(10, 'y4')
     point = xyz(22, 33, 0)
     grid = ortho()
     intersectionTopLeft = grid.closestIntersectionToPointTopLeft(point)
     intersectionBottomRight = grid.closestIntersectionToPointBottomRight(
         point)
     self.assertEquals(intersectionTopLeft.nameX, 'x2')
     self.assertEquals(intersectionTopLeft.X, 20)
     self.assertEquals(intersectionTopLeft.nameY, 'y1')
     self.assertEquals(intersectionTopLeft.Y, 40)
     self.assertEquals(intersectionBottomRight.nameX, x3.Name)
     self.assertNotEquals(intersectionBottomRight.nameX, x2.Name)
     self.assertEquals(intersectionBottomRight.X, 30)
     self.assertEquals(intersectionBottomRight.nameY, y2.Name)
     self.assertEquals(intersectionBottomRight.Y, 30)
示例#3
0
 def createGenericModelFamily(self):
     temp = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'temp')
     file = os.path.join(
         temp,
         '{}-genericModel-Revit{}.rfa'.format(int(time.time()),
                                              revitron.APP.VersionNumber))
     try:
         os.mkdir(temp)
     except:
         pass
     famDoc = revitron.Create.familyDoc('Metric Generic Model', file)
     self.context(famDoc)
     p = revitron.DB.XYZ
     points = [p(0, 0, 0), p(10, 0, 0), p(10, 10, 0), p(0, 10, 0)]
     crvArrArr = revitron.DB.CurveArrArray()
     crvArrArr.Append(self.polygon(points))
     transaction = revitron.Transaction(famDoc)
     transaction.commit()
     opt = revitron.DB.SaveAsOptions()
     opt.OverwriteExistingFile = True
     famDoc.SaveAs(file, opt)
     loaded = famDoc.LoadFamily(self.mainDoc)
     famDoc.Close(True)
     self.context()
     return loaded
示例#4
0
    def getDependent(self, filterClass=None):
        """
		Returns a list of dependent elements.

		Args:
			filterClass (class, optional): An optional class to filter the list of dependent elements by. Defaults to None.

		Returns:
			list: The list with the dependent Revit elements.
		"""
        import revitron
        from revitron import _
        # The GetDependentElements() method doesn't exist in older Revit API versions.
        # Therefore it is required to fallback to a more compatible way of getting those dependent elements
        # in case an execption is raised.
        # The fallback solution basically tries to get the list of affected IDs when trying to delete
        # the actual parent element within a transaction that will be cancelled.
        try:
            fltr = None
            if filterClass:
                fltr = revitron.DB.ElementClassFilter(filterClass)
            dependentIds = self._element.GetDependentElements(fltr)
        except:
            sub = revitron.Transaction()
            ids = revitron.DOC.Delete(self._element.Id)
            sub.rollback()
            if filterClass:
                dependentIds = revitron.Filter(ids).byClass(
                    filterClass).noTypes().getElementIds()
            else:
                dependentIds = revitron.Filter(ids).noTypes().getElementIds()
        dependent = []
        for eId in dependentIds:
            dependent.append(_(eId).element)
        return dependent
示例#5
0
 def testGetSet(self):
     wall = self.fixture.createWall()
     t = revitron.Transaction()
     _(wall).set('Test', 'Value')
     _(wall).set('Comments', 'Some comment')
     t.commit()
     self.assertEquals(_(wall).get('Test'), 'Value')
     self.assertEquals(_(wall).get('Comments'), 'Some comment')
示例#6
0
    def testNumericFilters(self):
        w1 = self.fixture.createWall([0, 10], [10, 10])
        w2 = self.fixture.createWall([0, 20], [10, 20])

        with revitron.Transaction():
            _(w1).set('num', 1, 'Number').set('int', 1, 'Integer')
            _(w2).set('num', 5, 'Number').set('int', 5, 'Integer')

        f = revitron.Filter
        toStr = utils.idsToStr
        self.assertEquals(
            toStr([w1.Id]),
            toStr(f().byCategory('Walls').byNumberIsEqual(
                'num', 1).noTypes().getElementIds()))
        self.assertEquals(
            toStr([w1.Id]),
            toStr(f().byCategory('Walls').byNumberIsEqual(
                'int', 1).noTypes().getElementIds()))
        self.assertEquals(
            toStr([w2.Id]),
            toStr(f().byCategory('Walls').byNumberIsEqual(
                'num', '5').noTypes().getElementIds()))
        self.assertEquals(
            toStr([w2.Id]),
            toStr(f().byCategory('Walls').byNumberIsEqual(
                'int', '5').noTypes().getElementIds()))
        self.assertEquals(
            toStr([w2.Id]),
            toStr(f().byCategory('Walls').byNumberIsGreater(
                'num', 1).noTypes().getElementIds()))
        self.assertEquals(
            toStr([w2.Id]),
            toStr(f().byCategory('Walls').byNumberIsGreater(
                'int', 1).noTypes().getElementIds()))
        self.assertEquals(
            toStr([w1.Id, w2.Id]),
            toStr(f().byCategory('Walls').byNumberIsGreaterOrEqual(
                'num', 1).noTypes().getElementIds()))
        self.assertEquals(
            toStr([w1.Id, w2.Id]),
            toStr(f().byCategory('Walls').byNumberIsGreaterOrEqual(
                'int', 1).noTypes().getElementIds()))
        self.assertEquals(
            toStr([w1.Id]),
            toStr(f().byCategory('Walls').byNumberIsLess(
                'num', 5).noTypes().getElementIds()))
        self.assertEquals(
            toStr([w1.Id]),
            toStr(f().byCategory('Walls').byNumberIsLess(
                'int', 5).noTypes().getElementIds()))
        self.assertEquals(
            toStr([w1.Id, w2.Id]),
            toStr(f().byCategory('Walls').byNumberIsLessOrEqual(
                'num', 5).noTypes().getElementIds()))
        self.assertEquals(
            toStr([w1.Id, w2.Id]),
            toStr(f().byCategory('Walls').byNumberIsLessOrEqual(
                'int', 5).noTypes().getElementIds()))
示例#7
0
 def testGridLines(self):
     newLine = revitron.Create.GridLineLinear
     xyz = revitron.DB.XYZ
     with revitron.Transaction():
         l1 = newLine(xyz(0, 0, 0), xyz(20, 10, 0), 'A')
         l2 = newLine(xyz(0, 0, 0), xyz(0, 20, 0), 'B')
         l3 = newLine(xyz(10, 0, 0), xyz(10, 100, 0), 'C')
         l4 = newLine(xyz(10, 5, 0), xyz(0, 5, 0), 'D')
     grid = revitron.Grid()
     ortho = revitron.OrthoGrid()
     gridNames = sorted(grid.lines.keys())
     orthoXNames = sorted(ortho.lines.X.keys())
     orthoYNames = sorted(ortho.lines.Y.keys())
     self.assertEqual(''.join(gridNames), 'ABCD')
     self.assertEqual(''.join(orthoXNames), 'BC')
     self.assertEqual(''.join(orthoYNames), 'D')
     self.assertNotEquals(''.join(orthoXNames), 'BCD')
示例#8
0
    def testParameterStorageTypes(self):

        wall = _(self.fixture.createWall())

        with revitron.Transaction():
            wall.set('param1', 'Test & Text').set('param2', 10, 'Integer')

        self.assertEquals(
            str(revitron.ParameterUtils.getStorageType('param1')), 'String')
        self.assertEquals(
            str(revitron.ParameterUtils.getStorageType('param2')), 'Integer')
        self.assertEquals(
            str(revitron.ParameterUtils.getStorageType('Comments')), 'String')
        self.assertEquals(str(revitron.ParameterUtils.getStorageType('Area')),
                          'Double')
        self.assertEquals(
            str(revitron.ParameterUtils.getStorageType('Number')), 'Integer')
示例#9
0
    def testParameterTemplate(self):

        wall = _(self.fixture.createWall())
        info = _(revitron.DOC.ProjectInformation)

        with revitron.Transaction():
            wall.set('param1', 'Test & Text').set('param2', 10, 'Integer')
            info.set('projectParam', 'Project Name')

        self.assertEquals(
            'Project_Name: Test_Text-10',
            revitron.ParameterTemplate(
                wall.element, '{%projectParam%}: {param1}-{param2}').render())
        self.assertEquals(
            'Project Name: Test & Text-10',
            revitron.ParameterTemplate(wall.element,
                                       '{%projectParam%}: {param1}-{param2}',
                                       False).render())
示例#10
0
    def set(self, key, data):
        """
		Updates or creates a config storage entry.

		Example::
		
			config = revitron.DocumentConfigStorage()
			config.set('name', value)
			
		Args:
			key (string): The storage entry key
			data (mixed): The value of the entry
		"""
        import revitron

        self.storage[key] = data
        # Remove empty items.
        self.storage = dict((k, v) for k, v in self.storage.iteritems() if v)
        raw = json.dumps(self.storage, sort_keys=True, ensure_ascii=False)
        t = revitron.Transaction()
        revitron._(self.info).set(self.storageName, raw)
        t.commit()
    def printSheet(self,
                   sheet,
                   size,
                   orientation='Landscape',
                   directory=False,
                   template=False):
        """
        Prints a sheet.

        Args:
            sheet (object): A Revit sheet
            size (string): A size name like A0 or A4
            orientation (string, optional): The orientation, 'Landscape' or 'Portrait'. Defaults to 'Landscape'.
            directory (string, optional): A custom output directory. Defaults to False.
            template (string, optional): A name template. Defaults to '{Sheet Number}-{Sheet Name}'.

        Returns:
            bool: False on error, True on success
        """
        import revitron

        if revitron.Element(sheet).getClassName() != 'ViewSheet':
            print(':face_with_rolling_eyes: Element is not a sheet!')
            return False

        if not directory:
            directory = self.output

        if not template:
            template = '{Sheet Number}-{Sheet Name}'

        path = os.path.join(
            directory,
            revitron.ParameterTemplate(sheet, template).render() + '.pdf')

        if not os.path.exists(os.path.dirname(path)):
            os.makedirs(os.path.dirname(path))

        transaction = revitron.Transaction()

        viewSet = revitron.DB.ViewSet()
        viewSet.Insert(sheet)

        viewSheetSetting = self.manager.ViewSheetSetting
        viewSheetSetting.CurrentViewSheetSet.Views = viewSet
        viewSheetSetting.SaveAs("_temp_")

        self.manager.PrintSetup.SaveAs("_temp_")
        self.manager.Apply()

        orientation = getattr(revitron.DB.PageOrientationType, orientation)

        # Set current print page settings.
        printParameters = self.manager.PrintSetup.CurrentPrintSetting.PrintParameters
        printParameters.ZoomType = revitron.DB.ZoomType.Zoom
        printParameters.Zoom = 100
        printParameters.PaperPlacement = revitron.DB.PaperPlacementType.Center
        printParameters.PageOrientation = orientation
        printParameters.PaperSize = self.sizes[size]
        printParameters.RasterQuality = revitron.DB.RasterQualityType.High

        # Set in-session print settings.
        printParameters = self.manager.PrintSetup.InSession.PrintParameters
        printParameters.ZoomType = revitron.DB.ZoomType.Zoom
        printParameters.Zoom = 100
        printParameters.PaperPlacement = revitron.DB.PaperPlacementType.Center
        printParameters.PageOrientation = orientation
        printParameters.PaperSize = self.sizes[size]
        printParameters.RasterQuality = revitron.DB.RasterQualityType.High

        # Again save settings.
        try:
            self.manager.PrintSetup.Save()
        except:
            self.manager.PrintSetup.SaveAs("_temp2_")

        self.manager.Apply()
        self.manager.SubmitPrint(sheet)
        viewSheetSetting.Delete()

        transaction.rollback()

        # Move file form temp output to directory.
        timePassed = time.time()
        moved = False

        while (time.time() - timePassed) < 30 and not moved:
            time.sleep(0.5)
            tempFiles = glob.glob(self.tempOutputPattern(sheet))
            if tempFiles:
                tempFile = tempFiles[0]
                time.sleep(2)
                if os.access(tempFile, os.W_OK):
                    try:
                        shutil.move(tempFile, path)
                        moved = True
                    except:
                        pass

        if moved:
            return path

        return False
示例#12
0
    def testStringFilters(self):

        w1 = self.fixture.createWall([0, 10], [10, 10])
        w2 = self.fixture.createWall([0, 20], [10, 20])
        w3 = self.fixture.createWall([0, 30], [10, 30])
        w4 = self.fixture.createWall([0, 40], [10, 40])
        w5 = self.fixture.createWall([0, 50], [10, 50])

        with revitron.Transaction():
            _(w1).set('test', 'an awesome test wall')
            _(w2).set('test', 'another awesome test wall')
            _(w3).set('test', 'and one more wall')
            _(w4).set('Comments', 'test comment')

        f = revitron.Filter
        toStr = utils.idsToStr

        self.assertEquals(
            toStr([w1.Id, w2.Id]),
            toStr(f().byStringContains('test',
                                       'awesome').noTypes().getElementIds()))

        self.assertEquals(
            toStr([w4.Id, w5.Id]),
            toStr(f().byCategory('Walls').byStringContains(
                'test', 'wall', True).noTypes().getElementIds()))

        self.assertEquals(
            toStr([w4.Id, w5.Id]),
            toStr(f().byCategory('OST_Walls').byStringContains(
                'test', 'wall', True).noTypes().getElementIds()))

        self.assertEquals(
            toStr([w3.Id]),
            toStr(f().byStringBeginsWith('test',
                                         'and one').noTypes().getElementIds()))

        self.assertEquals(
            toStr([w1.Id, w2.Id, w3.Id]),
            toStr(f().byStringEndsWith('test',
                                       'wall').noTypes().getElementIds()))

        self.assertEquals(
            toStr([w3.Id]),
            toStr(f().byStringEquals(
                'test', 'and one more wall').noTypes().getElementIds()))

        self.assertEquals(
            toStr([w4.Id]),
            toStr(f().byStringEquals(
                'Comments', 'test comment').noTypes().getElementIds()))

        self.assertEquals(
            toStr([w2.Id, w3.Id]),
            toStr(f().byStringContainsOneInCsv(
                'test', 'one, another').noTypes().getElementIds()))

        self.assertEquals(
            toStr([w1.Id, w4.Id, w5.Id]),
            toStr(f().byCategory('Walls').byStringContainsOneInCsv(
                'test', 'one, another', True).noTypes().getElementIds()))

        self.assertEquals(
            toStr([w1.Id, w3.Id]),
            toStr(f().byStringEqualsOneInCsv(
                'test', 'an awesome test wall, and one more wall').noTypes().
                  getElementIds()))
示例#13
0
import revitron
from revitronui import RoomTags

transaction = revitron.Transaction()
RoomTags.add(revitron.RoomTag.bottomRight,
             'Select Room Tag Type (Bottom Right)')
transaction.commit()
示例#14
0
 def createGenericModelInstance(self, family, location):
     for symbolId in family.GetFamilySymbolIds():
         transaction = revitron.Transaction(suppressWarnings=True)
         instance = revitron.Create.familyInstance(symbolId, location)
         transaction.commit()
         return instance
示例#15
0
    def testParameterSet(self):

        wall = self.fixture.createWall()

        with revitron.Transaction():
            _(wall).set('text', 'some text')
            _(wall).set('integer', 5, 'Integer')
            _(wall).set('integerAuto', 5)
            _(wall).set('number', 10.5, 'Number')
            _(wall).set('numberAuto', 10.5)
            _(wall).set('length', 5, 'Length')
            _(wall).set('Comments', 'some comment')

        self.assertEquals(
            str(revitron.Parameter(wall, 'integer').parameter.StorageType),
            'Integer')
        self.assertEquals(
            str(revitron.Parameter(wall, 'integerAuto').parameter.StorageType),
            'Integer')
        self.assertEquals(
            str(revitron.Parameter(wall, 'number').parameter.StorageType),
            'Double')
        self.assertEquals(
            str(revitron.Parameter(wall, 'numberAuto').parameter.StorageType),
            'Double')
        self.assertEquals(
            str(revitron.Parameter(wall, 'length').parameter.StorageType),
            'Double')

        self.assertEquals(
            'Text',
            str(
                revitron.Parameter(wall,
                                   'text').parameter.Definition.ParameterType))
        self.assertEquals(
            'Integer',
            str(
                revitron.Parameter(
                    wall, 'integer').parameter.Definition.ParameterType))
        self.assertEquals(
            'Integer',
            str(
                revitron.Parameter(
                    wall, 'integerAuto').parameter.Definition.ParameterType))
        self.assertEquals(
            'Number',
            str(
                revitron.Parameter(
                    wall, 'number').parameter.Definition.ParameterType))
        self.assertEquals(
            'Number',
            str(
                revitron.Parameter(
                    wall, 'numberAuto').parameter.Definition.ParameterType))
        self.assertEquals(
            'Length',
            str(
                revitron.Parameter(
                    wall, 'length').parameter.Definition.ParameterType))

        self.assertEquals(_(wall).get('text'), 'some text')
        self.assertEquals(_(wall).get('integer'), 5)
        self.assertEquals(_(wall).get('integerAuto'), 5)
        self.assertEquals(_(wall).get('number'), 10.5)
        self.assertEquals(_(wall).get('numberAuto'), 10.5)
        self.assertEquals(_(wall).get('length'), 5)
        self.assertEquals(_(wall).get('Comments'), 'some comment')
示例#16
0
    if field.label:
        components.append(field.label)
    components.append(field.input)

components.append(forms.Button('Open Documentation', on_click=openHelp))
components.append(TabWindowButton('Start'))

form = TabWindow('Calculate Room Heights', components)

form.show()

values = revitron.AttrDict(form.values)

if form.values:

    transaction = revitron.Transaction(suppressWarnings=True)

    revitron.DocumentConfigStorage().set('revitron.rooms.calculateRoomHeights',
                                         form.values)

    max_value = 4

    with ProgressBar(indeterminate=True,
                     title='Preparing ... ({value} of {max_value})') as pb:

        pb.update_progress(0, max_value)

        roomFilter = revitron.Filter().noTypes().byCategory('Rooms')

        if values.roomFltrParam and values.roomFltrList:
            roomFilter = roomFilter.byStringContainsOneInCsv(