Jump to content
sir-Franzelot

Symbole durch random Symbole ersetzen

Empfohlene Beiträge

Hallo zusammen

 

Ich möchte eine Marionette (Script?) bauen, welches Symbole durch zufällig ausgewählte aus einem Zubehörordner ersetzt. 

Anwendung: Ich setze Zimmerpflanzen im ganzen Grundriss und möchte mit einem Knopfdruck ein wenig Abwechslung reinbringen. Oder Bäume und Pflanzen im Aussenbereich.

 

Als Basis habe ich folgendes Marionette_Object verwendet. https://www.vectorworksforum.eu/applications/core/interface/file/attachment.php?id=4370

 

Meine Strategie: Ich wähle einen zufälligen SymbolnamenString aus einem ZubehörOrdner aus und verwende diesen als String input für eine Symbol node.

(Ich denke, ich sollte wohl eine list mit den random Symbolnamen machen und als Input verwenden, aber dazu komme ich später.)

 

Im moment bekomme ich den Symbolnamen noch nicht als String aus der CustomNode heraus. Kann mir jemand helfen? Habe noch nie programmiert.

 

288994878_Bildschirmfoto2020-11-19um13_44_39.thumb.png.89febc3ae75e91ef07a7ab327ac576c2.png

 

Mein code:

 

@Marionette.NodeDefinition
class Params(metaclass = Marionette.OrderedClass):
    this = Marionette.Node( "Random Symbol" )
    this.SetDescription( 'Chooses a random Symbol in a folder' )
    randomsym = Marionette.PortIn(False)
    randomsym.SetDescription("Boolean True, picks Random symbol. Default is False")
    folder = Marionette.PortIn('','folder')
    folder.SetDescription("if empty, just symbols directly on document were listed")
    name = Marionette.PortOut("sName")
    name.SetDescription( "StringName of the chosen symbol" )
    this.SetLinksObjects()


def RunNode(self):

    import random
    
    folder = self.Params.folder.value
    randomsym = self.Params.randomsym.value
    #folder='Folder-1'

    def checkfolder():
        if folder =='':
            symid=vs.FSymDef()
        if folder !='':
            symid = vs.FInFolder(vs.GetObject(folder))
            
            
        return(symid)

    def getallsym():
        symlist=[]
        symid=checkfolder()
        while vs.GetTypeN(symid) ==16:
            symlist.append(symid)
            symid=vs.NextSymDef(symid)
        return(symlist)    

    def name(folder,randomsym):
        symid=checkfolder()
        symlist=getallsym()
        if randomsym==True:
            i=int(random.random()*len(symlist))
            sym=symlist
        if randomsym==False:
            sym=symid
        return(sym)
        symname = vs.GetName(sym)    
        return(symname)
        
    self.Params.name.value = name

 

Danke für eure Hilfe!
    


Vectorworks 2020E

macOS Catalina

 

MacBook Pro, 2018

2.2 GHz 6-Core Intel Core i7

16 GB 2400 MHz DDR4

Radeon Pro 555X 4 GB

Intel UHD Graphics 630 1536 MB

 

 

Diesen Beitrag teilen


Link zum Beitrag

Cool, nicht schlecht! muss ich mal ausprobieren. 
 

Für noch mehr Varianz könnte man noch eine zufällige Skalierung mit einstellen.


VW19 SP6R1 - VW17 SP5 R1 - MacOS Mojave 10.14.6

iMac 2019, 3,6GHz i9, 32GB Speicher, Grafik Radeon Pro 580X 8GB

ARP-Stuttgart

Diesen Beitrag teilen


Link zum Beitrag

Da habe ich erst kürzlich ein Marionette dazu erstellt.

Entwerder führst du zwei Scripte aus oder aber du integrierst den Code aus der Marionette in den vom Script oben.


Freundliche Grüsse

 

Manuel Roth

___________________________________________________
VW20 SP5 | Architektur | Windows 10

Diesen Beitrag teilen


Link zum Beitrag

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

  • Forenstatistik

    • Themen insgesamt
      15.285
    • Beiträge insgesamt
      74.168
×
×
  • Neu erstellen...