説明
主な学習内容
- Get answers to Revit programming questions that are bugging you
- Meet and make yourself heard to the Revit Development Team and developer support experts
- Discuss your needs, wishes, and solutions with Autodesk employees and your peers
- Gain a first-hand impression of the current hot Revit API issues
スピーカー
- Augusto GoncalvesAugusto Goncalves has been an API evangelist at Autodesk, Inc., since 2008. He works with all sorts of technologies, from classic desktop to modern mobile and web platforms, including .NET for AutoCAD software and Revit software, and JavaScript application programming interface for NodeJS.
- AVAngel VelezAngel Velez is a Distinguished Engineer and Product Owner at Autodesk, Inc. In 1992, he graduated from the Massachusetts Institute of Technology with BS degrees in computer science and mathematics, and he graduated from Stanford University with a master's degree in computer science in 1994. After working in the mechanical CAD industry for 5 years, he joined Charles River Software in 1999 to work on a project that eventually became known as Revit. Currently, Angel is a product owner and developer on the Revit Protractors and Con-tractors teams, which concentrate on connected desktop and cloud-based workflows (including IFC and the AEC Data Model) and Revit core geometry.
- Miroslav SchonauerMiro has extensive combined engineering and IT background, with a Dipl.Ing. in Civil and Structural Engineering (Split, Croatia 1988), PhD. in Numerical Methods in Engineering (Swansea, Wales, 1993) and 35+ years’ experience in commercial engineering software design, development and customization. His initial involvement with 3D AEC and BIM (before it was even called BIM!) took place between 1995 and 2000 within AceCad Software and its then-market-leading 3D structural steelwork modelling solution StruCAD, where he was leading the integration efforts with various 3rd party 3D structural analysis/design (QSE, Staad III, etc.) and Plant Design (Intergraph, Aveva) software packages through proprietary and neutral/public data formats. He's been with Autodesk since 2000, initially as Developer Consulting Specialist leading the AEC support team (AutoCAD, LDDT, ADT/ACA, MEP, Revit and Civil3D APIs) and currently as Senior Solutions (Software) Architect with Autodesk Consulting. His specialty have always been APIs for all Autodesk® AEC and BIM products, now extended from pure desktop APIs into the full APS cloud platform. He's conducted numerous training sessions, given many conference talks and provided direct technical support on such topics. For the last 18 years, he's been applying combined API, products, industry, software/IT methodologies and process analyses knowledge to architecting and developing consulting solutions that extend the functionality of Autodesk BIM/AEC desktop and cloud products/platform; and integrate them within various generic and /or specific customer workflows, processes and solutions.
- DCDiane ChristoforoDiane Christoforo has been a software developer at Autodesk for fifteen years. She graduated with a degree in computer science from MIT in 2005. She has worked on a variety of aspects of Autodesk Revit, including linked files, Autodesk Revit eTransmit, the API, shared coordinates, and Forge Design Automation for Revit. She square dances in her spare time.
- RBRahul BhobeRahul Bhobe is a Senior Principal Software Developer for Revit at Autodesk. He holds a B. Tech degree in Naval Architecture from IIT Madras and a masters degree in Software Systems. He has been with Autodesk for 14 years working on several features of Revit. Currently he is developing Design Automation for Revit and teaching customers how to use them. He has taught multiple AU classes in past 4 years. In 2008, he started working on Revit Conceptual Modeling design where he implemented Adaptive Components, Point Elements and Divided Surface. He has then worked on several Revit features like Family, Groups, Links and Worksharing. He has a total of 22 years of CAD/CAM development experience.
- Keith WhiteKeith White is an experienced architect and technical consultant with over 20 years of experience in building design and construction, and a passion for Building Information Modeling BIM and Data Integrations. Keith is a Manager of a Technical Consulting with Autodesk Consulting, developing solutions for customers in AutoCAD, Revit, and Navisworks desktop software and Autodesk cloud services in ACC/BIM 360/Forge Platform. Prior to joining Autodesk, Inc. in 2015, Keith developed custom solutions for the precast concrete industry in Revit software. Prior to that, he was also a partner in an architecture firm, where he worked for 12 years on numerous architectural projects and project types in addition to his roles in CAD/BIM/IT management, training, and the leading of firm-wide adoption of technology strategies. In addition to his AEC experiences, Keith has also developed and taught classes for AutoCAD and Revit software for the University of West Florida.
- Sasha CrottySasha Crotty leads Autodesk’s AEC Platform Data team, focused on building an open and extensible data platform connecting AECO teams in their tools of choice. Since joining Autodesk in 2005 has taken on multiple roles from writing code for Revit Structure to product management for the Revit platform and services. Sasha holds a BA in Architecture and a BS in Electrical Engineering and Computer Science from the University of California, Berkeley, as well as an MBA from Boston University.
- Boris ShafiroBoris Shafiro holds Ph.D. in Mechanical Engineering from Tufts University. He was an early member of the Revit startup team and joined Autodesk in 2002 through the acquisition. He worked as Principal Software Engineer and then Dev Manager in several areas of Revit development, including views, annotations, families, geometry, interoperability and API. He taught multiple classes on Revit API for ADN members. Currently he is a Team Manager, Scrum Master and the facilitator of Revit API Guild.
BORIS SHAFIRO: OK, my name is Boris Shafiro, software development manager with Revit team. Currently I also facilitate so-called Revit API Guild, pretty much the developers that carry out the development of Revit API, and monitor other teams that developed Revit API. I've been with Autodesk for 15 years, and I've been with Revit longer than it was called Revit. So I started in '99 as a software developer, then software development manager. So chances are I know some of the functionality that you're going to be asking about, but if we are not able to answer your questions or help you right away, we definitely can continue over the email, so please don't hesitate to ask. Thank you.
RAHUL BHOBE: Hello, I'm Rahul Bhobe. I worked for Autodesk for 10 years, all 10 of them for Revit development. Various features like families, groups, length, work sharing. Recently moved to cloud services for Revit development and use the Revit API for that. That's about it, I guess.
DIANE CHRISTOFORO: They're already on, great. Hey. I am Diane Christoforo. I am a developer slash team manager. I've been at Autodesk for 12 years. It was my first job out of college, so it's all I know. I am going to apologize in advance for the number of times I'm going to answer a question with, oh, yeah, that's my team, and it's not exposed.
[LAUGHTER]
SASHA CROTTY: Thanks, Diane. So I'm Sasha Crotty. I am the Revit core product manager, and that means that I am the product manager for the Revit platform, the Revit API, C4R, and Forge design animation API for Revit. So all those things, from product management perspective, that's my fault. I've been working with the Revit team for 12 years. I actually started as a developer, so my background is in development, and so I moved on to product management about six years ago.
MIROSLAV SCHONAUER: My name is Miroslav Schonauer, or shortly, Miro-- that's what most people know about me. It's going to be 18 years in February. And I started, actually, in developer technical services, so I was there long time before Augusta joined, few years before Jeremy joined, even. And I think in that role, if I'm correct, I presented the first ever Revit API lecture at AU. It was 2005, with Emile Kfouri, who was then first API manager.
But since then I moved to consulting from the first day, so for last 12 I'm in consulting. Usually worked on solutions that need heavy customization, and I specialize in all [INAUDIBLE] API products. So not just Revit, but AutoCAD Civil 3D, used to be AutoCAD Architecture. Now also getting little bit into Forge.
KEITH WHITE: OK, my name is Keith White. I've just learned that I need to go first the next time we do this. So previous to working for Autodesk-- I've been with Autodesk almost three years now-- I was licensed architect before, so heavy user of Revit since about 2004, 2005, turned programmer, so I've started writing add-ins for Revit, developed some suite of tools that are being sold and presented here at AU for a couple of years. Joined Autodesk as a part of Autodesk Consulting, and like Miro, I work with clients from, really, all over the world, answering questions, helping to develop tools, stuff like that. So I don't know if I can offer much more than what they're going to offer, but I'm here to help.
SASHA CROTTY: We have a brave soul.
AUDIENCE: Hi. We are starting a project now where we are importing some very large plant models, and we are looking into producing diverse shapes for that part. Very simple, have it as simple, easy as possible. And we talked about perhaps over 100,000 parts in there. Will there be any performance issues in Revit with-- I tried to make 100,000 squares and that was fine, but this will be a bit more complex.
BORIS SHAFIRO: OK, you import what kind of files to create direct--
AUDIENCE: We will read the geometry, how we will use--
BORIS SHAFIRO: Oh, you use the API to create them from scratch using the direct builder, right?
AUDIENCE: [INAUDIBLE] it would be something would be [INAUDIBLE] because it's complex geometry, but it will be a-- it's an entire plant so lots of elements.
BORIS SHAFIRO: Well, the biggest thing to remember working with imported geometry in Revit is one key issue of scale. Revit, from the bottom up, was designed as the modeler for architecture. So there is a range of numbers with which Revit works good with geometry. So very small details and very large numbers that could represent 40,000 miles or 1/15 of a millimeter, these are the extremes that could make your geometry is not work correctly in Revit, or have some really serious performance degradations.
There are recommendations of what is considered the reasonable range of numbers for geometry in Revit, and this is pretty much architectural scales. Let's say something from half an inch to, I think it's 30 miles or 40 miles, something like that. So these are the length range that you should operate within.
In terms of performance of direct shapes, we don't even have too much experience with that yet. Direct shapes per se is pretty much new functionality. So we did do everything to ensure correct performance, but we definitely need to try and see how it performs at that scale.
SASHA CROTTY: So let me-- to add to that, I think one of the things that, certainly, if you're importing direct shapes, a Revit model can have that many number of elements. So it doesn't concern me. 100,000 elements is not something that strikes me as concerning. We can certainly handle that overall, and certainly with direct shapes. You saying that there are some meshes in there that may potentially cause some performance problems, that would be certainly something we'd be interested in hearing about, saying, look, when I bring these in this changes performance by a factor of x. I think that is a little bit of a learning experience for us, as Boris mentioned. But I think we'd like to learn and actually see if there's something we can do if there is a performance problem. I would hope that there isn't.
AUDIENCE: I will let you know.
[LAUGHTER]
MIROSLAV SCHONAUER: If I just [INAUDIBLE] something from a purely consulting and process standpoint, I've been using the direct shape just to visualize, sometimes, things in Revit. For example, internal 3D room shape elements that-- I've been actually working with Quincy, who is here also in the room. And it's very quick to create element, but one thing I would just warn you is you can't attach any shared parameters to it, to direct shaped elements.
So if you want to import the whole model with direct shape elements, I would a little bit question is that the best way to use Revit, because if you can't add content, if you can't direct shapes, I'd like maybe to hear what is your business use case to see if maybe it can be done in a different way. So technically, it's definitely possible, but is that the best way to do what Revit does, we'd have to look into that from a non-technical view, from the business process, I believe.
AUDIENCE: Are you sure that you can't attach shared parameters to this? [INAUDIBLE] have done that.
MIROSLAV SCHONAUER: I'm pretty sure. That's why I wanted to warn you.
AUDIENCE: But if--
MIROSLAV SCHONAUER: I mean, that's--
SASHA CROTTY: Well, is that-- OK. Anybody know the exact answer?
BORIS SHAFIRO: Well, there are two different objects. I just want to make sure if you're talking about direct shapes or there is shape-- what is it called? There is another element that can be modified. But direct shape geometry, once you create it, it is not modifiable in Revit.
SASHA CROTTY: No, it's not geometry where you can add shared parameters to a direct shaped object.
BORIS SHAFIRO: I think it's possible.
SASHA CROTTY: I thought it was as well.
MIROSLAV SCHONAUER: Maybe the new version. I mean, I think in 2017, definitely not.
BORIS SHAFIRO: One last thing, because there are many more questions, I hope. Yeah. One last thing. In terms of performance, if you have many elements with identical geometry, please make sure that you use direct shape type and direct shape instance. It definitely would boost performance because it is a lightweight representation of multiple elements with the same geometry.
SASHA CROTTY: Yeah, both in terms of storage and graphical representation and drawing.
MIROSLAV SCHONAUER: To help you to find what's the same, there are some utilities in IFC toolkit, I believe. In IFC there are some utilities to help you to find what is the same. I think I've looked into that once. It was quite useful. Something that Angel exposed while he was doing IFC for exactly the same problem, that if you have a repetitive thing, you don't create many instances, but just create one type and instantiate it many times.
AUDIENCE: But would it be best-- if I grouped them, with it be best to use group or assembly? What [INAUDIBLE]
MIROSLAV SCHONAUER: No, no, it's not about group and assembly. If the geometry same, you create just the direct shape type and then reference many instances of the same type, rather than always making one type in one instance, one type in one instance. I think that's what Boris was saying.
AUDIENCE: But I would like to group them. If I am to group them, would there be any performance issues between the grouping or assemblies or is that--
BORIS SHAFIRO: I would say it's probably similar. So--
AUDIENCE: Thank you.
BORIS SHAFIRO: No big difference here.
AUDIENCE: One of the problems I'm running into is this code signing when you're dealing with a single site, and you have to go out and buy a separate item so you can sign your code so that 2017 and on doesn't tell you, I don't recognize this publisher. And they've improved it to remember until you reboot your system, at least, for me. Next time I reboot the system, it forgets and it pops up 15 times. And I want to have 30 different standalone items and I have to keep putting them into groups with buttons that tell the user which one they want to use, and I'd rather just have them all load immediately.
But it seems to me that it should be somewhat automatic, if you have a site license for Revit that anything I've developed will load. There should be some functionality so that you don't have to make your own-- you don't have to go buy the code signing thing.
SASHA CROTTY: So Augusta, do you know where the Forge team is in supporting code signing? Yeah. So I think there was some discussion around the Forge team. I mean, as far as Revit is concerned, all we're checking for-- so it's stored in a standard Microsoft storage for signatures, so certainly should not pop up again after you restart. So that would be something to address, probably, with Microsoft, rather-- or figure out why that is not getting registered, because they basically track signatures and they get stored--
AUDIENCE: I don't have a signature.
SASHA CROTTY: Oh, OK. You don't have-- yeah, you don't have a signature.
AUDIENCE: --get one. I thought If you're only developing for one firm, you shouldn't have to go get a signing service to provide something to you, and have an annual license or something to keep it up to date if you're only going to be using it in one location.
KEITH WHITE: So if you're developing for yourself you should be able to develop it without signing your assemblies. Then when you load it for the first time inside of Revit, it'll prompt you that this is an unsigned assembly and you trust it.
AUDIENCE: Yeah.
KEITH WHITE: That act right there, it goes and publishes that certificate into a place in your Windows system that then, Revit sees the next time you start Revit.
AUDIENCE: It doesn't seem to remember that.
KEITH WHITE: Then that's a problem, maybe, with Windows. And I think that Jeremy even has some posts on the building coder that references some of those problems. And it may be Windows permissions base that's preventing that certificate from being written to that directory, but it's not normal for that to continually present you with that dialog. It should be once--
AUDIENCE: --now is I modify my code, I replace my DLL.
KEITH WHITE: OK, so then that has a new signature. That DLL now has a new signature, so it no longer matches--
AUDIENCE: --that, but I'm saying when I come in the next morning and start Revit then it gives me the same warning, and I--
[INTERPOSING VOICES]
MIROSLAV SCHONAUER: It's not the same DLL.
KEITH WHITE: Right, so when-- exactly.
AUDIENCE: No, I mean after I use it in the afternoon, I come in the morning, I already said I trust this, the next morning it might then--
KEITH WHITE: Then that's--
MIROSLAV SCHONAUER: That's another problem. Yeah.
KEITH WHITE: That's a Windows issue, not a Revit issue. Because Revit is making use of those Windows services to check for that certificate.
AUDIENCE: I can answer that one, actually. It's a group policy on the network protocol.
KEITH WHITE: It's a group policy on the network that restricts users from being able to either write to the registry or being able to write to the certificate store. So you would need to edit your group policy to allow that. And also, you can create your own certificate if you want to self-sign. You don't have to pay for one if you're doing it only on your own domain.
AUDIENCE: Thank you.
Is there a way to programmatically place keynotes at all? Like I've delved into the API and--
BORIS SHAFIRO: No. I checked specifically.
DIANE CHRISTOFORO: No, I'm sorry. That's my team, it's not exposed.
[LAUGHTER]
BORIS SHAFIRO: No, no, no, but first of all, thank you for asking, because it seems to be that it's just-- somebody didn't noticed that it was not exposed. So thank you for noticing, and I had to check the documentation yesterday to confirm that because it was supposed to be there. It is not. So we definitely try to address it at some point.
DIANE CHRISTOFORO: Now I'm working on design automation, in all honesty.
AUDIENCE: So that's planned to be implemented, then?
BORIS SHAFIRO: Well, that's exactly what we are not supposed to see here.
SASHA CROTTY: Well, we can talk about what is-- we can talk about what is and isn't on the roadmap. I can't tell you when that roadmap stretches to. I can't tell you dates. It's not, right now, something that is on the roadmap. That said, this is kind of an opportunity for me to do the little spiel about Revit ideas. So we do, actually, look actively for Revit Ideas. If you guys haven't-- have you guys all heard of Revit Ideas? Yes? OK, good. autodesk.com/revitideas, pretty easy to find.
So what you do is you can record your kind of wish lists or requests on there and vote for them. And a lot of the time I hear from the API community, saying, oh, there's not that many of us. We can't get the votes. You don't have to get to the top of Revit Ideas. There are a lot of people in this room. If every single person in this room voted on something, that would make it to the top of the API list.
And so it is actually something that we actively look at to identify, especially for APIs that are things that just haven't been exposed for whatever reason, because of legacy implementation, those are the kind of things we really try to pick off as many of those as we can. So I believe there is a keynote one on there. If there's not, please do file one and vote for it. It is really important to make sure-- because it's one place where we have a repository of all ideas, and that's really helpful to see. I had another point but I forgot.
AUDIENCE: Thank you.
KEITH WHITE: And I would add to that to say that what she was talking about with the Revit Ideas, don't just go there and post your request and then leave and never come back. It's a community, right, so as a user, prior to becoming an Autodesk employee there were ways to give feedback and give good feedback. And they listen. So there were opportunities where I was able to talk to some developers and had a suggestion and it was an easy suggestion, and it made its way into the product sooner rather than later. But they really care.
But you need to go back. And if you see someone else's idea, upvote it. So get some attention to it. So it's a part of this community. They're working really hard to create a product that works for, really, everyone in the world. No matter where you are, it should work for you to the greater extent. So it's our job to help them be aware of something that they weren't aware of before.
SASHA CROTTY: I figured out-- thank you, that is a really good point. And in terms of new projects, you guys probably have seen one of the requirements for teams going forward for the last maybe three, four years has been anything-- any new functionality must have an API completely. So we must be able to write our UI on top of the API. For some teams that's actually a requirement as well. So we do actively make sure we have APIs for any new work we're doing. But Revit Ideas is really helpful to go back and say, this part is missing-- you can do this in the UI but you can't do it in the API.
AUDIENCE: Hello. I wrote an add-in for our company that is a room tagging add-in. Is it on? Hello?
SASHA CROTTY: Yep.
AUDIENCE: Oh, sorry. It's a room tagging add-in. And provides a nice user interface, lets them select the views they want, pick the tag they want, couple other properties in there, and even does sheets. It'll just take whatever sheets you say, figure out what views are in there, and tag it. Great tool, works well when the rooms are in the model, in the current model.
But if you were looking at the way we work, most of the rooms are coming from an architect in a link model. And there's a room property on the tag. And fine, it shows up when it's in, but if it's a link model, that property is null. So you have no way of knowing through the API if you selected a tag, what room that's associated with. That's a problem. I have a workaround for it. I put some extended data on it that points to that room. That's one problem.
And then the second problem is there is no way to determine if you have dependency views, where there's a clipping plane and you've got a small portion of a room-- you can't tell link models if it exists in that view. So you have a room in a link model, there's no way to query all the rooms and say, oh, am I in this view? And my hack-- I'm sorry, my workaround--
[LAUGHTER]
--was I create the tags first, all of them, and then I can ask, hey, is this tag in this view? If it's not, then I just delete it. And that's kind of a-- before I put that change in here, I didn't realize this thing was creating tags that were orphan. I mean, they were still associated with a room, but you just couldn't see them. So I was wondering, is there any going to-- I've seen posts on it before, where it was a wish list thing on being able to show the room reference from a tag.
SASHA CROTTY: Do you want do you want to take this one, Diane? I think there's-- in addition to just the room-specific functionality, I think there's certainly opportunity for us to actually work better with link files and being able to reference link elements, and I think that is fundamentally something that's not very well exposed in the API at the moment.
DIANE CHRISTOFORO: I'm sorry.
[LAUGHTER]
I don't-- no, no, no, no, no, no. No, in all seriousness-- no, you're right. There are a lot of places where things started working with links in the UI that didn't work and we didn't add it in the API either at the time, because it was too long ago, or because we didn't think that it-- didn't notice it didn't work. No, you should be able-- we have a classical link element ID that lets you refer to elements in a linked model. I think we're at the point where we would have the ability to expose that value and say, like, oh, this is in a room in a link. But we don't right now. Make sure it's on Revit Ideas if it's not already. If it is, vote for it. We slowly determine that my team owns everything that isn't exposed.
SASHA CROTTY: Well, I'm guessing most people would want the functionality with links. I mean, who here doesn't? Anyone not want link functionality?
DIANE CHRISTOFORO: Who's like, I don't care about link. No.
SASHA CROTTY: Right, that's why I thought. So everybody vote on that idea.
AUDIENCE: Thank you.
Hi. I have problems with Raycaster because sometimes it fails to identify the nearest surface to intersect, especially with the topo surfaces. So I need to know if there is any precautions I should take to make sure that the Raycaster will find the nearest surface to intersect, and if there is a way to filtrate which category or family that I need the Raycaster to intersect with.
SASHA CROTTY: So--
BORIS SHAFIRO: I think, if I may, I think, especially with the topo surface, if it is not a regular Revit surface, if it is a mesh, Raycaster would not correctly find it. Right?
AUDIENCE: OK.
BORIS SHAFIRO: So just make sure there are different ways to create the topo surfaces. Is it always mesh, or sometimes? That's what I don't know, but one thing is for sure. If it is a mesh, Raycaster does not see it as a regular surface.
AUDIENCE: OK.
BORIS SHAFIRO: If it is a surface then it should be fine.
AUDIENCE: Yeah.
BORIS SHAFIRO: So that's the first thing to check.
AUDIENCE: OK. So if I want to filtrate the type of elements that I need the Raycaster to find, is it possible through the API, or is it not possible?
BORIS SHAFIRO: I don't remember.
MIROSLAV SCHONAUER: I think you can-- if I remember vaguely, you can pre-filter. You can pass pre-filter selection to Raytracer. I mean, I vaguely remember from some sections--
BORIS SHAFIRO: Oh, you mean you can create just regular element filter and pass it as an argument to Raytracer.
MIROSLAV SCHONAUER: I think so.
BORIS SHAFIRO: That's probably the way to go. And actually, element filters, they are quite powerful. You can use a lot of different criteria, parameters, categories, and everything else. So check it out. It should be one of the input arguments.
MIROSLAV SCHONAUER: We're talking about same thing, but I think we are. Shoot us an email. We can confirm this.
AUDIENCE: OK, OK. Thank you.
I'm having trouble importing shared parameters to system families. The code works perfectly for every other type of object except systems.
SASHA CROTTY: So you should add them, I believe, as project parameters that are shared. That would be the-- to those categories, I think.
AUDIENCE: Is that the only way?
SASHA CROTTY: I believe that is the only way to add shared parameters to--
BORIS SHAFIRO: When you say systems do your mean system families or do you mean--
AUDIENCE: System families. Because I can actually attach-- I can go through the same process of temporarily switching the shared parameter file to the one I've got, attaching that parameter name, the shared parameter to the category, which works fine with system categories. The trouble starts when you try to set that parameter and it says it's not a type parameter. That's the error you get.
BORIS SHAFIRO: It should be exactly the same whether it's a system family or if a-- there is absolutely no difference. If that category appears in the UI when you say bind category, then so there is absolutely no difference in behavior in systems.
AUDIENCE: Oh yeah, the binding works perfectly. But when you create that-- when you bind that parameter, which starts off as empty, then when you try to put something into it, that's where you get the error. So the set function doesn't work.
KEITH WHITE: So when you're binding the parameter, you should determine how-- you decide how to bind it, as a type parameter or as an instance parameter.
AUDIENCE: Yeah, that goes through fine, but the next step, when you try to set that parameter, put some text in it, that's when it fails.
KEITH WHITE: Yeah.
MIROSLAV SCHONAUER: I think, vaguely, I had hit this problem. You have to finish the transactional binding before you try to attach it.
AUDIENCE: So you have to start another transaction?
MIROSLAV SCHONAUER: Yeah, I think so. I think that's the problem.
KEITH WHITE: So what you do is you have to go and insert all your parameters first, and then you have to go back and start to edit the data. So you have to finish the transaction of inserting and mapping [INAUDIBLE]
AUDIENCE: Oh, so you end the transaction and then you start another transaction in the same plugin?
KEITH WHITE: Mm-hmm. Yeah, so whenever I've done that in the past, I just blanketly insert all the shared parameters I need, finish the transaction, then I start iterating over whatever elements I want to effect with the new parameter value, and then it'll work. So you're caught in a situation where it's technically-- and they have the technical terms, but it's not recognized in the database yet, so you can't affect the data in that parameter until the transaction is closed.
BORIS SHAFIRO: Yes, it's actually one of the best recommendation for any API development for Revit. Please remember that closing the transaction, the only state of inconsistent data in Revit is between opening the transaction and closing the transaction, because then you just randomly changed some data, created some objects, and the only way to bring Revit model into the consistent state is closing the transaction, which automatically calls regenerate.
And that action actually causes everything that depends on your changes to recalculate. So you bring model back to consistent state by closing the transaction. So sometimes consecutive changes need to be done in separate transactions. This is probably one of the cases.
AUDIENCE: Thank you
BORIS SHAFIRO: It's not recommended.
AUDIENCE: And regard to-- just one more little one-- with regard to actual family parameters, not shared parameters, but family parameters, embedded in family-- at the moment the only way I can create them is by automating the keyboard mouse combination to go and click on an object to-- so you click on an object, then you automate the process of clicking on Edit Family, open it up, then you import it in and then you click Close and then window pops up, you scroll up and click on Import. That's a long process. Is there a way to speed that up without having to open the family for editing?
BORIS SHAFIRO: Well, I'm not sure. Maybe Paolo knows. You've done a lot of work with the family editor, Paolo, so you may answer. He should be here. Paulo is our expert on Dynamo, but uses a lot of API, and expert on--
AUDIENCE: Sorry, actually, I didn't quite follow. I'm sorry.
To create a conventional family parameter, not a shared one, there is no way of doing that without opening the family for editing first. So you have to be in the family editor before you can do it. And the only way I can do it is by automating the keyboard mouse combination to click on it, to edit it, and--
There is actually no-- because the family is a document, OK, probably not too much technical here, it's like a document. So you can open in the same application. So when you're pointed to the family object from the RVT file you can actually call the edit family method. So this [INAUDIBLE] the application, and then you can do whatever you want as if you were dealing with the UI, without the UI though.
But when you close that family object, the editor window, then you get a window coming up saying, would you like to load that into the family, that's when you have to go through the keyboard automation to click that.
OK, so there is a slightly more technical thing to do. So you need to create-- you need to inherit from an interface the load family options, and from there you need to say what you want to do. In this case-- so for example, you want to disregard the values, or then you share families that you may have in the family document you're editing, and once you decide how you want to deal with these objects, then you can just save the family and reload it directly in the document, the RVT file. So you don't have to go through the pain.
Oh, I see. So it's a pre-selective answer to a predicted question, is it?
So there is an overload that asks you--
Oh, an overload. OK, great.
Yeah there is an object to load an option, load family option object that you need to create by yourself. So it's a separate class that you need to inherit from an interface. And you have two kinds of methods that you need to implement, being an interface. So you can decide how you want to deal with new values or new shared families.
Thank you.
RAHUL BHOBE: Just one question. You do have to load it separately, make the changes, and reload it even in UI. I mean, right now we do not support changing family contents from inside projects.
AUDIENCE: Also you have to then offload that family and reload it again.
MIROSLAV SCHONAUER: Yeah. You don't have to upload.
AUDIENCE: Or you just reload, right?
MIROSLAV SCHONAUER: You just have to call load, that Paolo said, and when you call load there is signature, you say do you want to override parameters. But you can do everything programmatically. You shouldn't be able to--
AUDIENCE: You shouldn't have to send keys, then.
MIROSLAV SCHONAUER: Right, Yeah.
SASHA CROTTY: Yeah, there's a full API to edit the family, modify it, load it, without any user interaction whatsoever.
AUDIENCE: Fantastic. thank you.
SASHA CROTTY: But to Rahul's point, yes, editing the family is necessary because it is a separate document and there's actually a lot of stuff that happens during load that's not just copy pasting. There is actually elements that move between the two different-- it's really complicated, but--
AUDIENCE: Thank you very much.
So the one in the back was first.
I have kind of a quick one. We have an add-in. We used the AVF, we use the markers on text style to display basically a grid of numbers in Revit. We were hoping to extend that to also show contour lines that follow the numerical data, and we found that the AVF doesn't really support that. There's the shaded option but there's no actual just lines. I was just wondering, is there any other approach we could take besides using the analysis framework to show contour lines?
SASHA CROTTY: Yes.
AUDIENCE: Oh, good.
BORIS SHAFIRO: 2018.
SASHA CROTTY: Yeah, 2018, and if you have really detailed questions about how to do it, talk to Alex right here in the front. So there is something called the direct context API. This allows you to draw any kind of graphics that you want directly into Revit. Revit doesn't care what you draw because we don't actually look at what you draw. We just draw it-- we push it to the graphics card. So it's really powerful. It's actually what we use to implement the-- what's it called? Coordination model, yes, thank you. Navis underlay.
In other words, yes, so coordination, that's actually using that API to push those graphics. Navis underlay was actually our initial implementation, kind of try it out and test out that API, but that API is really, really flexible.
AUDIENCE: And I guess just a follow up to that. When using the AVF, we've noticed we've had all sorts of problems with printing the results. The numbers get clipped and things like that. Well, this new direct context API, do you anticipate it would have similar problems, or is it a completely different graphics thing?
SASHA CROTTY: You want to try?
AUDIENCE: I can try to answer that question. So direct context is completely different from AVF, so there is a good chance that your problem is solved. I'm not sure about text, if you're referring to printing text. Maybe we should talk about that separately.
AUDIENCE: [INAUDIBLE] numbers.
AUDIENCE: Right, numbers. And another thing, so direct context graphics are produced using rasterizations. So they can be printed in the raster format only. Perhaps you should expect that.
BORIS SHAFIRO: And last point, quick one, if you do want to use AVF, there is something like contour lines. Because if you're using the option called colored surface, you can use the gradient color that corresponds to the values you put on the surface, or you could use the solid colors. And pretty much you set the ranges and it does draw lines in between them. So these are your contour lines. So there is a way to do something like it, not exactly. Yeah.
AUDIENCE: [INAUDIBLE]
BORIS SHAFIRO: Yeah
AUDIENCE: It's just not exactly [INAUDIBLE]
BORIS SHAFIRO: All right, yeah, just whatever's there. OK, there are questions in the back.
AUDIENCE: [INAUDIBLE]
So yeah, just short question. Revit API is really bad at working with materials. For example, it's still not possible to assign material to the column from the API, even in 2018, so here's the question. Do you have any plans to improve it, and when actually can we get something like that?
BORIS SHAFIRO: Well, there are different aspects of this question. Let me make sure. One, biggest improvement for materials was done in 2018 and they present it tomorrow. It is now possible to modify visual appearance of materials through API. It was a long-standing request. But you're asking about different thing. So how you assign material to a column. Column means family, right?
AUDIENCE: To different elements. For example, I cannot assign material to specific element. Not to the whole category.
BORIS SHAFIRO: Well, again, unfortunately does depend what the element is. If it is the family instance, for example, I think the only way to change the material, you need to open that family for editing, pretty much similar to this procedure, and figure out how materials assigned there, assigned material, and reload the family.
For, for example, for walls, it's totally different API how you assign materials. You assign materials to layers. So in many cases, it is specific to the element. So there is no unified way to assign material to an object. That's definitely so. Yeah.
MIROSLAV SCHONAUER: Just one quick question. So when you say to column, do you mean to instance of the column. Do you see--
AUDIENCE: Yeah, the column was created programmatically as well. There was such back in Revit 2016, and it was said that it was fixed, but actually, I still cannot assign material from the API.
MIROSLAV SCHONAUER: Have you got material in the list of parameters for that column?
AUDIENCE: Let's say I have some custom material.
MIROSLAV SCHONAUER: Because if you have--
AUDIENCE: I want to trade material in assigned--
MIROSLAV SCHONAUER: If you have a material in the parameters for that either instance or type, you should be able to look through parameters, that parameter will be of element ID, and then you can assign other elements ID for materials, and it should work. Unless there is a bug.
BORIS SHAFIRO: Well, something tells me that this is probably some bug that you found. I mean, yeah, because it is-- whatever it is, we will definitely need to see the specifics. So is there something that is not done, and-- is it discussed on Building Coder or anywhere? Probably the easiest way, just shoot us an email.
AUDIENCE: OK, all right. Thank you.
BORIS SHAFIRO: Thank you.
AUDIENCE: All right. I think the answer is probably no, but I'll put this out here. So this kind of goes off some previous questions about editing families. Like I understand that you need to edit the family to actually edit it, but what I'd really like to be able to do is just sort of replicate the project browser level, like I don't need to do things to the families, but a lot of the tools I'm writing are batch processing tools and tools that are like trying to modify a lot of families, so I have a project that's got like 4,000 families with seven levels of nesting and I want to modify all the families of a certain category.
So right now, as far as I know, there's no easy way of finding all-- including nested families, all the families in the project that are of a certain category. So having some way of, just sort of at a metadata level, determining that there are all these annotation families, that the only way you'd actually see that as a user is by opening and editing the nested levels of families.
SASHA CROTTY: OK, so not shared nested, just regular nested.
AUDIENCE: Regular nested families, where as a user the only way you'd find that out is by editing the family, right? So I mean, I can programmatically recursively go through the entire model and open and close every single family to determine that. But it'd be nice if there was just sort of a simple map that said, at a high level, there's all these families with these names in this category, for instance.
SASHA CROTTY: The problem with that is that is-- sorry, not speaking properly. The problem with that is that nested families actually do not exist in the project environment. There is no reference, so the project doesn't know that those families exist.
AUDIENCE: Yeah.
SASHA CROTTY: Which is why--
AUDIENCE: I understand. I just think it would be nice if the family itself just knew at a very high level of what families it contains. Not like the actual functionality or the parameters, but just the name, I contain these nested families and those nested families know that they contain these nested families with this name and category and is it shared-- so basis set of five parameters that identify that this exists so that you could use that as a tool to determine, oh, that exists down in that level. This is a tree I need to go parse down through and go find. Rather than what I'm doing now is just go through everything, basically, open and close every single family in the project to find the three families that happen to be nested.
SASHA CROTTY: OK.
AUDIENCE: Right.
SASHA CROTTY: Yep. [INAUDIBLE]
AUDIENCE: Hi, how you doing? My question is more about integration of spec sheets into drawings. So the problem that we're having is we have our spec writers that wants to control to spec sheets in a Word document. These spec sheets can spread over 12 drawings. So we have a workaround where we export and import images and do that. Do you have an interface where you can work better with Word over several sheets?
SASHA CROTTY: We do not. I think there are a number of partners that do actually provide something along those lines. So that's certainly worth taking a look at what's out there from partners, some of them who may be in this room. I think that's probably the best short term solution. The other thing is, usually what we say from the [? Revit ?] perspective. We certainly don't want to store all that information in a Revit file, right? We want to say you can have access to all that information, but a Revit file;s probably not the best repository for it. So that's also something to think about. How do you externally, potentially, reference them rather than trying to include them directly? Again, it's worth having a conversation, a slightly longer conversation that we can have here about what your workflow is and why those spec sheets can be included directly.
AUDIENCE: The question came about because normally people have a smaller project, which, you don't want to go through the whole process of getting a big spec book, so it's just a quick way of referencing something. So for anybody who's here that know how to integrate that, please talk to me afterwards.
Hi. We have an add-in which creates legends in Revit, it but it's a little bit of workaround to create a new legend. We have an empty one which we copy and then modify for our needs. Is there any way that is going to change in the near future?
SASHA CROTTY: So there are a number of legends requests in Revit Ideas. So I don't think we have anything concrete that I can think of on the roadmap right now in terms of changing that. Certainly I know that there are a number of requests around legends, so it's something we may consider investing in going forward. The challenge, of course, is the minute that we touch legends, there are about a million requests that people have for changing them. And it's, you know, why didn't you do my request, kind of thing.
But that doesn't mean that it's less important to do that. And certainly automating processes, like being able to create them more easily, seems like a very, very reasonable thing to do because that means that we actually have to do less in terms of legends.
AUDIENCE: Yes, because I have two other questions for it. In the latest version of Revit there's an Excel function called find reference by name for family instances. That's working great, but if you create a legend you have no family instance. You just make a symbol. But how to find a reference on a symbol? There is no find reference by name on a family symbol. It would be nice, if it was possible, so we can create our measurements automatic. Now we can only do that in [INAUDIBLE] because there we have a family instance, but on the legend we don't have that.
SASHA CROTTY: Yeah I think that's part of the reason that we're a little bit hesitant to enhance legends because they're not really-- they're not really real geometry that you can measure and treat that way, so I think that's part of the problem that we have, and that's kind of my understanding, is that the geometry is actually representational. Am I not right, anybody?
MIROSLAV SCHONAUER: Yes, it's mostly pretty picture, but it doesn't have a lot of information in it. I don't think even-- does the legend have named references at all?
AUDIENCE: No, no, because the legend component is just a family symbol, so not a family instance. So that's why I find reference by name is not available. I can do it by hand. So I thought if I can do it through the Revit UI, so there must be a way I can do it through the API, but that's not the case at the moment.
SASHA CROTTY: Yes, so you're basically saying can you extend the same functionality beyond instances to symbols.
AUDIENCE: Yes.
SASHA CROTTY: We'll certainly think about that.
AUDIENCE: I just have one last question, also about legends. Normally we can rotate a lot of elements. But in a legend, if you place a legend component it cannot be rotated. In our case, we have a special business case where that's necessary, but currently we cannot. Also we cannot do it through the UI, so through the API is also not possible. Maybe any plans for changing that?
SASHA CROTTY: Not at the moment, no. Yeah, but certainly, all of these things-- as I said, it's really important to put all this stuff on Revit Ideas. And ideally a separate request, not as the same one, because we may be able to take one and not the other, and if it-- bigger requests do not mean that it's more likely to be implemented. It's actually tougher for us to fit it into our development schedule. Just FYI. So it's better to have smaller things.
AUDIENCE: OK.
Hi. I've got two. First one is one of the tool types we typically develop is cleanup. So one of the requests was to accept the primary design option in the model. Is there a way to accept? I was not able to find one in the design options [INAUDIBLE] class. And then my second question has to do with the document opening event. We're trying to track model health and file paths and all types of information. But one of the items that isn't in there is whether a user selected the option to audit a model. I know I can get--
BORIS SHAFIRO: Option what?
SASHA CROTTY: To audit the model.
AUDIENCE: So I know I can get that from the journal file in parsing that, but it'd be good if that was just property. So design options and--
SASHA CROTTY: Yeah, so in terms of design options, I believe we don't have any design options in API exposure, so I'm guessing that it's not available. So I think that is probably more achievable than doing a full design options API. It's actually quite a large project, which is really why we haven't done it to this point, because we actually have to rewrite a lot of the internals to support the API. But just being able to accept the primary option seems like a much more achievable thing, because it'd be a little bit more straightforward and just basically execution of something.
So again, please put it on Revit Ideas if it's not on there. I sound like a broken record and I apologize for that. But it is really important that everything is kind of documented in one place.
BORIS SHAFIRO: Yeah and the document opening event, again, it's probably not a big deal to add an extra thing in the argument, but it was not just there. So again, put it on the Ideas station, please.
AUDIENCE: Will do. Thank you.
For host based families, orphan elements, how can I re-host them if I want to do this again? And I tried to update the host parameter but it doesn't work. Is there any method to re-host the orphaned element again?
BORIS SHAFIRO: Sorry, I'm not sure I understood the question. So host based family, and you want to do what?
AUDIENCE: For example, if I have a ceiling based family and i delete the ceiling and recreate it again, so all the attached elements will lose the host. And then I want to re-host them again to the new ceiling. So how can I do this through the API?
SASHA CROTTY: Just re-host for a family?
AUDIENCE: Even if I updated the host perimeter, it doesn't work.
SASHA CROTTY: Yeah, so I think the host parameter right now is, I think, read only, which is probably why you can't modify it. And I believe we are missing a re-host method. So that is another really good request.
AUDIENCE: The only workaround I you have done is to recreate another instance of the same families, apply the same transformation, and re-host it to the new ceiling or flooring or whatever.
SASHA CROTTY: Yeah, that's not a great workflow, so thank you.
AUDIENCE: Yeah, this is another problem.
Hi. I had two questions about piping. The first one, I'm a little bit new to programming against the API. I thought that the first thing that I'd automate would be pretty simple, be sloping the pipe. So I go to the UI and I know that I can just pick eighth, quarter, half per foot. Turns out that that's a read only parameter and I can't set it. So that's fine, but I wanted to know if-- I guess I wanted to know how you guys do it internally. Do you get the length and then drop the z-coordinate by a certain amount, or do you guys--
BORIS SHAFIRO: Well, there are not a lot of people here who know about piping. Yeah, so that's definitely, because MAP developers are not here. So we should have one [INAUDIBLE] expert. So if you can help with answer, please do.
AUDIENCE: You can use MAP and then draw a line, then turn that line into a curve. [INAUDIBLE] half inch per foot, and then change the coordinate for just that second [INAUDIBLE]
AUDIENCE: Yeah.
AUDIENCE: Draw a line. Turn that line into a curve [INAUDIBLE].
SASHA CROTTY: Yeah, so I think the answer, just for record was, do a little bit of math, figure out what that line is, turn that line into a curve, and turn that into a pipe.
AUDIENCE: Is the fitting going to follow it? If I drew a new-- say that there was a straight piece of pipe and I wanted to slope it. If I drew a new line and then turned it into a pipe, that fitting would still hover far above the-- OK, all right. Fair enough,
And then the second one, I can't really tell you exactly how many times I've tried to y in a branch into a main and it goes the wrong way. I can't find anywhere where I can actually say, the flow's going this way down the pipe, Revit, please y in so that it goes that way instead of trying to go upstream. Is there any plans to implement being able to say in a piece of pipe or for a system or whatever, like, go that way?
SASHA CROTTY: Connectors are supposed to do that, right? The connectors are supposed to specify direction?
AUDIENCE: So yes, they do. In the in and out there is a couple different connector types that you can use, but for a fitting connector there's no way. And if you have a really, really complex system, I've spent hours and hours and hours trying to find-- it was my back flow preventer. I had it flipped around, and it was ruining the entire thing. I just had to flip it. It was a piping accessory, and then it worked.
SASHA CROTTY: So I think this is one of those questions we just need to take offline. So if you can shoot me an email, I'll make sure to send it over to the MAP team, who can probably get you a better answer.
AUDIENCE: OK. All right, thank you .
All, right load as group is a UI functionality. I don't believe it's available in the API, so I've mimicked it. But I cannot move the insertion point. Anything that anybody can help me with?
SASHA CROTTY: A vote on that idea. Yeah. That's one of the ones that's on my really short list, that I'd like to get done because yeah, it's very painful because you can't really edit a group and you can't load the group and you can't do anything with groups, and I realize people use groups all the time, so yeah.
AUDIENCE: Door handing, or more abstractly, scheduling whether an object is mirrored or not. Is there a-- will it be available in Europe?
BORIS SHAFIRO: There's a trick, probably, to do it. I don't think it's available in the product, isn't it?
SASHA CROTTY: No.
BORIS SHAFIRO: But you can do a simple trick. You can check through APIs whether it is mirrored or the transformation is flipped, [INAUDIBLE] all information and then just push that in a shared parameter of true false, and that's it, and then schedule that parameter. It should be two-step project.
SASHA CROTTY: There's also an idea for that.
BORIS SHAFIRO: Is there?
SASHA CROTTY: Yeah, there is. In terms of actually improving it, because a lot of the things that I'm hearing here are actually on Ideas, but please do vote for them. Again, sorry. Sorry I sound like a broken record.
AUDIENCE: Hi, this is on groups also. We have extensible storage on the group. And if we change the offset or the level parameter, the extensible storage just disappears.
SASHA CROTTY: That's not good. I'm hoping that you've--
DIANE CHRISTOFORO: When you change the level of a group, any extensible storage on the group disappears. Does changing the level of a group secretly delete it and remake it?
RAHUL BHOBE: That's probably because it's creating a new instance here, Yeah. But it could be a bug. You should file that.
DIANE CHRISTOFORO: Yeah, that's a bug, really. Even if I know why it's happening.
RAHUL BHOBE: It probably changes the instance ID, doesn't it?
AUDIENCE: Maybe. I haven't seen into that. But I usually can do it when we are not running the code. So we can track it and reapply it.
RAHUL BHOBE: You should file an issue over that.
SASHA CROTTY: Yeah, certainly stuff like that occasionally, because secretly under the hood we'll replace the element. And if it's just missing the code to copy the extensible storage it'll occasionally drop it. I've encountered that in a couple of other cases. So if you guys come across that, please let us know, because we'll fix it.
AUDIENCE: Yeah. And also rotation on the group, like just location, rotation.
RAHUL BHOBE: Yeah, they all fall in the same category. Rotation, changing, group types, all those things, if you find those issues please let us know. They are more like extensible storage issues, but we could still probably handle them.
AUDIENCE: Yeah, I was just thinking of getting the rotation. If you go to location and rotation it's empty, zero, null.
SASHA CROTTY: Is there no transform on the instance? There's probably-- you probably can't get it as a parameter, but you can probably get the transform of the group instance. And you can probably calculate it back for now.
RAHUL BHOBE: The group instance would probably have a transformation, right?
AUDIENCE: Yeah, but the rotation is null, zero, nothing
BORIS SHAFIRO: Yeah but from transformation matrix you should be able to work out. I think that's what they're saying.
SASHA CROTTY: Well, OK, so if you can't get it, if the transformation matrix doesn't include a rotation-- which seems odd to me, but things happen-- yeah, also another thing, I think, to file to the ADN team and then we can kind of investigate it.
AUDIENCE: Hi. I have a couple of questions. I've spoken to someone about these. Shared parameter names inside Rivet, not being able to rename them, from my understanding, using the guild, anyways so the names should be free and flexible to modify at will?
SASHA CROTTY: It's not. And the reason is because it's the good matched with the parameter name and that's the unique identifier.
AUDIENCE: On both?
SASHA CROTTY: That's why it's difficult , but I think we understand the problem and I think longer term, what we're looking to do is figure out how we can use cloud services to allow you to define parameters so you don't even have to deal with shared parameter files. That's the long term solution the way we'd like to approach it, because we want to actually-- because that will allow people to transfer between company boundaries, so it's not limited to one shared parameter file.
AUDIENCE: Yeah, because on top of that, when you've got a shared parameter, project parameter, family parameter, and the fourth one, it's almost impossible in Revel without cycling through every single type of parameter to work out what it is, across a large number of parameters. You could be spending a lot of PC time just trying to calculate which parameter it is you're trying to attack, because each of those parameters types could have the same name. So you can't use the name to go off. So you've got a-- you can get them, but it's a difficult task.
SASHA CROTTY: So are you basically saying, given a parameter you'd like to find out what kind it is?
AUDIENCE: Yeah, so a shared parameter, a project parameter, a family parameter, and whatever the fourth one is.
BORIS SHAFIRO: Built in parameter.
AUDIENCE: Yeah, built in parameter. You could have one called name one for each of those four instances, so it's very hard to work out which is which to be--
BORIS SHAFIRO: Not just that, but you can have the same name in the same of these four, so you can have four times n. And it's all legal in Revit. That's how it's designed, unfortunately. Or fortunately.
[LAUGHTER]
AUDIENCE: It's just very hard to work out. If it had a type on it, a numerator, then it would easy, work out what it was.
Other ones are probably on Ideas already, but ability to get into view templates programmatically and customize templates.
SASHA CROTTY: Yeah, I'm pretty sure that's on there as well.
AUDIENCE: On there. Undo handler, ability to see when somebody is undoing and what they're undoing. Track adds, modifies, deletes. You can't track undos unless you're doing a whole lot of other-- you're tracking PC or you're tracking keyboard transactions.
SASHA CROTTY: OK, that's interesting.
AUDIENCE: And another one which is more probably Revit-based is the ability to apply a level matrix much the same way you can with a phase inside of Revit. You can matrix between different offices, the phases. If you could matrix between the levels throughout projects, then, and schedules and the like, [INAUDIBLE] got access to the schedule, and I think it's filter, or sort and group by level. At the moment, you're, I think, limited to either filter or grouping them, but the ability-- or end, depending on the way that they're named, the names sort of bounce all over the place as well as soon as you include linked models and a schedule. Might not have explained that right.
BORIS SHAFIRO: Please try to describe the problem in an email. I mean, is it difficult to follow all the steps you just described.
AUDIENCE: So in Revit, you've got-- when you got a linked model, you've got the option to go to the model and you can matrix up the phases of the projects, so the phases align for each different models. I might call mine phase one, another guy might call his stage one. If you could do that also with levels, so somebody might call theirs-- well, even at the moment, if I call mine level one and the other guy calls his level one, when it comes into schedules, it doesn't recognize a level as a level anymore, just sort of dumps it back down to text.
SASHA CROTTY: So basically you're saying you'd like a level map the same way there's a phase map.
AUDIENCE: Yeah, yeah, and then for the schedules to also recognize it as--
SASHA CROTTY: Make sure that's on Revit Ideas. I mean, as you know, it's not exposed now.
AUDIENCE: I've put it on Revit Ideas and it was [INAUDIBLE] back off.
SASHA CROTTY: If you are hearing this and you think that sounds cool, you should vote for it.
AUDIENCE: I'll put it back on.
SASHA CROTTY: Other people.
PRESENTER: I'm really, really so sorry to interrupt, but our time is up, sadly. We've run over like five minutes. So I will put the notes on the AU website, yes, with the notes and the handout, and that's it. Thanks for coming. Round of applause for our stars here. Thank you.
[APPLAUSE]
Thanks for coming.