Zum Inhalt springen

Entwicklungsumgebung für Vectorworks Python Plug-Ins.


Oliver Daus

Empfohlene Beiträge

Entwicklungsumgebung für Vectorworks Python Plug-ins.

 

Plug-ins für Vectorworks auf Basis der Programmiersprache Python können mit Hilfe des Script-Editors direkt in Vectorworks entwickelt werden. Abgesehen von Syntax-Highlighting, fehlen jedoch die meisten Funktionen die eine richtige Entwicklungsumgebung mit sich bringt.  Zusätzlich ist die länge des Codes auf 32000 Zeichen begrenzt, ein Limit welches bei größeren Plug-ins schnell erreicht werden kann. Mit Vectorworks 2022 wurde der Script-Editor deutlich verbessert. Neben einer Auto-Vervollständigen können nun auch Leerzeichen, Tabulatoren und Zeilenumbrüche dargestellt werden. Klassische Textwerkzeuge wie rückgängig und Suchen und Ersetzen sind nun auch an Bord. Die Fenster zum einsetzen von Prozeduren und Kriterien sind auch überarbeitet worden. Wie bereits erwähnt, ist jedoch das Zeichenlimit noch vorhanden.
 VW2022-ScriptEditor.png.1572661b94764f54c71d633735100259.png

 

 

Als externe Entwicklungsumgebung kommt hier Visual Studio Code (VS Code) von Microsoft zum Einsatz. Andere Programme (IDE) könnten natürlich auch verwendet werden, allerdings funktioniert dort dann der Debugger anders.

 

Die in dieser Anleitung beschriebenen Schritte funktionieren unter Windows und MacOS nahezu identisch. Das Tool VSMEdit und das Beispielprojekt MyTool sind im Anhang von diesem Post zu finden.


 

Inhalt 

 

  • Visual Studio Code
    • Einrichten
    • VS Code Projekt
  • Beispielprojekt: MyTool
    • Projektaufbau
    • Vectorworks
    • Module main.py
    • Debugger
    • Plug-in Name ändern: VSMEdit
    • Plug-in packen/Veröffentlichen
  • VWR-Datei

 

______________________________

 

 

 

Visual Studio Code

 

    Einrichten

 

VS Code ist eine kostenlose, Open-Source Entwicklungsumgebung (IDE), welche für Windows und Mac sowie weitere Plattformen verfügbar ist. VS Code kann durch Erweiterungen für viele Programmiersprachen und Einsätze angepasst werden. Für die Python Entwicklung wird die Erweiterung Python von Microsoft benötigt.

 

Visual Studio Code herunterladen

 

  1. VS Code herunterladen und installieren.
  2. Die Erweiterung Python installieren: Links auf Erweiterungen und im Suchfeld ms-python eingeben, beim Eintrag "Python" dann auf Installieren klicken.

 

    VS Code Projekt

 

Ein Projekt ist in VS Code nichts anderes als ein Ordner mit den Source-Code Dateien. Nur der versteckte Ordner .vscode kommt zusätzlich hinzu.

 

 

 

Beispielprojekt: MyTool

 

Für einige Funktionen wird entsprechender Code im Plug-in selbst benötigt. Im Beispielprojekt MyTool, sind alle Grundlegenden Funktionen bereits integriert und kann als Basis für bestehende oder auch zukünftige Plugins verwendet werden. Der Code selbst kann in jeglicher Form geändert und genutzt werden.

 

    Projektaufbau

 

Das Projekt bzw. der Ordner ist wie folgt aufgebaut und beinhaltet Code der zum einrichten des Debuggers benötigt wird. Außerdem kann, die während der Laufzeit ausgegebenen Text in einer Protokolldatei und in Vectorworks ausgegeben werden

MyTool\                   VSCode Projektordner.
 +- resources\              Zusätzliche Dateien. Beinhaltet die Vorlage-Datei für das final Plug-in.
 +- src\                    Source-Code.
     +- common\             Python-Package cw.common.
     |   +- debug.py          Richtet den den Debugger ein.
     |   +- logging.py        Erlaub die Protokollierung in eine Datei.
     |   +- vw.py             Grundlegende Funktionen für Vectorworks.
     |   +- vwr.py            Ermöglich den Zugriff auf die VWR-Datei.
     +- cw\mytool\          Python-Package mytool.
         +- main.py           Hauptmodule und Einstiegspunkt des Plug-ins.

 

    Vectorworks

 

