Das Wissen aller Anwender nutzen

Im Allplan Connect Forum tauschen sich Anwender aus, geben wertvolle Tipps oder beraten sich bei ganz konkreten Aufgabenstellungen − auch international.
Und damit wirklich keine Frage unbeantwortet bleibt, unterstützen die Mitarbeiter des Technischen Supports ebenfalls aktiv das Forum.

Es erwarten Sie:

  • Foren-Vielfalt aus CAD Architektur, CAD Ingenieurbau uvm.
  • Tipps von User für User
  • international: Deutsch, Englisch, Italienisch, Französisch und Tschechisch

Melden Sie sich jetzt an und diskutieren Sie mit!

Zur Registrierung

[Frage] PythonPart Objekt Stilfläche hinzufügen für Schnitt (EDIT: VisualScripting) [Gelöst]

Schlagworte:
  • Pythonpart
  • FaceStyle
  • Stilfläche
  • Objekt
  • VisualScripting

Hey wie oben schon beschrieben
ist es möglich einem 3D Object im PythonPart eine Stilfäche für die Schnittdarstellung zuzufügen?

Nutzt man es mit "AssignFaceStyle"? wenn ja... WIE ???

Lg René
http://www.baucon.de

Lösung anzeigen Lösung verbergen

Du hattest nach der Möglichkeit mit PythonParts gefragt. Von Visual-Scripting war nicht die Rede!

Der NodeGeometryObject hat einen Eingang für Area 2D properties. Das sind die Schnittflächen.
Diese kann man mit NodeArea2DPropertyPalette in der Palette anzeigen und eingeben.

Leider ist die PythonParts-Doku da nicht wirklich hilfreich.

Für ArchElements gibt es entspr. Methoden (s. PythonParts_Doku.png)
Allerdings sind fast alle Beschreibungen der Typen falsch!
Wie soll man damit wissen, was man in diese Funktionen "reinreichen" soll?

Für ModelElements3D (Polyhedron3D/BRep3D) habe ich nichts gefunden, wie man einen Schnittflächendarstellung hinzufügt. Den neuen Mengenkörper (mit eingebauter Horizontal-Schnittdarstellung) scheint es in den PythonParts nicht zu geben.

Du kannst es aber "zu Fuss" machen:
Die Schnittdarstellung bei Polyhedron3D und BRep3D wird über Attribute gesteuert.

Damit eine Fläche im Schnitt angezeigt wird, müssen folgende Attribute am Objekt dranhängen:

Flächenstil:
Attribut Nr. 125 (Integer) = faceStyleID

Füllfläche:
Attribut Nr. 118 (Integer) = 3
Attribut Nr. 252 (Integer) = colorID

Schraffur:
Attribut Nr. 118 (Integer) = 2
Attribut Nr. 124 (Integer) = hatchID
Attribut Nr. 252 (Integer) = colorID of background, if present

Muster:
Attribut Nr. 118 (Integer) = 1
Attribut Nr. 126 (Integer) = patternID
Attribut Nr. 252 (Integer) = colorID of background, if present

Wie gesagt, damit erzeugt man nur eine "gefüllte" Darstellung der Schnittflächen im Schnitt!
Die Darstellung im Grundriss und in den anderen Projektionen wird dadruch nicht verändert.

Anhänge (1)

Typ: image/png
86-mal heruntergeladen
Größe: 109,03 KiB

Danke für die Schnelle Antwort!
nur leider bin ich anscheinend noch zu doof dafür :-P
bzw. wie füge ich das Attribut dem Objekt hinzu?
Denn ich finde nichtmal das Attribut mit der Nr. 125 (Allplan_Flächenstil)
wenn ich im Attributmanager.exe schaue steht auch unter den Punkten sichtbar und änderbar kein Haken drin?
liegt es daran? und wie ändere ich das?

Lg René
http://www.baucon.de

Hier die Code-Schnipsel dazu:

polyhed = AllplanGeo.Polyhedron3D.CreateCuboid(build_ele.Length.value,
                                               build_ele.Width.value,
                                               build_ele.Thickness.value)

com_prop = AllplanBaseElements.CommonProperties()
com_prop.GetGlobalProperties()
com_prop.Pen = 1
com_prop.Color = 1

