コード例 #1
0
ファイル: test_roomtag.py プロジェクト: revitron/revitron
    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
ファイル: test_grid.py プロジェクト: revitron/revitron
 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
ファイル: test_grid.py プロジェクト: revitron/revitron
 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
ファイル: test_parameter.py プロジェクト: revitron/revitron
    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
ファイル: test_parameter.py プロジェクト: revitron/revitron
    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
ファイル: document.py プロジェクト: revitron/revitron
    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()
コード例 #11
0
    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
ファイル: test_parameter.py プロジェクト: revitron/revitron
    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(