2016-02-08 20 views
5

Hallo Ich habe den folgenden Code:Gettings Informationen über stairsruns und Treppen aus Elementen solche Informationen enthalten

public static void HandleStairs(Document doc) 
     List<TransitionPoint> ret = new List<TransitionPoint>(); 
     FilteredElementCollector collector = new FilteredElementCollector(doc); 
     ICollection<Element> stairs = collector.OfCategory(BuiltInCategory.OST_Stairs).ToElements(); 
      foreach (var stair in stairs) 
      { 
       var st= stair as Stairs; 
       if(st!=null) 
       { 
         %code that is never executed 
       } 
      } 

     return ret; 
    } 

Jetzt ist das Problem, dass, egal was es Treppe erscheint immer null, ich hörte, dass ein anderer Programmierer das hatte gleiches Problem.

Die treppenvariable erhält eine Anzahl von Objekten mit treppenartigen Eigenschaften (Treppen genannt, mit Risern und Plattformen ext.), Scheint aber nicht zu akzeptieren, dass sie auf eine Treppe geworfen werden. Jeder weiß, wie eigentlich diese in Stufen werfen

Beachten Sie, dass Treppen ist ein Element mit den folgenden Eigenschaften (oder auf andere Weise alle Stufen in einem Dokument erhalten?):

Riser to Tread Connection 
Monolithic Material 
Apply Nosing Profile 
Stringer Material 
Text Size 
Begin with Riser 
Stringer Carriage Height 
URL 
Open Stringer Offset 
Right Stringer 
Riser Type 
Cost 
Left Stringer 
Underside of Winder 
Stringer Height 
Nosing Profile 
Manufacturer 
Middle Stringers 
Keynote 
Riser Material 
Minimum Tread Depth 
Text Font 
Monolithic Stairs 
Maximum Riser Height 
Landing Carriage Height 
Break Symbol in Plan 
Landing Overlap 
Extend Below Base 
Nosing Length 
Assembly Description 
End with Riser 
Description 
Function 
Type Image 
Type Comments 
Stringer Thickness 
Assembly Code 
Calculation Rules 
Trim Stringers at Top 
Model 
Tread Thickness 
Tread Material 
Riser Thickness 

ich meistens müssen die Treppen Objekte zu erhalten die Läufe, die den Treppenobjekten zugeordnet sind, oder tatsächlich brauche ich die Wege, denen die Läufe folgen.

Dies kann hoffentlich die folgenden verwendet werden, um zu tun:

var tesselated = new List<XYZ>(); 
var stairPath = run.GetStairsPath(); 
    foreach (Curve curve in stairPath) 
    { 
     tesselated.AddRange(curve.Tessellate()); 
    } 

Weil ich die XYZ-Positionen für die Positionen müssen alle Stufen der Geometrie des Gebäudes angebracht.

+0

Was ist Stairs ', erbt es von was auch immer 'doc.GetElement()' zurückgibt? – CodingGorilla

+0

Treppen ist eine Klasse, die von Elementen erbt, die aus der Revit-API stammen. getElement (stairID) gibt ein Element mit den Attributen eines Treppenobjekts zurück. – Thijser

Antwort

0

Der as Operator gibt null, wenn die Umwandlung fehlschlägt, so was auch immer doc.GetElement(stairId) kehrt nicht vom Typ Stairs oder eines seiner Untertypen.

ich doc raten bin, ist eine Art von ‚Lagerung‘ Dokument, so dass Sie wahrscheinlich eine neue Instanz von Stairs und füllen Sie es mit Informationen, die Sie aus was auch immer doc.GetElement(stairId) Renditen erstellen müssen.

+0

Ich denke, meine Hauptfrage ist, wie mache ich ein Element, das Treppen in Treppen beschreibt. – Thijser

4

Zuerst müssen Sie unbedingt herausfinden, welche Art von Element Sie sprechen. Ansonsten ist diese Diskussion völlig sinnlos. Eine sehr einfache Art und Weise zu bestimmen, ist das ‚treppenartige‘ Element mit RevitLookup zu erkunden:

https://github.com/jeremytammik/RevitLookup

Wenn Sie nicht wissen, was RevitLookup ist, sollten Sie aufhören absolut alles, was Sie mit dem Revit tun API sofort und beginnen frisch von durch die Revit-API arbeiten begonnen Material, vor allem, Installation und Inbetriebnahme RevitLookup verwenden:

http://thebuildingcoder.typepad.com/blog/about-the-author.html#2

Das gefilterte Element Sammler Sie zeigen ruft alle Elemente der Kategorie ‚Treppen‘. Dieses treppenartige Objekt könnte eine DirectShape sein. In diesem Fall können Sie ihm die Kategorie "Treppen" zuweisen. Dann wird es von Ihrem gefilterten Element-Collector oben abgerufen. Hier

ist ein Beispiel für ein ‚treppenartige‘ extrudierte Dach, das ist und wird immer ein Dach bleiben, mit den ‚Dächern‘ Kategorie und kann somit nie durch gefilterten Element Sammler identifiziert werden:

http://thebuildingcoder.typepad.com/blog/2014/09/events-again-and-creating-an-extrusion-roof.html#7

Entschuldigung für die verwirrende Antwort, aber ich muss sagen, Ihre Frage ist auch ziemlich verwirrend. Ich habe noch nie so etwas gehört. Ich hoffe das hilft.

+0

Ich habe versucht, meine Frage so gut wie möglich zu aktualisieren, ich habe ein Element mit den oben genannten Eigenschaften (oder ich kann nach anderen Eigenschaften fragen) und möchte mir sagen, was es hat, hat die Stairs-Klasse eine Möglichkeit zu bekommen die Läufe, die ich gerne benutzen würde. – Thijser

1

Was Sie getan haben, sieht vernünftig aus, obwohl, wie andere gezeigt haben, Sie offensichtlich ein Element zurückbekommen, das kein Stair-Element ist.

Ich würde vorschlagen - um sicher, dass Sie wieder zu dem machen, was Sie wollen, dass Sie verwenden:

.OfClass (typeof (Treppen))

mit dem FilteredElementCollector. Damit können Sie wahrscheinlich die Methoden WhereElementsIsNotElementType() und OfCategory() löschen, da dies in der obigen Anweisung impliziert ist.

Auf diese Weise - was immer Sie zurück erhalten, sollte gießfähig sein.