Fragen zu: Infodialog, Array-Parametern, PREV_MODE, Debugging

Balises:
  • 2013

Hallo!

Ich habe mir die Smartparts bereits in der 2012er Version angesehen,
wegen der schlechten Dokumentation, aber schnell das Interesse verloren.
Vor Kurzem entdeckte ich die Seite http://www.selfGDL.de im Web, und seit dem
beschäftige ich mich wieder intensiver mit den Smartparts. Da sich
Smartparts aber doch von ArchiCAD GDL-Objekten unterscheiden, bleiben
einige Fragen trotzdem unbeantwortet, vielleicht kann jemand helfen:

1. Infodialog:
Wie kann man in Strings einen Zeilenumbruch verwenden, wie im
Standarddialog von Nemetschek in Zeile 3 [= str5] ("\n" wie in anderen
Sprachen geht nicht!)?

2. Array-Parameter:
Kann ich die Array-Größe eines Parameters skriptgesteuert ändern, z.B.
Redimensionierung mit DIM x[array_size] (so geht's nicht).

3. Array-Parameter in der Palette:
Wie bekomme ich den Bearbeitungsdialog für Arrays (den [ ... ] Button),
da anscheinend nur dort Arrayelemente hinzugefügt oder gelöscht werden
können (siehe Frage 2), in der Palette angezeigt?

probiert: I_INFIELD "x"... , I_INFIELD "x[]"... , I_INFIELD "x[1]"...
und das ganzen auch mit I_INFIELD_2 ... - es wird immer nur ein
Bearbeitungsfeld für einen Wert erzeugt, oder nichts bei fehlerhafter
Syntax.

4. PREV_MODE:
Was ist der Vorteil/Sinn der Funktionen PREV_LINE2 und PREV_ARC2, da ich
ja auch die normalen Funktionen LINE2 und ARC2, aber auch alle anderen
Zeichenfunktionen benutzen kann?

Ab hier gehts direkt an Nemetschek:

5. SPLINE2: (Programmfehler?)
status=1 (geschlossener Spline) funktioniert nicht, auch nicht in der
Variante 1+2.

6. Bewehrungsfunktionen:
Wird es jemals eine verwendbare Dokumentation (eine gute erwarte ich eh nicht)
zu den Bewehrungsfunktionen geben, oder muss ich das alles
aus den mitgelieferten Smartparts lernen?

7. Fehlersuche: (Wunsch)
Weder die PRINT noch BREAKPOINT Funktion sind sehr hilfreich. PRINT
funktioniert im PREV_MODE anscheinend nicht, und BREAKPOINT funktioniert
nur im Editor, womit eine Interaktion mit der Eingabepalette schwer zu
testen ist, z.B. die Auswertung von GLOB_UI_BUTTON_ID. Vieles ist
natürlich über Umwege machbar, ich würde mir aber ein Debugfenster für
das laufende Script wünschen, in das einfache Ausgaben über einen Befehl
z.B. "DEBUG_PRINT" erfolgen können, oder fragt einfach eure
Smartpart-Entwickler die haben warscheinlich ähnliche Probleme, oder
bessere Entwicklungswerkzeuge, als wir normalen Anwender.

So das wars fürs Erste.

Großer Dank geht an die Macher der Seite http://www.selfGDL.de, die Ihre Seite
kostenlos zu Verfügung stellen und dafür viel Freizeit investiert haben.

Ich möchte meine Erfahrungen mit den Smartparts auf der Seite
smartparts.tzb-moitzi.at mit allen teilen, damit die Einstiegshürde für
andere vielleicht etwas niedriger wird.

Noch besteht die Seite zum Großteil aus einfachen Übersetzungen der
englischen Dokumentation, ergänzt um Erklärungen von der Seite
http://www.selfGDL.de, aber es soll mehr werden.

Mit freundlichen Grüßen,

Manfred Moitzi

1 - 10 (16)

Hallo,

zu einigen Punkten kann ich etwas sagen:

1. PRINT "Mehrzeiliger
Text"
Für den Zeilenumbruch einfach den Text umbrechen...
2. REDIM wird z.Zt (noch) nicht unterstützt.
3. Um aus einem normalen Parameter ein Array zu machen, in der 2. Spalte, wo "Feld" drübersteht, auf "[1]" umstellen.
Wichtig beim arbeiten mit Arrays: nur I_INFIELD2 und I_INFIELD3 unterstützen die Eingabe von Parameter-Werten. Syntac: IN_INFIELD x[1],... (ohne Anführungszeichen)
4.PREV_LINE2 und PREV_ARC2 werden nur im Preview erzeugt, und fehlen im fertigen Objekt. Könnte man durch
IF PREV_MODE THEN
LINE2 ...
ENDIF
ebenso erreichen!
7.Es gibt gute Gründe dafür,dass BREAKPOINT und PRINT nur im Editor-Fenster funktionieren:
- Es sind "Debugging"-Werkzeuge
- Man muss nicht alle BREAKPOINTs mühsam entfernen , wenn das Script fertig ist
- Das Script wird beim Handle-Zupfen bei jedem Maus-Move ausgeführt. Wenn hier ein PRINT zulässig wäre, würden sehr viele Ausgabe-Fenster erzeugt :-)

Gruß Jörg

Danke für deine Antworten,

zu Punkt 3:

Ich möchte in der Palette den Editordialog für Array-Parameter öffnen und nicht die einzelnen Array-Elemente bearbeiten, um eben Array-Element hinzufügen oder löschen zu können.
Es soll so funktionieren, wie bei der durch Allplan automatisch erzeugten Palette, es erscheint ein Button [ ... ] neben dem Array, der diesen Array- Bearbeitungsdialog öffnet.

Ist das im selbst erstellten Dialog-Script auch möglich?