Um den Code testen bzw. ausführen zu können, muss zuvor Vectorworks entsprechen eingerichtet werden. Die Plugin-Datei (.vsm) muss in den Ordner Plug-ins von Vectorworks und der Pfad zum Source Code muss angegeben werden. Die VWR-Datei (.vwr) ist optional und dient nur als Beispiel wie Resourcen (Texte, Bilder, etc.) mitgeliefert werden können.  Wenn keine weiteren Resource benötigt werden, können die Texte einfach direkt in die Plugin-Datei integriert werden. Dann benötigt es keine zusätzliche VWR-Datei.

 

Hinweis: In Vectorworks gibt es zwei Ordner mit dem Namen Plug-ins. Der eine ist im Installationspfad und der andere im Benutzerordner zu finden. Zum entwickeln und auch für andere Plug-ins die nicht zum Standard-Lieferumfang von Vectorworks gehören, immer nur den Ordner Plug-Ins im Benutzerordner nutzen. (Pfad zum Benutzerordner siehe Bereich Dateiprotokollierung weiter unten.)

 

  1. Die drei Dateien aus dem Ordner resources im Projektordner (MyTool\resources\) in den Ordner Plug-ins von Vectorworks kopieren. (Auf die Bedeutung der XML-Datei kommen wir später.)
    explorer1.png.207689d8c246463a9a132a167a7b099e.png
  2. Damit Vectorworks das Plug-in lädt, muss Vectorworks neugestartet werden oder zuvor beendet worden sein.
  3. Der Pfad zum Source-Code wird über die Script-Einstellungen festgelegt. Zu finden über Extras > Plug-ins > Script-Einstellungen...
  4. Über Neu den Ordner angeben, welcher den Source-Code enthält. In diesem Fall ist es der Ordner src in unserem Projektordner.
    Script-Einstellungen in Vectorworks
  5. Zuletzt muss der Menübefehl in die Arbeitsumgebung von Vectorworks eingebaut werden. Der Menüeintrag ist unter dem Namen Mein Menübefehl… in der Kategorie Zusatzfunktionen zu finden.

 

Das Plug-in bzw. der Menübefehl kann jetzt genutzt bzw. ausgeführt werden.

   

    Module main.py

 

Das Pythonmodule main.py im Package cw.mytool ist der Haupteinstiegspunkt für das Plug-ins bzw. den Menübefehl. In dieser Datei müssen neben dem einfügen des eigenen Codes noch einige Änderungen vorgenommen bzw. beachtet werden. Der eigene Code kann in die Methode _main_() eingefügt werden.

def _main_():

	# < Main plugin code goes here >

#END def

 

Python-Package

Der Name des Python-Package cw.mytool bzw. Ordnerpfads (cw\mytool\) kann natürlich beliebig geändert werden und sollte dem Namen des zu entwickelnden Plug-ins bzw. des Autors angepasst werden. I.d.R. wird dabei folgendes Schema benutzt:

<Kürzel Autor>.<Name Plug-in>

Es können natürlich weitere Python-Packages erstellt werden.

Wird der Name geändert z.B. zu vwi.sometool muss diese neben allen Stellen im Code auch an einer weiteren Stelle angepasst werden. In der Plugin-Datei (.VSM) befindet sich ein kurzer Code abschnitt, der den externen Code startet. Hier muss natürlich die Import Anweisung angepasst werden. In unserem Beispiel wird aus der Import-Anweisung, ...

from cw.mytool import main

... die folgenden Import-Anweisung: 

from vwi.sometool import main

Die Plugin-Datei kann über den Plug-in-Manager, zu finden über Extras > Plug-ins > Plug-in-Manager... in Vectorworks angepasst werden. Hier einfach das entsprechende Plug-in auswählen (MyToolCW) und auf Code... klicken.

 

Protokollausgabe in Vectorworks

Wenn Informationen in Vectorworks über die Funktion logging.log() oder print() ausgegeben werden, können diese direkt in Vectorworks angezeigt werden. Hierzu muss lediglich in den Programm-Einstellungen, zu finden über Extras > Programm Einstellungen > Programm... in Vectorworks die Option Scripts im Debug-Modus ausführen in der Rubrik Diverses eingeschaltet werden. Bei jedem ausführen des Plug-Ins kommt nun das Fenster welches Script-Fehler meldet, auch wenn keine Fehler aufgetreten sind.

 

