As you have seen in the past year and more, I am more than happy to answer any questions I can on the Revit API submitted in comments to this blog. Sometimes, however, questions are submitted that I really cannot answer. In many cases, there are other forums which are very suitable alternative places for either asking such questions or starting a thread or discussion on a specific topic.
I occasionally also receive emails with questions. In many cases, I will ask the sender to have a look at some of the blog posts and submit their questions as comments to those, so that other developers can respond as well.
And obviously, before you ask any questions at all, you can often save yourself and others some unnecessary effort by searching existing resources for answers. An efficient tool for finding answers on Revit API programming topics is Rod Howarth's global online Revit API help described in this previous post.
Here are some examples:
Question: I have some questions about sending and receiving keyboard input in Revit. I tried to reserve some keys in my plug-in, but haven't found any delegate to handle keystrokes. Unfortunately as a student I haven't got ADN subscription and I don't know anybody to ask... I hope you'll give me some tips... I found some resolution of this problem but it still isn't a good idea.
Answer: This is a question that is a bit too vague for me to say anything about directly. Instead of sending it to me by email, can I ask you to have a look at some of the blog posts dealing with these kinds of issues? If anything remains unclear and you have a specific question, please post it as a comment to the relevant post.
If you are looking for more general background information and a discussion among your peers, there are lots of people to ask out there, an unlimited number.
For instance, you can open a thread on AUGI, the Autodesk Users Group International. AUGI provides a large number of dedicated forums for discussions on topics such as Revit, with numerous subtopics including the Revit API, and also lots of international forums.
You can also initiate a discussion in one of the Autodesk discussion groups, for instance on the topic of Revit Architecture or the Revit API.
Here is a comment by Vincent providing an example of the kind of query that I cannot really answer at all, since it does not have to do with the API itself:
Question: Can you recommend a consultant in the Los Angeles area that understands the basics of the API? I would really like to work with someone for a day or two. Again, I'm learning C# programming and I feel adding source code and code regions are probably pretty easy to do once I gain a better understanding of the basics.
Answer: The short answer is no, sorry. I'm in Switzerland, in Europe. Some of the people I talk with may or may not be in your area, but I really don't know.
I completely agree with your assessment that it is not hard to make use of the API once you have gone through the getting started material. Still, for more complex issues, a bit of professional guidance can be invaluable.
You might be able to find someone in the ADN member database. Or you might post a query to the Revit API discussion group under http://discussion.autodesk.com > Revit Architecture > Revit API, or to AUGI, either in a specific forum e.g. under Revit or the Revit API, or possibly searching the AUGI web site globally for Los Angeles or something.
Autodesk Developer Network
At this point, I should not forget to mention my real work, which is providing developer support as part of the AEC workgroup of the DevTech team for ADN, the Autodesk Developer Network. The Autodesk Developer Network is a program providing professional support to programmers writing add-in applications for Autodesk software. One advantage of being an ADN member is that you can ask question on the Autodesk APIs and are guaranteed an answer within a certain time span, three days for standard and 24 hours for professional members. Here are some other of the program benefits:
- Access to almost all Autodesk software and SDK’s, including early access to Beta software
- Members-only website with thousands of technical articles
- Unlimited technical support
- Product direction through conferences
- Marketing benefits
- Exposure on autodesk.com
- Promotional opportunities
- 1 to 3 free API training classes
You don’t have to be a commercial software developer to join ADN.
And there is yet another level of even higher guidance available: if your needs go beyond simple generic support for the standard Autodesk APIs, you can also ask ADN or the Autodesk Consulting group for mentoring or custom development services.
Hi Jeremy,
I was hoping you can help me with an issue I am having with the Revit API. I wrote a printing application for Revit that my company uses for billing purposes. One of the requirements of the application was to allow users to print to devices that are not connected to their computer when Revit starts. I am able to do that using the SelectNewPrintDriver() method in the PrintManager and give it as a parameter the network location of the desired device ("\\server\queue"). My issue is that this method takes forever the first time I connect to a particular device, sometimes it takes as long as 30+ seconds for the method to complete. Can you give me any advice on how to speed the execution of the method?
Posted by: Ivan Markov | November 09, 2009 at 14:45
Dear Ivan,
Have you checked whether the same behaviour occurs if you select the printer through the user interface instead of through the API? From what you say, I suspect that this may be the case. If so, you could turn to product support and ask them. They probably have a solution which has nothing to do with the Revit API. I am pretty sure that there is nothing in the Revit API that you could use to improve this programmatically, anyway.
Cheers, Jeremy.
Posted by: Jeremy Tammik | November 10, 2009 at 02:51
Blogs are so informative where we get lots of information on any topic. Nice job keep it up!!
Posted by: Sports Dissertation | November 17, 2009 at 08:31
Dear Jeremy ,
Please help me with an issue I am having with the Revit API. How can i access SystemVariable like in autocad GetSystemVariable("insunits") to get unitMuliplier.
Posted by: Bhavana | November 26, 2010 at 03:58
Dear Bhavana,
You cannot access any system variables in Revit because no such thing exists.
For the display representation of units, please refer to the Revit SDK sample ProjectUnit, which lists all units in the current project and displays their format information.
Cheers, Jeremy.
Posted by: Jeremy Tammik | December 01, 2010 at 12:51
Drawing a polygon around a floor,
Hi Jeremy ,
I am looking for the best way to draw a polygon from Model lines or detail lines around a floor. I tried to do that by getting the floor's corners and adding an offset (for example 2 m) to them. Until now I can do that only for rechtangel floors, that are parallel to coordinate axises. With other shapes will be my method very comlex because I have to take the different angels into the account. I hope that it is possible to lose this in another simpler way.
My best wishes
Habib
Posted by: Peace | February 28, 2012 at 06:13
Dear Habib,
A present for you:
http://thebuildingcoder.typepad.com/blog/2008/12/3d-polygon-areas.html
Cheers, Jeremy.
Posted by: Jeremy Tammik | February 29, 2012 at 06:39
Hi Jeremy,
thank you very much for the present but i think i have to simplify my question. My question in other words is: How to create parallel model lines to exicting Modellines (or to roof's edges).
P.S. this have to be done only in 2D
Posted by: Peace | March 03, 2012 at 07:00
Dear Habib,
That is indeed simple question. The answer is simple as well. You can either calculate the model line start and end points yourself, offsetting the original curves endpoints perpendicularly to the line, or you can use the Revit API Curve.Transformed property to create a curve offset by a specific direction.
Cheers, Jeremy.
Posted by: Jeremy Tammik | March 05, 2012 at 03:46
Hi Jeremy,
Thanks a lot. I found it :)
Posted by: Peace | March 05, 2012 at 13:12
Dear Habib,
Great, congratulations, and thank you for the good news.
Cheers, Jeremy.
Posted by: Jeremy Tammik | March 06, 2012 at 12:57
Hi Jeremy,
Line.Direction Property Returns the direction of the line as XYZ (sinA, cosA,0)(in 2D).A have to be an angel with North (I think so but i m not sure).
My quastion is: what is exactly the direction of a line in revit API?
Cheers, Habib
Posted by: Peace | March 10, 2012 at 11:31
Dear Habib,
I do not quite see the sense or purpose of your question, but here goes anyway:
A line is a geometric concept connecting two points. You can consider one the start and the other the end point.
If you keep track of this difference, you in fact have a directed line.
In Revit, the start and end points are distinguished by their index, which is 0 for the start and 1 for the end point.
I would consider the direction of a directed line to be the vector from the start to the end point, possibly normalised, e.g. for a Revit API Line object instance L:
XYZ startPoint = L.get_EndPoint( 0 );
XYZ endPoint = L.get_EndPoint( 1 );
XYZ direction = (endPoint - startPoint).Normal;
I hope this helps.
Cheers, Jeremy.
Posted by: Jeremy Tammik | March 13, 2012 at 05:55
Jeremy,
I have an idea for an open source.project on sourceforge. I am new.to creating sf material so it may.take a.while to get it running.right. link is here for anyone wishingng to collaborate:
https://sourceforge.net/u/apsis0215/profile/
If that is not it email me at [email protected].
Posted by: Ron Allen | April 10, 2012 at 00:24
Dear Ron,
It would help if your sourceforge profile would be more specific on what this is all about.
Cheers, Jeremy.
Posted by: Jeremy Tammik | April 13, 2012 at 05:36