zu Punkt 7: ich gewöhn mich schön langsam an die vorhandenen Möglichkeiten, ich bin nur Besseres von anderen Scriptsprachen (Python) gewohnt.

Gruß Manfred

Hallo Manfred,

die Dimensionen des Arrays eines Parameters sind durch Scriptbefehle bzw. Dailog-Eingaben nicht änderbar. (...sind als Deklarationen sozusagen const)! Warum?
Es könnte sonst passieren, daß ein Anwender die Array-Dimensionen ändert, z.B. x[3]auf x [2]verkleinert, im Script aber noch auf diesen Wert x[3]zugegriffen wird.
Das würde dann schiefgehen!

Ein neuer Befehl REDIM wird sicher in einer der nächsten Versionen verfügbar sein.
Damit kann man dann im Script auch das Array eines Parameters verändern.
Eine Änderung der Array-Werte mit einem Array-Dialog ala Editor wird aber weiterhin nicht möglich sein! Der Anwender wüßte ja nicht, was er in die Felder eingeben sollte...

In einer der nächsten Versionen wird es im Editor sicher auch Syntax-Highlighting, Auto-Complete, BreakPoints und Einzelschritt-Steuerung wie in normalen Entwicklungumgebungen (z.B. Visual Studio) geben.

Gruß Jörg

Hallo Manfred,

3. SPLINE2

In einer der nächsten Versionen wird das Schliessen der Spline (ohne "Auto-Smooth) möglich sein:

SPLINE2 4,1,
0,0,315,
1,0,45,
1,1,135,
0,1,225

ergibt dann s. spline_closed_fix.png

Gruß Jörg

Pièces-jointes (1)

Type: image/png
Téléchargé 409 fois
Size: 1,55 KiB

Hallo Jörg,

Nochmals zu den Array-Parametern:
Das Arrays nicht per Script redimensionierbar sind, habe ich verstanden, ich möchte in der Palette den Bearbeitungsdialog für Arrays öffnen:
Es soll so funktionieren, wie bei der durch Allplan automatisch erzeugten Palette, es erscheint ein Button [ ... ] neben dem Array, der diesen Array-Bearbeitungsdialog öffnet.

I_INFIELD "Array", 0, 0, 1, 1 ... funktioniert nicht, es erscheint nur eine Bearbeitungsfeld für das erste Array-Element
I_INFIELD "Array[]", 0, 0, 1, 1 ... gar nichts erscheint, wegen fehlerhafte Syntax
I_INFIELD_2 Array, 0, 0, 1, 1 ... wie 1. Version, hier würde ich den Bearbeitungsdialog für Arrays erwarten
I_INFIELD_2 Array[1], 0, 0, 1, 1 ... Eingabefeld für 1. Element, so wie es sein soll

Screenshot des "gesuchten" Buttons im Anhang.

Gruß Manfred

Pièces-jointes (1)

Type: image/png
Téléchargé 428 fois
Size: 7,08 KiB

Hallo Manfred,

ich habe schon verstanden, welchen Button Du haben willst.Aber nochmals:
Da man in dem dann erscheinenden Dialog das Array in der Dimension verändern kann, wird es diesen
Dialog (in der jetzigen Form) nicht geben!
Die meisten Scripte funktionieren nicht mehr, wenn die Array-Dimensionen geändert werden!

Daß der Button bei der "Standard-Palette" angezeigt wird, ist also eher eine Rückfall-Variante für den Fall, daß kein Dialog-Script existiert.

Ein anderes Problem:
Der Anwender hätte keine Möglichkeit zu ersehen, was die Array-Indices bedeuten!
Beispiel: coord[5][3]Woher soll der Anwender (nicht der Ersteller) wissen, daß im ersten Index die Punktnummer drinnen ist, und im zweiten Index die Koordinaten-Werte (x,y,z).
Eine solche Liste "per Hand" zu füllen, wird man auch keinem Anwender zumuten wollen!

Also auch vom Aspekt der Benutzerfreundlichkeit macht der Array-Dialog in der Palette keinen Sinn!

Gruß Jörg

Hallo Jörg!

Danke für deine Geduld, ich habe deine erste Antwort zu Punkt 3 auch nicht genau genug gelesen .

zu deiner Antwort zu Punkt 5 (SPLINE2):

Habs gerade probiert(copy & paste), bei mir (Allpan 2013 64bit) ergibt das keinen geschlossenen Spline. Dieser Punkte ist mir aber auch nicht wichtig, sollte aber vielleicht an die Entwicklung weitergeleitet werden, sofern es ein Programmfehler ist.

Gruß Manfred

Pièces-jointes (1)

Type: image/png
Téléchargé 406 fois
Size: 2,92 KiB

Hallo Manfred,

auch hier wieder bitt erst lesen:
Ich schrieb:

In einer der nächsten Versionen wird das Schliessen der Spline (ohne "Auto-Smooth) möglich sein...

ergibt dann s. spline_closed_fix.png

Es ist z.Zt. Fehler, den man aber mit einem einfachen Workaround lösen kann:
SPLINE2 5,0,
0,0,315,
1,0,45,
1,1,135,
0,1,225,
0,0,315

Gruß Jörg

Die Redimensionierung von Arrays im Skript ergibt durchaus Sinn und führt auch nicht zu Problemen, wenn diese durch den Programmierer gesteuert und ggf. abgefangen werden. In ArchiCAD-GDl ist das wie folgt möglich:
DIM werte[12],resetter[]
PRINT VARDIM1[werte)
resetter[1]=1
werte=resetter
PRINT VARDIM1(werte)

Teste mal, ob das in Allplan-GDL auch funktioniert. Ggf. läßt du die vardim-Zeilen weg, wenn es das in Allplan nicht gibt.

1 - 10 (16)