Description
Key Learnings
- Discover the basics of Forge
- Learn how to create your first app based on Forge
- Learn how to define bundle and activity
- Learn how to use prepare files and submit workitem
Speaker
- Fernando MalardFernando Malard is a civil engineer who has worked with AutoCAD software and ObjectARX technology since 1996 and with Revit software since 2009. He has also been an Autodesk Developer Network member since 1997. He has worked on several AutoCAD and Revit software applications for civil engineering, architecture, interior design, and geographic information system using ObjectARX technology, C++, Microsoft .NET, JavaScript, databases, and Autodesk APS Platform integration with BIM360 and ACC. Malard has had extensive experience teaching AutoCAD software, Revit software, C++, MFC, Microsoft .NET, and ObjectARX technology over the last years. Today he continues to apply his skills to the design and implementation of complex industry solutions in desktop, web, and cloud environments such as BIM360 and ACC through Autodesk APS. With his engineering background, have been working with construction companies to design and create integrations to their complex workflows. Malard has also worked in partnership with Autodesk, user communities, and he maintains a blog about ObjectARX technology. He holds a master’s degree in structural engineering from UFMG-Brazil and he is ofcdesk's CTO since 1999.
FERNANDO MALARD: OK, guys, so let's start. So first, welcome to this lab. This is going to be the last one of these Forge lab track today. So probably somebody here since the first class and congratulations for doing all those five classes.
My name is Fernando. I'm CTO of OFC Desk. And I work with Autodesk through ADM for more than 10 years with AutoCAD, Revit, and most recently with a Forge platform.
So the idea of this API, so today you saw lots of Forge APIs. And this this one is specific about design automation. So design automation is the API at Forge that allows you to create drawings and files for different applications like AutoCAD, Revit, 3ds Max and Inventor, but also modify files and even upload plugins to those platforms. So the idea here is to create a business case, a website, whatever, hiding the complexity of those applications, but even though providing users access to those functionalities through a C pointer face in a controlled environment. OK?
A little bit about me. As I said, I work with Autodesk Developer Network for more than 20 years. I have created applications with ObjectARX, with Revit API, 3ds Max, JavaScript and those things. And since the beginning of Forge, I have been attending the Forge Accelerator and the events to help users like yourselves to get started in the platform. I'll show at the very end, we have some of the upcoming Forge Accelerators in several cities across the world. So you should attend. It's a really good opportunity.
A little bit about this class again, this lab, so the objective here is for you to discover more about Forge platform, learn how to create applications, and submit those applications to the Forge platform. And then, we're going to be able to create bundles of those applications, create activities and submit workitems. So this is the way you're going to consume those applications in Forge platform.
We are going to follow the tutorial that is on learnforge.autodesk.io. So if you open this page, you should be able to follow the steps. And just giving you a recap of all the platform. So as you saw so far, even with the keynote, the Forge platform should keep growing and provide you more tools and more product cores to use. OK?
So if you think about, it's a little intriguing to see products like AutoCAD, 3ds Max running on a cloud. But this is the idea to provide those applications as services. And the design automation in API would allow you to run applications and use those product data features. Of course, you don't have direct user interaction. So you can't rely on dialogues inside those applications. But you can use the website to create a front end, a simplified front end, to allow a user interaction indirectly to those platforms.
So again, if you don't have an Autodesk account and a Forge account, you should access those links to create them. And the way the Forge platform works is that you can create several applications in this platform. So you can, for example, suppose you're creating a service in your website and you have several customers and you want to change the behavior of your application, of your collection of applications, per customer. So you can use several applications and control how they're going to access your database and other things so you can fine tune per customer. So this is the idea behind the application you create on Forge platform.
So is anybody without an account? So you can-- OK, so is everybody set up? OK, great.
So just a recap about how to create an application. And there is one important point here is that once you create an application, you have a client ID that is going to identify that application and a client secret, which is the password of that application. So those two credentials should be kept private in your product. So don't put those things in a JavaScript or anything that's going to run on client side, because you're going to expose your credentials.
So once you add the application, you check the platforms and the services you want to support. You're going to generate these IDs of your applications. And inside our sample, you're going to see in a minute, you have a placeholder in the code to answer the client's ID and a client secret in a way that you use your own account in this lab. OK?
A little bit more about the design automation platform, so I'm using here DWG, Design Automation, AutoCAD Design Automation, as an example. So you have here, your document. That could be a DWG or DWT. You submit. So this document through Design Automation API can run an application with that document.
So suppose you want to create a website that people type in dimensions of, let's say, a table. And you want to have an application running inside AutoCAD that is going to create a 3D model of that table. So instead of asking the users to install AutoCAD and run your application there, you can send this application to Design Automation, create a website with just some small input fields for the user. They will type in. And when they hit Create, you call your application. You, of course, behind the scenes open AutoCAD in Autodesk server, create a drawing, save, and send a DWG back to the user. OK?
So from the user's perspective, it's going to be a seamless process. And you can keep improving your application, even create another application with a different workflow. And the same concept can be applied to Inventor, 3ds Max, and Revit. OK?
So if you open this URL, this is where we are going to find your tutorial about this lab. And the tutorial name is Modify Your Files.
So this is the expected result of this lab. So if you follow all the steps, you're going to create this simple website that allows you to type in two dimensions. You choose the template file, depending on the platform you want. So you have a template for AutoCAD, another for Revit, another for Inventor, and another 3ds Max. And you're going to execute activity.
So let's talk about those concepts first. So design automation works this way. So you submit your application. So you create an application there. And you create what we call activity. So activity is the template for calling that application. So you define the parameters you need to input, the results you're getting back. So this is called activity.
Then, from the end user's perspective, when they call that activity, their submitting a workitem. So you create your application. You define the activity. And you can have several users submitting workitems at the same time. So Autodesk servers in Forge you will be able to run your application in parallel in a sandbox environment. So if AutoCAD crashes, for example, it's not going to ruin the other workitems. So they can scale up automatically. So you don't need to be concerned about that. The platform will take care of it. And the same concept applies to all other applications, like 3ds Max, Inventor, et cetera.
So keep this in mind. You create application. You define activity bound to that application. And then you keep submitting workitems to the platform.
So you should be able to run this sample. And if you can see on the right side, we're collecting feedback from the server. So this application, it's actually a website that's going to call Forge and receive notifications from the platform. So it will, for example, tell you what is the percentage of the translation process if your workitem is completed, if you have an error, because you should be able to provide feedback for the end user. So we have all those features in the platform.
So basically our lab is going to have five steps. So we are going to create a server. We are going to create a really, really simple website. This website is going to run locally. And we use a trick to expose this local URL to the Forge platform, so the platform can call you back.
Then we're going to have the plugins. I will provide you a zip file. Actually, in your local folder, you already have a plugin for each of those four platforms ready to be used, because we have such a small amount of time, don't have time to go into specifics about the applications. Then, we are going to define an activity bound to one of these applications and then execute a workitem. So those are the five steps we should accomplish by the end of this lab.
And the first one is to create the server. So we are going to create a ASP.NET project to create this website. And if you visit, just to show you the website you're opening right now-- just one second-- if you visit the website you have open, you should see these here. So under Modify Your Models, Create a Server, so this is where you should start. OK?
And we are estimating you can do it in about 5 minutes. But we have a tolerance for that. And if you have any issues, just raise your hands. Our lab assistants will help you.
So this app, ngrok, is going to do that trick I told you. So you probably need to visit their website to install. It's just simple download thing that you execute. So just to show you how it works-- so I have it running in my Windows machine. So it's going to map your local board to a public, so Forge can see your local website. So it will bypass your Windows security.
And make sure you use Visual Studio committee. And we are going to use dot NET Core as the language. You have other languages on the website. But for this lab, you're going to stick with a dot NET Core.
And now if you can, please keep the same names as the website suggests. So create a solution with a Forge sample name. Try to use the same name. So once you copy and paste code, it works without having to be changed.
This is the same video you have in the tutorial website. So I just upload here for your convenience.
AUDIENCE: So we need to run ngrok?
FERNANDO MALARD: Yes. So what this app is going to do is it's going to get your local hosts and expose it as a public URL. So the website creates a temporary URL mapped to this local thing. So in the sample, you're going to see that we're going to put that URL that it generated inside the application. So once you run it, Forge can call your back to provide you with status of the workitem.
AUDIENCE: We run that locally?
FERNANDO MALARD: Yeah, this is because we are not publishing these application to our web server. We are running locally. So in order to integrate with the Forge platform, we need to make this trick, but just because we are running locally. If you're publishing this to a www website, it should work. OK?
So again, the idea with this step is to create a website that would allow us to create activities and also submit workitems. So this website we will play manager aspect of the platform. But it also play the user submitting a workitem.
Anyone finish this step? Nope? Yeah, just do what-- OK.
And most what we are doing right now is agnostic related to the product we are running on a Forge platform. So all of the applications like Inventor, AutoCAD, 3ds Max, they work in this way. So you submit something with parameters and collect something back.
I will give you a couple more minutes to finish this step.
OK, so once you finish this, I'm going to show you what it is expected to be. So one thing I have provided in the data file, and I can also attach this to the lab later, is you have all the steps as a separate zip file. So right here, you have the first step. So let me unzip it to show you how it should look like.
So you should see a project like this with a Forge sample name. Under here, Properties, you should have those environment variables. And right here is where you're going to add your webhook URL that is generated by these ngrok application. So you just select this URL here, copy and paste under this variable here. So this will allow Forge website to communicate back with our local website.
In terms of files, you should have the startup code. I'm going to make it a little bigger. So make sure you paste those guys from the website.
Every code in this tutorial, you have like a top right copy to clipboard button in the website. So you don't need to select the code. Just click that button and paste in your code. You should have the program. And then the oauth controller, which is responsible for dealing with the login.
If you look inside the code, this is where you're having your credentials being used. So it get from the app settings, which is right here. So those variables are read here in the code. It's going to use your client ID and your client's secret to log in in Forge platform.
And as you can see, those things are hidden from the user. So it's running in a code. I don't have these inside any JavaScript, for example. They are protected from the user.
So once you have this running, we can now skip to the next step. So the next step is to create a basic app UI. So it's going to be a simple interface, just a one HTML page with a bunch of JavaScript files. You have all of them in the tutorial. Just need to copy and paste to create this simple UI for dealing with the Forge API. Let's try to do in five minutes.
AUDIENCE: Where do we come to this--
FERNANDO MALARD: The second step. Let me go back here to the website. So after you do this on the very end, you can choose, after choosing your language, so you pass through all this. You create those guys here. Then at the very end you can-- I skip to the next step from this link right here. So if you click here, you go to the next step, which is right here if you want to access directly.
So in this step you're going to create this index file, which is the web page with a bunch of script calls. So just need to copy and paste. You're going to create these JavaScript file. The code is here as well. Just copy and paste.
And at the very end, you should have this structure in your Visual Studio. And it should be able to run in Chrome and see the UI of your website. It's not going to be fully working at this point. But it should at least see the layout.
AUDIENCE: Do have a sample file that we are going to be using?
FERNANDO MALARD: In the next step, you're going to need some sample files. Yeah, so you in your machine, if you look at the folder in your desktop, it's call-- zero.datasets, is a shortcut in your desktop. If you open there, you're going to see all the labs. And if you look for the lab, starting with the FDC, and you look inside, you're going to see a bunch of folders with a 01. So if you get lost, you can skip to that step. Just make sure you update your Forge credentials in the properties.
So these two first steps of this tutorial, we are creating the server. We are making the server connect certainly to Forge via the ngrok application. And now, we are creating the UI of this website. OK?
And if you see in this sample, we have that Bundles folder. So this folder is where we're going to put applications to be uploaded to Forge. OK.
So once you finish this, you should have your project computer like this. So you have this JavaScript file you have created. Then you have the index page, the HTML page for the website. And you should be able to compile it and run it.
OK, let's keep going. So this was the second step. So now, we have a server running in our local machine. It can be seen outside through that ngrok application. And we have a basic UI in our website.
So now, we need to create a plugin. So again, the idea here is to-- let's use AutoCAD again as an example. So you know AutoCAD can run on an application using UI interaction so you can create dialogues inside of AutoCAD and those type of interfaces. But in Forge, you can't, because it's running on the cloud in a sandbox environment. So you need to prepare your application to be able to run without any user interaction.
All the interaction is going to be in your website. And the result of that interaction is going to be a bunch of input parameters you're going to send your application. Your application will process that and output something back to the user. So this is this stage of concern about this platform. The same applies to 3ds Max, to Inventor, to Revit. So you cannot rely on any user interaction.
So for those that are bringing your own laptop, so I uploaded the bundles to that URL. So you can download. But if you're using the desktops, you can find in that zero.datasets folder. If you see the number three zip files, we have one with just AutoCAD plugin, another with AutoCAD Inventor, AutoCAD Inventor and Revit. And the last one is with all four applications. So if you unzip the last one with all applications, and if you go inside it, inside the zip, under the Forge sample, www root, you find a bundles folder with all four zip files.
So each zip file is one plugin. Of course, each plugin for each platform. So we have a code there written in that platform language. So for AutoCAD, we are using C# application. So those zip files are going to be sent to Forge. In a way they are integrated with the application you created in the first step.
So just to give you an example, I'm going to open this solution. So let me close this right here. So this last one with a longer name, you do have there all the applications. So let me delete this guy here. Waited for--
AUDIENCE: We're not seeing your screen.
FERNANDO MALARD: Oh, sorry, just one second. I need to mirror my-- OK. So I'm going to get the zip, the bigger one.
So the process here, if you look in their website tutorials-- so let me get back to the web page here to show you. So under Create my plugin step-- Prepare a Plugin, sorry, you select the engine you want to use. So if you click AutoCAD, it's going to show you a really, really basic plugin. So you use AutoCAD, dot Net, APIs, install them and create a really, really simple application.
So what this application does it drives a template drawing with dynamic block parameters and just set them. OK, essentially, it's going to set the width and height of square, let's say a square, rectangle. OK? Pretty simple, but it will show you the potential of that platform.
So it's the same process you need to do when you publish your application to Autodesk App Store. So you need to create that package contents file. That is going to teach AutoCAD Revit, whatever, how to load your application. So you specify the platform, the version, those things.
So each plugin here in this tutorial, you have what we call post-build events that you're going to copy the results of the application process to the main project under the bundles folder. So it's going to copy your DLL in your package contents to the bundles. So it's the same process for all other platforms.
But just to show you the results, so here's-- let me open here. So this is the Forge sample project we're doing so far. So let me use this example here. So this is the DWG plugin. So I'm in referencing the AutoCAD dot NET DLLs to create this plugin.
And the code, as I said, it receives parameters. We use JSON to read those parameters. Then, we go in AutoCAD database, Open Transaction, and Track the anonymous blocks. And then down the code, we are going to update the dynamic properties of that block.
So here's the idea again. I'm going to submit those dimensions from my website as parameters to my plugin. Forge will open AutoCAD, load my plugin, process that input, save a DWG. And we'll provide the DWG back to the user, so they can download it. So if you think about, you're providing AutoCAD functionality to a user that just need to know how to put a bunch of fields. OK? So this is the beauty of the Forge platform.
And then once you compile this, it's going to output here to www.rootbundles. And you're going to have those zip files for each plugin here. So I will skip this step. You can revisit later in the website. But we can do it for each of those. So DWG for AutoCAD, IPT for Inventor, Max for 3ds Max, and RVT for Revit. Each plugin basically is going to get those two dimensions and do something inside those platforms.
So I will give you some time to collect those zip files. If you're using your laptops, use this first URL. You should be able to download all those four zip files. After you download it, put it inside that bundles folder into your Forge sample project.
And if you want to go ahead and also download the second zip file-- so for each plugin, we have created a template drawing. So think about this. Suppose you have your standard drawing and you want to create something customized inside it. So instead of have to program your application to create the entire drawing, you precreate the DWG with a standard drawings and you upload it. So Forge with start processing your workitem with that template. So we start with a precreated drawing. So this is why you have those input sample files. In a way, you submit them, because you saw in the code that it relies on that pre-existing dynamic blocks with parameters to be able to run your command.
AUDIENCE: Where is the zip again?
FERNANDO MALARD: It is inside-- if you go inside zero.datasets, then you have FDC. Then you have the last 03 sample with the longer name. You have a design automation folder, Forge sample, www root, and then bundles.
In the sample files, you can also find them under this class folder. So if you go back to the root of this class, you have sample files folder in the root with four files, one AutoCAD sample file, dot DWG, Inventor sample file dot IPT, Max, sample file dot Max, and Revit sample file dot RVT.
Those files they should be there. So when you're going to run this application, you have that a button you create on the website that's going to provide input file for the workitem you're calling.
One great feature about the platform, supposing down the road you have, of course, updates to your application. So you can create versions of your application and have your release version and then a beta version in keep uploading and use this alias to refer to one of those versions, because in reality you should probably keep adding features to your application. And you don't want to stop current users running your application, right? So Forge does have all the infrastructures to manage those updates in the platform.
So just two more minutes, and we'll go to the next step.
In the handout I have added that table with how Forge would be charging for the use of the platform. So if you take a look there, it's basically a credit system. So you have credits for types of operation depending on the engine you're using. So you can take a look and understand how you can set up your business model around this. Probably you can either charge your users directly and have your company Forge account taking care of the credits. Or you can allow the users to have their own Forge account and use their account to run your application. So you have different possibilities here.
So now the next step is to create an activity. So we have uploaded the application. Now, we need to create a one entity call activity in Forge so Forge knows which application it's going to be called and what are the type input parameters for that application. So this is called an activity.
So if you see here on this schematic drawing, so you have your engine. It could be AutoCAD, Revit, Inventor, or Max. You have workitems. So this is the call from the user. So this workitem will trigger an activity that is going to run your application. So this is how the process works. And again, you can have several applications running and even versioning.
So once you're running here, this step, you're going to use this configure button on the top right of your website. You're going to access this folder to select a local app bundle. So this is why we've put those zip files in that bundles folder, because this dropdown is going to be populated by that folder. So you should see all the four zip files here.
Once you select it, I need to tell Forge which engine I'm going to use to run that application. And, of course, they need to be consistent. If I'm creating an application for, let's say, AutoCAD 2020, I should be selecting AutoCAD 2020 to run this application.
So when I'm defining an activity, I need to select my bundle, my application bundle, and the engine I'm going to run. After I'm doing this, it's going to create activity. And the activity should be listed on this Existing Activities dropdown in your website.
So far each zip file, I need to create one activity binding these application to the equivalent Forge engine I want to use. Because the products change from version to version, so if you're using a feature in your application that doesn't exist in, let's say, AutoCAD 2018, you cannot submit that to Forge. It's not going to run.
So if you go back to the website, you should see this right here, Define Activity dot NET Core. So essentially we are going to provide the currently supported engines on the platform. Define activity, so you see it tries to submit a zip file. So you have the input file, the parameters that are going to be submitted via JSON, and the output file, which is the result of your execution.
Another thing to keep in mind is that your applications, they're going to run in a sandbox environment in a Forge server. So you cannot access things like systems folder, create local files. So you need to rely on public URLs to communicate with your application. So keep that in mind. Not to mention, you cannot use any UI interaction.
So once you do all those steps, you should be able to create activity, as this video shows. And on the right side on this panel, once you define your activity, you should see a feedback from Forge server that your activity is defined and is going to return the identification on that activity.
In this same application-- this is another interesting feature of Forge-- you can create several activities pointing to the same application. So suppose my application has, let's say, 10 commands. I can create a one activity to call each of those commands and still have just one application. So I don't need to create a one application for each activity. I'm creating a compact and creating a robust application to take care of all those activities. And same as with parameters, right? So we can submit as many as you want.
AUDIENCE: So I'm doing a little bit of catchup with the final portion of it. And it's wanting me to Flash flattening. Does it matter whether or not it's a NET Core library? Or--
FERNANDO MALARD: It depends on the platform.
AUDIENCE: What's that?
FERNANDO MALARD: It depends on the platform you're creating for. So AutoCAD does support it. So in this example, we are using class libraries for all four applications, because they are all four support. But suppose you are creating a C++ plugin for 3ds Max and for AutoCAD. You don't have C++ in Revit. So you cannot create a C++ application for Revit. Does it make sense?
AUDIENCE: Not for web application--
FERNANDO MALARD: This is the website. The website can be any language you want. The website is the way you want. The requirement that is being able to communicate with Forge, just that. it can be a no JS, anything you want. But on the application side, you subject to their limitations in terms of language, of features. OK?
AUDIENCE: Develop with Revit app for this, particularly to run in sense of Revit--
FERNANDO MALARD: For running this? No. Yeah, so this is the beauty of this. You can hide the complex of those applications and even the costs for having those applications and even get trained to those applications.
AUDIENCE: Does it still have to use the libraries for Revit in order to--
FERNANDO MALARD: Well, yeah, so the Revit running on the server is the standard installation. So if you need additional files or templates, you can host those files in your server and expose through public URLs and consume then in your application. OK? And if you put them on Amazon, it's even faster, because Forge runs there. OK?
OK, guys, so the last step, now that we have our website, we have our plugins there, we have our activity defined, so now it's the time to call it. So we're playing the user hold right now. So the way to do this is to call what we have defined in Forge as a workitem. So the workitem is the call to that activity you just created. So we are playing the user side right now.
So by using the upper portion of our website, we have those two input fields, where we are going to input the dimensions. So right there, we have the fields with the dimensions. Then, we are going to select the template file. So again, you can't precreate things that are constant in your process inside a default DWG file. So Forge, we'll read this input information. We'll read your input file. We process your plugin with this input data. And then we'll generate a file for you.
So once you run the workitem, at the very end, you're going to see a download link for the resulting file. OK? And during this process, it could be a long process, so if your application needs time to run it, maybe it's a complex calculation, something like that, you can collect feedback of the status. You can talk to the Forge platform to see if a problem happened. So this is why we create this ngrok to be able to communicate with Forge during this process. If it's a public website you don't need that ngrok. It's going to be able to communicate with Forge without any issues.
AUDIENCE: What would be the use case for this now? I'm just trying to understand. So the file, the AutoCAD file that they're picking, is that coming off of their network and it's just using like an AutoCAD licensed sandbox--
FERNANDO MALARD: No, actually, this is just a file. It doesn't matter how they get this file. It's just their template. If you don't want to allow this, you can hide this feature and have your standard plugin maybe per customer. OK?
So suppose you're selling a service through your application for several companies. And you want each company to have its own sheet with their logo and their things. So you can have one template for each company. And depending on the user logging in your website, you submit that template for your application. OK? So there are several ways to handle that. But this is just one example.
So if you successfully you follow all the steps, you should be able to run your activity and see the result down there. I will run mine here just to show you in case you didn't reach that point.
So I'm going to unzip zip number 5, which is the complete project. So make sure you also check your credentials to change. So let me open it here.
So I have my ngrok running. So let me make sure I'm pointing to the correct URL. So I'm going to check this guy right here with what I'm seeing here. OK, so looks good. So C01AE75E. So it's the same here. So I can minimize this. And let me run this guy.
So this is the website. If I go to Configure, I can see the engines. I have access. I can see my zip files. I have placed in the bundles folder. So I don't need to create activities. I already precreate them. They are inside my account.
So let's use AutoCAD as an example. So I'm going to input 120 by 240. So those are my input parameters. I am going to select my template file. So this is my template file for this application. Open. And then I'm going to start my workitem. So it's uploading the file.
So I have received a notification the workitem started. And here, if you see here, I received lots of information if succeeded or not, the comment line that it runs. One trick for AutoCAD is that you have these AC Core console. You can run locally to see if your application is able to run without any UI interaction. So this is a way for you to pre-test your application locally before submitting to Forge, because there, it's going to use AC Core console to run your application.
On the very end of this log here, you should find this link, result file. So I'm going to click. So it's downloading the result file. And I'm going to open it. And I have my beautiful rectangle here.
You see it's a dynamic block. So you have one parameter here, 120. And the second parameter here, 240. OK? So you see I was able to generate a new DWG file without having to know anything about AutoCAD. And the same concept applies to 3ds Max, Inventor, Revit, or any other product platform Autodesk is going to expose through Forge. OK?
So just to recap, so we had all those labs today. So this is the last one. So we started with August's lab for uploading and viewing your models. And, of course, once you're running applications, you can also bind the viewer to your website to view the results, right? So after you process that DWG, you can get that DWG upload to Forge again, translate it, and show it in the viewer. So in theory, you can run, generate a DWG and then still show that to the user without even them knowing they are using AutoCAD. So you can use several APIs together.
So just as a recap, you have these upcoming Forge Accelerators in 2020. If you can attend, I really recommend to you because you're going to have Autodesk fellows around to help you to fix your code. So we can have a really productive week creating your Forge application. If you need more information, you can ask the August about it.
About samples, you have the Autodesk Forge Github account. So we have several samples there. You can download and start using to help you to get started. And questions you can submit to Stack Overflow, which is the default Autodesk channel for support.
And don't forget to fill your surveys. And that's it. Thank you and hope you enjoy. And if you have more questions, you can send to Autodesk guys here or even to me. And I hope you enjoy it. Thank you.
[APPLAUSE]
Downloads
Tags
Product | |
Industries | |
Topics |