Metainformationen

Im oberen Bereich befinden sich die Metainformationen, wie Name und Versionsnummer. Diese müssen entsprechend angepasst werden.

  • Die Variable sys_app_name definiert ein Anzeigename der in der Protokolldatei Verwendung findet.
  • Mit der Variable sys_app_name_universal wird der sogenannte Universal-Name definiert. Dieser wird vor allem für den Zugriff auf die VWR-Datei benötigt.

Achtung: Der Universal-Name MUSS mit dem Namen der Plug-in-Datei und VWR-Datei (ohne Dateiendung) identisch sein. (Auf Groß- und Kleinschreibung achten!)

sys_app_name                  = 'Mein Menübefehl'   # Display name (Use in dialog title, etc.)
sys_app_name_universal        = 'MyToolCW'          # Universal name (For vwr usage)

Alle weiteren Variablen definieren die Version des Plug-ins und ein Copyright Hinweis. Diese Informationen finden nur in der Protokolldatei Verwendung.

sys_app_version_major         = 1
sys_app_version_minor         = 0
sys_app_version_maintenance   = 0
sys_app_version_revision      = 1
sys_app_version               = '1.0'
sys_app_copyright             = '(c) 2023 Max Muster GmbH'

Die Variablen können natürlich frei geändert werden und auch an weiteren Stellen genutzt werden.

 

Mindestanforderungen

In diesem Beispielcode ist eine Möglichkeit integriert, Mindestanforderungen für Vectorworks zu definieren. Vor allem hilfreich, wenn Funktionen genutzt werden die es vorher nicht gab. Es kann die Hauptversionsnummer von Vectorworks und die min. Buildnummer von Vectorworks angegeben werden. Wird eine ältere Version von Vectorworks genutzt, weißt eine Meldung darauf hin. Mit sys_requirements_routines kann eine Liste von Funktionen definiert werden, die im Module vs (Vectorworks Python Module) vorhanden sein müssen. Wird eine oder mehrere Funktionen nicht gefunden erscheint ebenfalls eine Meldung.

# Min required major version number of VW to run
sys_requirements_version      = 20        # VW2015
# Min required build number of VW to run
sys_requirements_buildNum     = 271502    # VW2015 SP4
# A list of functions from the vs module wich are essential for this plugin.
sys_requirements_routines     = []        # e.g. [ 'IFC_DefPsetBegin', ... ]

 

    Dateiprotokollierung

 

Alle Texte und Informationen die mit Hife der Funktion logging.log() ausgegeben werden, können in eine Datei umgeleitet werden.

Um die Dateiprotokollierung zu aktivieren, einfach beim Klick auf den Menüeintrag die Shift- (Umschalt-) Taste gedrückt halten.

Eine Meldung bestätigt, wenn ein Protokoll erstellt wird. Die Datei selbst ist dann im Benutzerorder von Vectorworks zu finden.

 

Benutzerordner Windows (bspw. für Vectorworks 2023)

%appdata%\Nemetschek\Vectorworks\2023

Benutzerordner MacOS

/Users/<Benutzername>/Library/Application Support/Vectorworks/2023

 

    Debugger

 

