import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
# Import ToDSType(bool) extension method
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
# Import geometry conversion extension methods
clr.ImportExtensions(Revit.GeometryConversion)
# Import DocumentManager and TransactionManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
from System.Collections.Generic import *
# Import RevitAPI
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *
from Autodesk.Revit import Creation
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
# Start Transaction
TransactionManager.Instance.EnsureInTransaction(doc)
rvtComId = RevitCommandId.LookupPostableCommandId(PostableCommand.PurgeUnused)
post = uiapp.CanPostCommand(rvtComId)
# End Transaction
TransactionManager.Instance.TransactionTaskDone()
`OUT=post`
I tried using postable command but it would’nt work,but it would not give a error it would just return true
As I’m aware Purge is not accessable in the API
1 Like
Would i be able to at least bring up the purge Window and manually select purge all?
Wouldn’t it be easier just to bind a keyshortcut to Purge then?
1 Like
This is part of a bigger workflow where i delete sheets,view,schedules…and unpinned elements so purging would be the final step before i save the files
Ive done everything else in Dynamo using python …so i wanted to do this too
If theres no other way then il do it manually:expressionless:
I might eat my words.
Someone found a solution, read here: https://gitlab.com/MattTaylor/RevitPurgeUnused.
It is for Revit 2017+.
Try translate it to python :-).
And as you were doing in the start, they also use the Postable Command
2 Likes
i saw this in the version history of the Dynamo Automation github site by @Andreas_Dieckmann
It also says it has not been tested with 2.x
1.3.3
New nodes:
- Journal.PurgeModel
- Journal.PurgeModels
- Journal.RevitStartupArguments
- Process.KillCurrentProcess
1 Like
Thanks @Marcel_Rijsmus - interesting! Any idea when @Andreas_Dieckmann will test it for 2.x?
Hi @ashwinash112,
The Postable command works like this :
import clr
clr.AddReference('RevitAPI')
clr.AddReference('RevitAPIUI')
import Autodesk
from Autodesk.Revit.UI import RevitCommandId
from Autodesk.Revit.UI import UIApplication
from Autodesk.Revit.UI import ExternalCommandData
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
RunIt = IN[0]
if RunIt == True:
CmndID = RevitCommandId.LookupCommandId('ID_PURGE_UNUSED')
CmId = CmndID.Id
uiapp.PostCommand(CmndID)
errorReport = 'Success'
else:
errorReport = 'Set IN[0] to true'
#Assign your output to the OUT variable
OUT = errorReport
13 Likes
very useful. Thanks a lot!
This is great - but purging just once doesn’t do the job properly - does anyone have an idea how to get this command to execute 3x within a script. Even if i put the python node in 3 times in the script it only executes once. Has this been solved elsewhere?
Thanks Alban,
Very interesting
Do all of the (postable) command IDs have the same string syntax? I couldn’t see a list anywhere in the revit api docs, just a reference to the journal file, which is a bit of a random process to find them
Cheers,
Mark
Awesome thanks, 1287 commands will keep me going a while!
Awesome nodes, Luke, thank you very much.
Guys, you can grab his dyn files on GuitHub.