Revit API Forum
Welcome to Autodesk’s Revit API Forums. Share your knowledge, ask questions, and explore popular Revit API topics.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Revit API newbie

11 REPLIES 11
Reply
Message 1 of 12
nik.mazreen
1525 Views, 11 Replies

Revit API newbie

Hi,

 

i'm new in this Revit API..dont even have any background in programming...just basic programming. Need help to understand more about revit API. Now i'm trying out Revit API from Revit 2012 API Developer's Guide book. Got an error and not sure how to fix it:

 

Here are the codes:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.UI.Selection;


namespace Filtered_Element
{
[Transaction(TransactionMode.ReadOnly)]
public class Class1 : IExternalCommand
{
public Result Execute(ExternalCommandData commandData,
ref string message, ElementSet elements)
{
//Create a Filter to get all the doors in the document
ElementClassFilter familyInstanceFilter = new ElementClassFilter(typeof(FamilyInstance));
ElementCategoryFilter doorsCategoryFilter = new ElementCategoryFilter(BuiltInCategory.OST_Doors);
LogicalAndFilter doorInstanceFilter = new LogicalAndFilter(familyInstanceFilter, doorsCategoryFilter);
FilteredElementCollector collector = new FilteredElementCollector(document);
ICollection<ElementId> doors = collector.WherePasses(doorInstanceFilter).ToElementIds();

string prompt = "The ids of the doors in the current document are:";
foreach(ElementId id in doors)

{
prompt += "\n\t" + id.IntegerValue;
}

//Give the user some information
TaskDialog.Show("Revit", prompt);

return Result.Succeeded;
}
}
}

 

the error:

 

The name 'document' does not exist in the current context

 

Thx in advanced.

 

-Nik-

 

11 REPLIES 11
Message 2 of 12
ollikat
in reply to: nik.mazreen

Basically the reason is that there aren't any object called "document" in your function. So how to get one...?

Many (most...) of the API methods want to know the project document, which should be used. The reference for this document is provided in the ExternalCommandData argument of the Execute() method. You can assign it to a temporary variable or use it directly intead...pick your choise.

 

FilteredElementCollector collector = new FilteredElementCollector(extCommData.Application.ActiveUIDocument.Document);

// OR...

Document doc = extCommData.Application.ActiveUIDocument.Document;
FilteredElementCollector collector = new FilteredElementCollector(doc);

 

 

 

 

Message 3 of 12
nik.mazreen
in reply to: ollikat

Thx for the reply...appreciate it..Smiley Happy

 

i did try both of your solution..now another error occur..the error same as before but with different name "The name 'extCommData' does not exist in the current context".

 

Here are my coding:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.ApplicationServices;

namespace Filtered_Element
{
[Transaction(TransactionMode.ReadOnly)]
public class Class1 : IExternalCommand
{
public Result Execute(ExternalCommandData commandData,
ref string message, ElementSet elements)
{
//Create a Filter to get all the doors in the document
ElementClassFilter familyInstanceFilter = new ElementClassFilter(typeof(FamilyInstance));
ElementCategoryFilter doorsCategoryFilter = new ElementCategoryFilter(BuiltInCategory.OST_Doors);
LogicalAndFilter doorInstanceFilter = new LogicalAndFilter(familyInstanceFilter, doorsCategoryFilter);
Document doc = extCommData.Application.ActiveUIDocument.Document;
FilteredElementCollector collector = new FilteredElementCollector(doc);
ICollection<ElementId> doors = collector.WherePasses(doorInstanceFilter).ToElementIds();

string prompt = "The ids of the doors in the current document are:";
foreach(ElementId id in doors)

{
prompt += "\n\t" + id.IntegerValue;
}

//Give the user some information
TaskDialog.Show("Revit", prompt);

return Result.Succeeded;
}
}
}

 

i'm not really good in programming..i might missing something...

 

thx in advanced..

 

-Nik-

 

Message 4 of 12
ollikat
in reply to: nik.mazreen

Again...there aren't such a variable declared in the scope of the function. Sorry...I just wrote an example, I didn't check out what was the actual name of that argument in yor code. Your function is declared like this:

public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)

 

 

So instead you should use "commandData"

Message 5 of 12
nik.mazreen
in reply to: ollikat

Got it...what a silly question from me..Smiley Embarassed

 

Thank you so much...

Message 6 of 12
nik.mazreen
in reply to: nik.mazreen