Ist Vectorworks und VS Code entsprechend eingerichtet (siehe oben), kann der Debugger genutzt werden. Mit dem Code im Module debug im Python-Package cw.common, werden alle nötigen Schritte auf Seiten von Vectorworks vorgenommen. Der Debugger wird wie folgt eingerichtet:

 

  1. Den Projektordner MyTool in VS Code öffnen (Datei > Ordner öffnen...
  2. In Visual Studio Code ein oder mehrere sogenannte Breakpoints definieren.1.thumb.png.f672e21c66f485dd4714323077e64ae4.png
  3. In Vectorworks den Menübefehl des Plug-ins ausführen.
  4. Beim ersten mal muss das externe Python-Modul ptvsd in Vectorworks installiert werden. Es übernimmt die Kommunikation zwischen Vectorworks und VS Code. Ein entsprechende Meldung erscheint.
  5. Wenn die Nachfolgenden Meldung erscheint, ist der Debugger eingerichtet und kann verwendet werden.
    Wichtig: Diese Meldung noch nicht bestätigen! (Falls doch schon mit OK bestätigt wurde, bleiben für Schritt 6. 10 Sekunden um den Debugger doch noch zu verbinden. Andernfalls kommt ein Fehler, dann einfach nochmal bei Schritt 3. beginnen.)
    2.png.00aa53fbe55de99503ecb555a1f04150.png
  6. Zurück zu VS Code wechseln: Rechts zum Bereich Debuggen wechseln und oben die Konfiguration Python: Remote Attach auswählen und mit dem grünen Pfeil starten.
    3.png.0135b2956546aa2090484ea80f1334c0.png      4b.png.9ebf520cb95823059c63a55f23b3d878.png
  7. Nun in Vectorworks die Meldung mit OK bestätigen.

 

In VS Code sollte jetzt an der Stelle des zuvor gesetzten Breakpoints die Ausführung gestoppt worden sein. Hier kann jetzt mit den Schaltflächen oben, der Code Schrittweise durchlaufen werden.5.thumb.png.ef323fa01704e55b08f5c8c0c56c449c.png

 

 

 

 

Plug-in Name ändern: VSMEdit

 

An dieser Stelle ist sicherlich schon aufgefallen, das der Name des Menübefehls in Vectorworks nicht dem Namen der Datei entspricht.  Dies liegt daran, das in Vectorworks alle Plug-ins immer zwei Namen haben. Den Universal-Name und ein Anzeige-Name. Aktuell ist es in Vectorworks von Haus aus nicht möglich den Anzeige-Namen getrennt vom Universal-Name zu setzen. Hier kommt das Tool VSMEdit zum Einsatz. (Im Anhang von diesem Post zu finden.)
Es handelt sich hierbei um ein Consolen/Terminal Programm (Windows & MacOS) welches die Plugin-Datei (.vsm) direkt bearbeiten kann und wie folgt eingesetzt wird. Folgende Befehle in der Console unter Windows (cmd) oder im Terminal unter MacOS eingeben:

 

Universal-Name abrufen und ändern:

VSMEdit --get UniversalName MyToolCW.vsm
VSMEdit --set UniversalName MyToolCW MyToolCW.vsm

Anzeige-Name abrufen und ändern:

VSMEdit --get LocalizedName MyToolCW.vsm
VSMEdit --set LocalizedName "Mein Menübefehl…" MyToolCW.vsm

Menükategorie abrufen und ändern:

VSMEdit --get Category MyToolCW.vsm
VSMEdit --set Category Zusatzfunktionen MyToolCW.vsm

Die Namen der Attribute können auch abgekürzt werden. Bspw. Loc anstatt LocalizedName. Eine Liste der Attribute die gebrufen oder geändert werden können kann wie folgt abgerufen werden:

VSMEdit -a

 

 

 

Plugin packen/veröffentlichen

 

Im Moment besteht unser Plug-in aus mehreren Dateien. Im Idealfall, möchten wir natürlich so wenige Dateien wie möglich. Vectorworks bringt für diesen Fall, alles mit was man braucht und so kommt nun hier die XML-Datei zum Einsatz, welche zuvor in den Ordner Plug-ins kopiert worden ist. Die XML Ist wie folgt aufgebaut und gibt an welche Ordner in die Plug-In Datei integriert werden sollen.

Hinweis: Es können nur Ordner die Source-Code enthalten, integriert werden. Andere Datei wie Bilder o.ä. müssen außerhalb bleiben.

<Plugin>
  <Package>
    <Folder>cw</Folder>
  </Package>
</Plugin>

Plug-in packen:

  1. Den Ordner cw aus dem Ordner src in unserem Projektordner in den Ordner Plug-ins kopieren, wo sich auch die Plugin-Datei (.vsm) und die oben genannte XML-Datei befindet.
    Wichtig: Die XML-Datei muss den gleichen Namen haben wie die Plugin-Datei!
  2. In Vectorworks den Plug-in-Manager aufrufen. (Extras > Plug-ins > Plug-in-Manager...)
  3. Die Tasten STRG + ALT + SHIFT (Umschalt) gedrückt halten (MacOS: CMD + ALT + SHIFT + CAPSLOCK) und auf Code... klicken. Eine Meldung fragt, ob das Plug-in wirklich geschütz werden soll.
    Achtung: Dies kann nicht Rückgang gemacht werden! Stellen Sie sicher, das Sie vom Code als auch der Plugin-Datei (die noch leer ist) eine Kopie haben.
    enc1.png.305923b007dd577391446373db03fab6.png
  4. Nun ist das Plug-In geschützt und der Code aus dem Ordner cw wurde integriert. Das Plugin wurde jetzt automatisch in die Rubrik Plug-ins von Drittherstellern verschoben.
  5. Im Ordner Plug-ins kann nun den Ordner cw wieder gelöscht werden. Vectorworks muss nun neu gestartet werden.
     

Wenn das Plug-in danach richtig funktioniert und auch die Plugin-Datei größer geworden ist, war der Vorgang erfolgreich.
 

Veröffentlichen 

Um das Plug-in an andere weitergeben zu können, einfach die Plugin-Datei und die VWR-Datei in ein ZIP-Archiv, ohne Unterordner packen. 

In Vectorworks kann dann das ZIP-Archiv einfach über den Plug-in-Manager in der Rubrik Plug-ins von Drittherstellern über Installieren... ausgewählt werden und so das Plug-in installiert werden.

 

 

 

VWR-Datei

 

Eine Beschreibung zur VWR-Datei und wie sie verwendet wird, ist hier zu finden:

 

Haftungsausschluss: Alle Informationen und Dateien in diesem Beitrag sind frei verfügbar und ohne jegliche Garantie. 
Es ist gestattet, die Inhalte zu übersetzen und auf anderen Plattformen zu verbreiten.

______________________________

Version 1.2

- Update sample code "MyTool" to better work with current Vectorworks version

- Added explicit "unlicense" notice

Version 1.1

 - Update VSMEdit to also work with Vectorworks 2022 newer versions of Vectorworks.

 

 

 

VSMEdit-v1.1.zip

 

VS Code Projekt - MyTool 2023.zip

Bearbeitet von Oliver Daus
Anpassungen für geänderten Code "MyTool"
  • Like 9
  • Lieben 3

Gruß


Oliver Daus

ComputerWorks GmbH

http://www.computerworks.de

Link zu diesem Kommentar

Ich hab den ganzen workflow mal durchprobiert, scheitere aber bei der Installation des ptvsd package. Hier mein Vorgehen:

  1. Das Beispielprojekt herunterladen und entpacken
  2. Die Dateien im resources-Ordner in den Vectorworks Plugins Ordner kopiert (Benutzerbibliothek)
  3. Den src-Ordner auf den Desktop und in Vectorworks in den Script-Einstellungen den Pfad angegeben.
  4. Den Menübefehl in die Arbeitsumgebung eingebaut und ausgeführt.
  5. Es folgt die Meldung, dass nun ptvsd installiert werden muss, welche ich bestätige

Daraufhin kommt dieser Script-Fehler:

error.thumb.jpg.08ac46b11cdcfd5ddd0195b2935d402e.jpg

 

Das ganze passiert unter Windows 10 mit Vectorworks 2020. Der Anmeldename enthält keine Sonderzeichen.

Vectorworks 2024 - Architektur - Win 10

Link zu diesem Kommentar
vor 19 Minuten schrieb herbieherb:

Ich hab den ganzen workflow mal durchprobiert, scheitere aber bei der Installation des ptvsd package. Hier mein Vorgehen:

  1. Das Beispielprojekt herunterladen und entpacken
  2. Die Dateien im resources-Ordner in den Vectorworks Plugins Ordner kopiert (Benutzerbibliothek)
  3. Den src-Ordner auf den Desktop und in Vectorworks in den Script-Einstellungen den Pfad angegeben.
  4. Den Menübefehl in die Arbeitsumgebung eingebaut und ausgeführt.
  5. Es folgt die Meldung, dass nun ptvsd installiert werden muss, welche ich bestätige

Daraufhin kommt dieser Script-Fehler:

error.thumb.jpg.08ac46b11cdcfd5ddd0195b2935d402e.jpg

 

Das ganze passiert unter Windows 10 mit Vectorworks 2020. Der Anmeldename enthält keine Sonderzeichen.

 

Oops, da hat sich ein Fehler eingeschlichen!
Bitte in der Datei debug.py im Ordner cw/common die Zeile 79 ändern. Die Zeichenfolge "== 1" gehört da nicht hin und muss entfernt werden. Dann sollte es gehen.

    return vs.GetVersionEx()[3]

 

Den Anhang im ersten Post habe ich bereits korrigiert.

Bearbeitet von Oliver Daus

Gruß


Oliver Daus

ComputerWorks GmbH

http://www.computerworks.de

Link zu diesem Kommentar
vor 21 Stunden schrieb Oliver Daus:
  • Die drei Dateien aus dem Ordner resources im Projektordner (MyTool\resources\) in den Ordner Plug-ins von Vectorworks kopieren. (Auf die Bedeutung der XML-Datei kommen wir später.)
    explorer1.png.207689d8c246463a9a132a167a7b099e.png

Ich scheitere schon hier.

 

Diese Dateien sollten im Resourcesteil von MyTool liegen?

image.png.00bd22ae59bf91055d90bbc5163122b2.png

Dieser Ordner ist im Zip aber leer.

 

Oder muss ich die Dateien selbst erstellen?

Freundliche Grüsse

 

Manuel Roth

_________________________________________________
Vectorworks 2022 SP3 | Architektur | Windows 10

Link zu diesem Kommentar

 

vor 11 Minuten schrieb Manuel Roth:

Ich scheitere schon hier.

 

Diese Dateien sollten im Resourcesteil von MyTool liegen?

image.png.00bd22ae59bf91055d90bbc5163122b2.png

Dieser Ordner ist im Zip aber leer.

 

Oder muss ich die Dateien selbst erstellen?


Hab wohl die drei Dateien beim erneuten packen gestern vergessen. ?
ich lade es gerade neu hoch.

 

Edit: So ist neu hochgeladen. Diesmal mit den drei Dateien. 

Bearbeitet von Oliver Daus
  • Like 1

Gruß


Oliver Daus

ComputerWorks GmbH

http://www.computerworks.de

Link zu diesem Kommentar

Bei meinem Projekt um die Masteransichtsbereiche gibt es ja drei Scripte. Ergibt das dann auch drei unabhänige MyTools oder ist es möglich im MyTool mehrere Menübefehle zu haben. Ergibt das einfach ein weiteres Package je Script? Dieses würde den Namen des Scripts tragen. Was müsste ich dabei beachten.

 

Und was mir ganz wichtig ist, wie kann ich das ganze mit dem einen VpStilesFunctions.py verknüpfen?

Freundliche Grüsse

 

Manuel Roth

_________________________________________________
Vectorworks 2022 SP3 | Architektur | Windows 10

Link zu diesem Kommentar
vor 47 Minuten schrieb Manuel Roth:

Bei meinem Projekt um die Masteransichtsbereiche gibt es ja drei Scripte. Ergibt das dann auch drei unabhänige MyTools oder ist es möglich im MyTool mehrere Menübefehle zu haben. Ergibt das einfach ein weiteres Package je Script? Dieses würde den Namen des Scripts tragen. Was müsste ich dabei beachten.

 

Und was mir ganz wichtig ist, wie kann ich das ganze mit dem einen VpStilesFunctions.py verknüpfen?

 

Wenn es sich um drei eigenständige Menübefehle handelt, sind das dann auch drei verschiedene VSM-Dateien. Jedoch könne die aus der gleichen Code-Basis entstehen. Bspw. sind das hier drei Menübefehle, die zusammengehören.
0.png.ccd4d4df3b5b9e208a6f36b5c65f2df8.png
Im Code, in der main.py könnte das dann so aussehen:

[...]

def execute():
	# Init plugin ...
	init()
	# Run main code ...
	if (requirementsComplied()): _main_()
	# Clanup ...
	logging.flush()
#END def

def execute_copy():
	execute()
	_main_copy()
#END def

def execute_create():
	execute()
	_main_create()
#END def

def execute_write():
	execute()
	_main_write()
#END def

def _main_copy():
	# ... code here ...
#END def

def _main_create():
	# ... code here ...
#END def

def _main_write():
	# ... code here ...
#END def

Das wichtigste ist aber der Code der sich direkt in der jeweiligen VSM-Datei befindet! Der muss natürlich angepasst werden. Dabei bekommt jede VSM-Datei dann einen anderen Coder, der die jeweilige execute_...() Funktion aufruft. In diesem Beispiel sieht das dann so für die ...Copy.vsm so aus:

import vs
import imp
from cw.mytool import main

# Make sure the main module ist always up to date and has initial values
imp.reload(main)

# ---- BEGINN OF SCRIPT ----

main.execute_copy()

Du kannst aber auch eigene Module für deine Befehle machen.
Anstatt ...
    ...\main.py

Für jeden Befehl eine eigene Datei.
    ...\refresh.py

    ...\masterviewport.py
    ...\delete.py

Das einzige was sich ändert, ist der import Befehl bzw. der Aufruf in der jeweiligen VSM-Datei. Hier wäre das dann:

from roth.mvp import refresh
[...]
refresh.execute()

 

 

Die Sache mit der VpStilesFunctions.py Datei löst sich dann auch von alleine. Diese wird dann einfach Teil von deinem Code.
Bspw. kannst du da einfach ein Python-Package machen:

    cw/mytool/common/vpstyles.py
In der main.py kannst du das, dann so verwenden:

from cw.mytool.common import vpstyles
[...]
vpstyles.VpStiles()


Du solltes dich unbedingt in das Thema Python Module und Python Packages einlesen:
Für dein Masteransichstbereiche Tool (und auch für alle weiteren Tools) solltest du die Packages umbenennen. Anstatt cw.mytool bspw. in roth.mvp (mvp = Master View Port)

Die Ordnerstruktur sollte in diesem Fall dann so sein:

<Projektordner>\
 +- cw\
 |   +- common\
 |     ...
 +- roth\
     +- mvp\
         +- main.py
             ...

Im erst Post auch schon beschrieben, dann nicht vergessen die VSM-Dateien an zu passen:

import vs
import imp
from roth.mvp import main

# Make sure the main module ist always up to date and has initial values
imp.reload(main)

# ---- BEGINN OF SCRIPT ----

main.execute()


 

Bearbeitet von Oliver Daus
  • Like 1

Gruß


Oliver Daus

ComputerWorks GmbH

http://www.computerworks.de

Link zu diesem Kommentar
  • 1 Jahr später...

Ciao @Oliver Daus,

 

ich bin Bureaucrat in der Developer Wiki als CBM-c-.

 

Ich arbeite -immer wieder- an einem "VS-Py Rosetta Stone", um die Transition von Vectorscript Pascal zu Vectorscript Python auseineander zu fedeln.

 

Stolperstein Nummer 1 war immer einen Editor/IDE einzurichten.

Solltest Du keine Zeit oder Lust zur Übersetzung deines hervorragenden Artikel haben, stelle ich mich gerne zur Verfügung.

 

Liebe Grüße und noch mal Danke,

_c_

Bearbeitet von orso b schmid

_c_

(sorry, kann nur schlecht Deutsch schreiben)

Link zu diesem Kommentar
  • 1 Jahr später...

Hallo Zusammen

 

Folgendes sollte zu dem Pfad bei den Script-Einstellungen noch angemerkt werden:

Wenn ihr mehrere Plug-Ins entwickelt und diese in separaten Ordnerstrukturen anordnet, dann müsst ihr den Pfad weiter vorne beginnen und nicht erst bei <src>.

BSP:

 

C:\Users\user\Documents\GitHub

 

statt:

C:\Users\user\Documents\GitHub\PlugIn\src

 

Somit müsste auch der Importbefehl Folgendermaßen bearbeitet werden:

 

#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# MyTool -- 1.0 -- (c) 2019 ComputerWorks GmbH
#
#  Author: Oliver Daus
#  Date:   22/11/2019 -- 15:00
#
#  /!\ IMPORTANT:
#      The number of characters in this file must be lower
#      then 32000, due to a limitation of the Vectorworks code editor.
#

# ---- IMPORTS ----

import vs
import importlib
from Plugin.src.author.Package import main

# Make sure the main module ist always up to date and has initial values
vs.SetPref(412, False)
importlib.reload(main)


# ---- BEGINN OF SCRIPT ----

main.execute()

#EOF

 

  • Like 1
Link zu diesem Kommentar

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden
  • Forenstatistik

    • Themen insgesamt
      23,4Tsd
    • Beiträge insgesamt
      120,1Tsd
×
×
  • Neu erstellen...