Using Packages in Dynamo Sandbox that Contain References to Revit API

I have been trying to download packages that contain Revit API such as Rhythm. In the Library Rhythm is not downloaded. I have viewed this post. Dynamo Sandbox.dll.

I’m not entirely sure how to utilize the Dependency Walker.

Can I remove the parts of the .dll file that require a link to the Revit API and still utilize the packages that contain Revit API?

Revit interactions cannot be triggered via Dynamo sandbox, so you have to omit all calls to the Revit API. As far as I know, editing DLLs to remove calls to the Revit API isn’t possible. Loading the DLL directly as noted in your first link will prevent this, but from looking over the DLLs which come with Rhythm I doubt you’ll be able isolate DLLs which have only Revit interaction. @john_pierson’s GitHub does have the source code for most (all?) of the package available here: GitHub - johnpierson/RhythmForDynamo: A collection of nodes for use in Dynamo with Revit.

Likely there is another solution, but without knowing more of what you’re after in the end it’s hard to say.

you can do this on the fly using c# - but… it’s not easy, likely a better solution is to ask the author to refactor their package into two packages.

1 Like

I have been using Andreas Dieckmann’s elegant master/slave script in Dynamo Sandbox to Automatically Open Revit Files and Run a Dynamo Script.
DynamoAutomation Master/Slave graph .

It works beautifully, but I can’t seem to get Revit to close the file. Or Save or Sync or allow me to not save and close. I have seen a number of other have the same issue on this forum. I apologize if this is the wrong string to discuss this. The graph is the same, except for it has the updated node Journal.ByWorkspacePath.

MasterScript3 MasterScript4

Are there any specific nodes you are after in sandbox? Rhythm primarily interacts with the Revit API, so I fail to see the use case.

Basically, the Dynamo for Automation package uses Dynamo Sandbox to launch Revit, open a Revit file, open Dynamo for Revit, open a Dynamo for Revit ‘slave’ graph, run the ‘slave’ graph, close Dynamo for Revit, close the Revit file, and close Revit. As a result don’t need or want the Rhythm nodes in your current graph, but in the Dynamo for Revit graph which you are automating.

The ‘slave’ graph noted above should not contain any background processing (you are already doing said processing), but it may want to sync and/or save the graph at the end of the run. Because these slave graphs are being run in a headless Dynamo for Revit environment, they will have access to the Revit API and the associated Dynamo for Revit nodes.

1 Like

@awatts, do you have any specific nodes that you are looking for in Sandbox in regards to Rhythm? @jacob.small shared a small list with me that is being tracked here.

I can try to get all of the possible nodes in another dll that would be called RhythmCore.dll and see if that helps.

3 Likes

I was looking to use your Application.Close Document node. Perhaps that is inherently dependent on the Revit API though? I apologize if I’m looking to use it in a way that not possible. I’ve just now begun trying to utilize the master/slave script idea with DynamoAutomation. I’m sure a RhythmCore.dll would be beneficial for me an other users that includes your available mentioned nodes.

Ah yes. That node is definitely dependent on the Revit API. Here is the exact method, ApiDocs.co

I highlighted the more generic nodes on the Github link that would be considered eligible.

That being said, if you are using DynamoAutomation, your child graphs can contain the Revit-specific operations that you are needing.


*Edit: FYI, I renamed this thread because this request is not specific to Rhythm.

Thank you so much for all of your help! Much appreciated!

1 Like

@awatts
Hi Could you please share your dyn file ? Are you busing Sandbox or Dynamo in Revit ?
Thank you