Friday, April 25, 2014

Revit Tricks - Schedule Detail Component


In some cases I found I need to schedule length for something not modelled as 3d. The best way is to schedule detail component. So it won't interference with other schedules. And can stay in the file for later references. But by default, in revit, you can not direct schedule detail component. There is a way around it by suing annotation symbols to pass the parameters from detail component into Note Block schedule. Refer to below for simple instructions.

1. create a line based detail component.
2. create a fill region to represent the length
3. create an annotation symbol family, make it shared for appering in schedule. create a instance parameter inside it called symLength.
4. load the annotation symbo into detail component family.
5. link length parameter to the symbol symLength parameter.
6. load detail component family into a test project
7. draw several instance of detail family
8. create a note block schedule pick the annotation family crated before. pick symLength to schedule.
9. Now you can have the length from detail component scheduled.

You can do the similar thing for scheduling rectangular area. It may be useful to calculate things in a hurry. Just need to do a formula inside detail component to calculate it first. Then passes it to symbol family for scheduling in note block schedule.

Tuesday, December 31, 2013

Revit Python Script Clean useless Reference Planes


It is always difficult to clean reference planes in a file that has been touched by many people. They are everywhere. One rule is to name the one you want to keep. and the unnamed ones can be removed to decease file size or visual discomfort. See script below:
 
#this revit 2013 python is to delete all useless sections and
#unnamed reference planes
import clr

import math
clr.AddReference('RevitAPI')
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Architecture import *
from Autodesk.Revit.DB.Analysis import *
from Autodesk.Revit.UI.Selection import *
from Autodesk.Revit.UI import *
from System import *

uidoc = __revit__.ActiveUIDocument
doc = __revit__.ActiveUIDocument.Document
#selection = list(__revit__.ActiveUIDocument.Selection.Elements)
uidoc = __revit__.ActiveUIDocument
selection = __revit__.ActiveUIDocument.Selection.Elements


#methods
def cleanReferencePlane():
    # grab all reference planes
    rpInstancesFilter = ElementClassFilter(clr.GetClrType(ReferencePlane))
    collector = FilteredElementCollector(doc)
    rPlaneId = collector.WherePasses(rpInstancesFilter).ToElementIds()
    # go through ids delete unnamed ones.
    for id in rPlaneId:
        s = doc.get_Element(id).Name
        if s.Equals("Reference Plane", StringComparison.Ordinal):
            doc.Delete(id)
def cleanSection():
    print ("to be done...")
#define a transaction variable and describe the transaction
t = Transaction(doc,'Clean Section ReferencePlane')

#start a transaction in the Revit database
t.Start()

#************ ADD YOUR OWN CODES HERE.******************
#get all filled regions

y=int(raw_input("clean sections and reference planes: 1.clean both 2.clean sections 3. clean reference planes: "))
if y==1:
    print "clean sections and reference planes..."
    cleanReferencePlane()
    cleanSection()
elif y==2:
    print "clean sections only..."
    cleanSection()
elif y==3:
    print "clean reference plane only..."
    cleanReferencePlane()
   


#print "end"
   

#commit the transaction to the Revit database
t.Commit()

#close the script window
raw_input("Enter to Quit.....")
#__window__.Hide()
__window__.Close()
#__window__.Show()

Saturday, March 9, 2013

Revit Python Script Code Example - automatic rename view number in a sheet

hi, I rewrote the code in python script for revit 2012/2013, see how it works in video



the code is below, copy and save the code in a file named "sortSheetViews.py" or whatever. then follow the video to add this script to revit ribbon

import clr
import math
clr.AddReference('RevitAPI')
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Architecture import *
from Autodesk.Revit.DB.Analysis import *
from Autodesk.Revit.UI.Selection import *
from Autodesk.Revit.UI import *

uidoc = __revit__.ActiveUIDocument
doc = __revit__.ActiveUIDocument.Document
#selection = list(__revit__.ActiveUIDocument.Selection.Elements)
uidoc = __revit__.ActiveUIDocument
#selection = __revit__.ActiveUIDocument.Selection.Elements
selelementsid=[]
#############################method###################################
#get views in a list
def viewSelectInList():
    sel = uidoc.Selection
    sel.Elements.Clear()
    loopSwitch = 1
    while loopSwitch==1:

        pickedOne = sel.PickObject(ObjectType.Element,"Pick view one by one, pick title block to finish")
        if pickedOne!= None :
            #revit 2013 use the statement below
            e = doc.GetElement(pickedOne.ElementId)
            #revit 2012 use the statement below
            #e = doc.GetElement(pickedOne)
#            TaskDialog.Show("Revit", e.Category.Name)
            if e.Category.Name.Equals("Title Blocks"):
#                TaskDialog.Show("Revit", e.Category.Name)
                loopSwitch = 0
            else:
                selelementsid.append(e.Id)
#                TaskDialog.Show("Revit", e.Category.Name)
        else:
            break
def reNumber (startInt):
    currentNo = startInt
    for eId in selelementsid:
        setViewPortNumber(eId,currentNo)
        currentNo += 1