model_ele=AllplanBasisElements.ModelElement3D(com_prop, polyhed);
model_ele.SetAttributes(self.create_section_attributes_facestyle(301))
self.model_ele_list.append(model_ele)

def create_section_attributes_facestyle(self, facestyle_id):

        attr_list = []
        attr_list.append(AllplanBaseElements.AttributeInteger(125, facestyle_id))
        
        attr_set_list = []
        attr_set_list.append(AllplanBaseElements.AttributeSet(attr_list))
        
        attributes = AllplanBaseElements.Attributes(attr_set_list)
        return attributes

jesus....
Ehm vielleicht hätte ich von anfang an erwähnen müssen das ich 0,000 Keine Ahnung von Programmiersprache etc beherrsche...
Ich Probiere mich gerade nur bisschen mit Visual Scripting aus.
Unten mal ein Bild von mein HokusPokus
Momentan bewirkt es das ich einen 2D Querschnitt auswählen kann und diesen Drehe und als 3D dann wieder kriege.
Ok eig. brauch ich dir das eig. nicht erklären, du hast da ja mehr ahnung als ich xD
Im Prinzip wie eine profilwand gedacht, nur hat man nie wirklich die Lust und Zeit aus dem 2D gedönst ein Symbol zu erstellen...

Lg René
http://www.baucon.de

Anhänge (1)

Typ: image/jpeg
66-mal heruntergeladen
Größe: 170,16 KiB

Du hattest nach der Möglichkeit mit PythonParts gefragt. Von Visual-Scripting war nicht die Rede!

Der NodeGeometryObject hat einen Eingang für Area 2D properties. Das sind die Schnittflächen.
Diese kann man mit NodeArea2DPropertyPalette in der Palette anzeigen und eingeben.

Nachtrag:
In PythonParts gibt es die Klasse SectionFill. Deren statische Methode add_section_filling
hängt an ein ModelElement3D die entspr. Attribute dran.

Und hier der Code, der in VisualScripting im Node NodeGeometryObject.py abläuft:

attr_list = []

if area_prop.is_filling:
    attr_list.append(AllplanBaseElements.AttributeInteger(252, area_prop.filling_color))

if area_prop.is_hatching:
    attr_list.append(AllplanBaseElements.AttributeInteger(118, 2))
    attr_list.append(AllplanBaseElements.AttributeInteger(124, area_prop.hatching_id))

elif area_prop.is_pattern:
    attr_list.append(AllplanBaseElements.AttributeInteger(118, 1))
    attr_list.append(AllplanBaseElements.AttributeInteger(126, area_prop.pattern_id))

elif area_prop.is_face_style:
    attr_list.append(AllplanBaseElements.AttributeInteger(125, area_prop.face_style_id))

elif area_prop.is_filling:
    attr_list.append(AllplanBaseElements.AttributeInteger(118, 3))

elif area_prop.is_bitmap:
    attr_list.append(AllplanBaseElements.AttributeString(333, ""))
    attr_list.append(AllplanBaseElements.AttributeString(336, area_prop.bitmap_name))

attr_set_list = []
attr_set_list.append(AllplanBaseElements.AttributeSet(attr_list))

model_ele.SetAttributes(AllplanBaseElements.Attributes(attr_set_list))

Das ist genau das, was oben beschrieben wurde...

Das war es! Perfekt danke!

Lg René
http://www.baucon.de

Anhänge (2)

Typ: image/png
103-mal heruntergeladen
Größe: 97,06 KiB
Typ: image/png
61-mal heruntergeladen
Größe: 12,08 KiB

Hej,
wenn du solche Fragen mit "Visual Scripting" tagst, erhöht das die Chancen dass Xinling dir antwortet. Der ist für das Thema verantwortlich bei Allplan. Kann nichts schaden wenn der Product Owner sieht, was die Anwender so anstellen. ;)

Viele Grüße,
Kerstin

http://www.ncc-mitte.de
Autorisierter Allplan Partner in Weimar, Dresden, Leipzig, Braunschweig und Kassel

Merk ich mir für die Nächsten Fragen! ;)

Lg René
http://www.baucon.de