Hi again,

 

i hv 1 more question..<for now>..Smiley Tongue

 

how to get area value to be read in task dialog box..

 

my codes are as below:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.ApplicationServices;

namespace Revit_DialogBox
{
[Transaction(TransactionMode.Automatic)]
public class Class1 : IExternalCommand
{
public Result Execute(ExternalCommandData commandData,
ref string message, ElementSet elements)
{
//Get the application and document from external data.
Application app = commandData.Application.Application;
Document activedoc = commandData.Application.ActiveUIDocument.Document;

//Create a Revit task dialog to communicate information to the user.
TaskDialog mainDialog = new TaskDialog("Hello, Revit");
mainDialog.MainInstruction = "Hello, Revit";
mainDialog.MainContent = "This sample shows how to use a Revit task dialog to communicate with the user."
+ "The command links below open additional task dialogs with more information.";

//Add commandLink option to task dialog
mainDialog.AddCommandLink(TaskDialogCommandLinkId.CommandLink1,
"View information about the Revit Installation");
mainDialog.AddCommandLink(TaskDialogCommandLinkId.CommandLink2,
"View information about the active document");

//Set common buttons and default button. if no CommandButton or CommandLink is added,
//task dialog will show a Close button by default.
mainDialog.CommonButtons = TaskDialogCommonButtons.Close;
mainDialog.DefaultButton = TaskDialogResult.Close;

//Set footer text. Footer text is usually used to link to the help document.
mainDialog.FooterText = "<a href=\"http://usa.autodesk.com/\">"
+ "Click here for the Revit API Developer Center</a>";

TaskDialogResult tResult = mainDialog.Show();

//if the user clicks the first command link, a simple Task Dialog
//with only a close button shows information about the Revit installation.
if (TaskDialogResult.CommandLink1 == tResult)
{
TaskDialog dialog_CommandLink1 = new TaskDialog("Revit Build Information");
dialog_CommandLink1.MainInstruction = "Revit Version is: " + app.VersionName + "\n"
+ "Revit Version Number is: " + app.VersionNumber + "\n"
+ "Revit Version Build is: " + app.VersionBuild;

dialog_CommandLink1.Show();
}

//if the user clicks the second command link, a simple Task Dialog
//created by static method shows information about the active document
else if (TaskDialogResult.CommandLink2 == tResult)
{
TaskDialog.Show("Active Document Information",
"Active document: " + activedoc.Title + "\n"
+ "Active view name: " + activedoc.ActiveView.Name + "\n"
+ "Floor Area: " + ParameterType.Area);
}
return Result.Succeeded;
}
}
}

 

the highlighted should read the area value..right? or not? the result that i get shown below:

area.JPG

 

helpSmiley Sad

 

thx in advanced..

 

-Nik-

Message 7 of 12
ollikat
in reply to: nik.mazreen

Try like this

 

ParameterType.Area.ToString("F");

 

See explanations from http://msdn.microsoft.com/en-us/library/c3s1ez6e.aspx#Y311

Message 8 of 12
nik.mazreen
in reply to: ollikat

nope..still not working...not sure how to solve this..i did try so many way to get the area value..

here are my code:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.ApplicationServices;