def getViewByDetailNumber (vs,i):
    for v in vs.Views:
        if v.get_Parameter(BuiltInParameter.VIEWPORT_DETAIL_NUMBER).AsString() != None:
            if i == int(v.get_Parameter(BuiltInParameter.VIEWPORT_DETAIL_NUMBER).AsString()):
                return v
       
def setViewPortNumber (id, number):
    vs = doc.ActiveView
    stringOldNumber=doc.get_Element(id).get_Parameter(BuiltInParameter.VIEWPORT_DETAIL_NUMBER).AsString()
#    print "viewport detail number: ",stringOldNumber
    if int(stringOldNumber) != number:
        if getViewByDetailNumber(vs, number) != None:
            #*****************to be finished here *****************
            getViewByDetailNumber(vs, number).get_Parameter(BuiltInParameter.VIEWPORT_DETAIL_NUMBER).Set("999")
            doc.get_Element(id).get_Parameter(BuiltInParameter.VIEWPORT_DETAIL_NUMBER).Set(str(number))
            getViewByDetailNumber(vs, 999).get_Parameter(BuiltInParameter.VIEWPORT_DETAIL_NUMBER).Set(stringOldNumber)
        else:
            doc.get_Element(id).get_Parameter(BuiltInParameter.VIEWPORT_DETAIL_NUMBER).Set(str(number))
#define a transaction variable and describe the transaction
t = Transaction(doc,'Sort Views in Sheet')

#start a transaction in the Revit database
t.Start()

#************ ADD YOUR OWN CODES HERE.******************
x = int(raw_input ("number start from: "))
viewSelectInList()
reNumber ( x )


#print "finished"
   
#************** END OF YOUR MAJOR CODES HERE.*********************
#commit the transaction to the Revit database
t.Commit()

#close the script window
__window__.Close()

the above video teachs how to add such scripts to revit ribbon

Thursday, March 7, 2013

Revit 2012 macro renumber sheet view code - for free

this macro is only for revit 2012, I did another version for 2013 using revit python shell.
the video is showing how it works.
 
1. In this application.cs add
public void sheetViewNumberSort()
        {
            if (this.Application.Documents.Size > 0)
            {
                //Get application and document objects
                foreach (Document document in this.Application.Documents)
                {
                    if (document.ActiveView != null)
                    {
                        ClassSheetViewNumberSort pswn = new ClassSheetViewNumberSort(this.Application, this.ActiveUIDocument, this.ActiveUIDocument.Document);
                        pswn.run();
                    }
                }
            }
            else MessageBox.Show("no open document!");
        }
2. the other code can be download at

there are some leftover codes in the file. but won't affect working

Cheers

Saturday, January 12, 2013

Free Revit add-in List

This is the home page of my free Revit add-ins.

how to install add-in:
http://hhhnz.blogspot.com.au/2012/12/print-pdf-with-sheet-number-and.html

Free add-in print pdf with sheet number and revision
http://hhhnz.blogspot.com.au/2012/12/print-pdf-with-sheet-number-and.html

Free add-in export dwg with sheet number and revision
http://hhhnz.blogspot.com.au/2013/01/free-revit-add-in-export-dwg-with-sheet.html

Free Revit Add-in Export dwg with sheet number and revision

This free add-in is for batch exporting dwg files from revit drawing sheets. It is similar as the previous free add-in print pdf with sheet number and revision. Close all hidden windows before start exporting. If crashes during exporting try the one by one button. Or just export current active sheet view.

Save before you exporting.

below are the 64bit download links: if you want 32 bit version, please leave comment.
http://pan.baidu.com/share/link?shareid=191102&uk=1259096542

Here is demo video:








Tuesday, December 25, 2012

Print pdf with sheet number and revision - FREE Revit addin


This page is the manual for PRINT PDF WITH SHEET NUMBER AND REVISION Revit 2012 /2013 add-in. The add-in / plug-in can be download at:

64 bit revit 2012/2013
http://pan.baidu.com/share/link?shareid=172850&uk=1259096542
https://docs.google.com/file/d/0B2dWucciRgDPbGFRcWxCNENxUms/edit?usp=sharing
32 bit revit 2012/2013
http://pan.baidu.com/share/link?shareid=172852&uk=1259096542
installation: extract and copy files into:
    • In a non-user specific location
      • For Windows XP - C:\Documents and Settings\All Users\Application Data\Autodesk\Revit\Addins\2012\
      • For Vista/Windows 7 - C:\ProgramData\Autodesk\Revit\Addins\2012\
        -- OR --
    • In a user specific location
        • For Windows XP - C:\Documents and Settings\<user>\Application Data\Autodesk\Revit\Addins\2012\
        • For Vista/Windows 7 - C:\Users\<user>\AppData\Roaming\Autodesk\Revit\Addins\2012\
in windows 7 you may need to unblock the dll by right clicking and select security -> unblock

How to use.

1. click inject default parameters to add default sheet parameters
2. create a sheet schedule and customize your pdf names
3. create a sheetset to put the sheets for printing there
4. change pdf setting as you want
5. save the setting so you can load it later
6. click print
After changing any printer settings, you need to restart revit.
This addin \ plug-in is free. If you like it please donate by click the link below.