namespace Revit_DialogBox
{
[Transaction(TransactionMode.Automatic)]
public class Class1 : IExternalCommand
{
public Result Execute(ExternalCommandData commandData,
ref string message, ElementSet elements)
{
//Get the application and document from external data.
Application app = commandData.Application.Application;
Document activedoc = commandData.Application.ActiveUIDocument.Document;
//DimensionTypeSet param = commandData.Data.get_Item(Floor);

//Create a Revit task dialog to communicate information to the user.
TaskDialog mainDialog = new TaskDialog("Hello, Revit");
mainDialog.MainInstruction = "Hello, Revit";
mainDialog.MainContent = "This sample shows how to use a Revit task dialog to communicate with the user."
+ "The command links below open additional task dialogs with more information.";

//Add commandLink option to task dialog
mainDialog.AddCommandLink(TaskDialogCommandLinkId.CommandLink1,
"View information about the Revit Installation");
mainDialog.AddCommandLink(TaskDialogCommandLinkId.CommandLink2,
"View information about the active document");

//Set common buttons and default button. if no CommandButton or CommandLink is added,
//task dialog will show a Close button by default.
mainDialog.CommonButtons = TaskDialogCommonButtons.Close;
mainDialog.DefaultButton = TaskDialogResult.Close;

//Set footer text. Footer text is usually used to link to the help document.
mainDialog.FooterText = "<a href=\"http://usa.autodesk.com/\">"
+ "Click here for the Revit API Developer Center</a>";

TaskDialogResult tResult = mainDialog.Show();

//if the user clicks the first command link, a simple Task Dialog
//with only a close button shows information about the Revit installation.
if (TaskDialogResult.CommandLink1 == tResult)
{
TaskDialog dialog_CommandLink1 = new TaskDialog("Revit Build Information");
dialog_CommandLink1.MainInstruction = "Revit Version is: " + app.VersionName + "\n"
+ "Revit Version Number is: " + app.VersionNumber + "\n"
+ "Revit Version Build is: " + app.VersionBuild;

dialog_CommandLink1.Show();
}

//if the user clicks the second command link, a simple Task Dialog
//created by static method shows information about the active document
else if (TaskDialogResult.CommandLink2 == tResult)
{
BuiltInParameter area = BuiltInParameter.MASS_GROSS_AREA;
BuiltInParameter area3 = BuiltInParameter.ZONE_AREA;
BuiltInParameter area4 = BuiltInParameter.LEVEL_DATA_FLOOR_PERIMETER;
BuiltInParameterGroup area5 = BuiltInParameterGroup.PG_AREA;
BuiltInParameter area6 = BuiltInParameter.LEVEL_DATA_FLOOR_AREA;
AreaElemType area1 = AreaElemType.BOMAArea;
ParameterType area2 = ParameterType.Area;
BuiltInParameter area7 = BuiltInParameter.ROOM_AREA;

int iarea = (int)area;
int iarea3 = (int)area3;
int iarea5 = (int)area5;
int iarea6 = (int)area6;
int iarea7 = (int)area7;
Int64 iarea2 = (Int64)area2;
Int64 iarea1 = (Int64)area1;

TaskDialog.Show("Active Document Information",
"Active document: " + activedoc.Title + "\n"
+ "Active view name: " + activedoc.ActiveView.Name + "\n"
+ "Floor Area: " + activedoc.ActiveView.Level + "\n"
+ "Floor Area: " + activedoc.FloorTypes.Size + "\n"
+ "Floor Area: " + iarea1 + "\n"
+ "Floor Area: " + iarea2 + "\n"
+ "Floor Area: " + iarea3 + "\n"
+ "Floor Area: " + area4 + "\n"
+ "Floor Area: " + iarea5 + "\n"
+ "Floor Area: " + iarea6 + "\n"
+ "Floor Area: " + iarea7 + "\n"
+ "Floor Area: " + iarea);
}
return Result.Succeeded;
}

}
}

 

this is what i get:

result1.JPG

 

not sure what the numbers mean...

 

thx in advanced

 

-nik-

 

Message 9 of 12
ollikat
in reply to: nik.mazreen

Maybe we should first make sure what are you trying to do. Are you trying to get a area (square meters etc) of some floor. Or is it something else that you want?

Message 10 of 12
nik.mazreen
in reply to: ollikat

what im trying to do is that i try to make my taskdialog box to read the area of the floor of my model (hv 3 level).  then i want to transfer this value to either excel/pdf/word..i know in revit there is a tool called Export to export the properties of the model in to csv files..but i want to make it as a new tool that only read the specific value such as area to be export to my report that i've created in excel/pdf/word...is it posibble to do that?

Message 11 of 12
ollikat
in reply to: nik.mazreen

I don't know about excel and stuff. But the way you try to get the floor area is not correct. When you have got the floor element etc. which has this area parameter, then you can use it's Parameter property (inherited from Element) and read the value from the parametr you got (AsDouble(), AsString() etc...). What you are now doing is you are printing the values of enumerations.

Message 12 of 12
nik.mazreen
in reply to: ollikat

Hi..

 

It has been a while...now i'm able to transfer some of the info from the actived revit file into the pdf format...but still i could not get the area value of the model from actived revit file into pdf format..maybe because i dont really understand the parameter used in the revit...

 

can anyone show me which parameter should i use to call out area value?i've tried BuiltInParameter..but it doesn't seem right...hurmmm~~help...

 

Thx...

 

-Nik-

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk DevCon in Munich May 28-29th


Rail Community