Support Forum

Probleme im Parameters-Script (NEWPARAMETER) [Gelöst]

Schlagworte:
  • Smartparts
  • PARAMETERS
  • NEWPARAMETER
  • OPEN
  • INPUT
  • Plugin-Download

Hallo

ich versuche Punkte aus einer *.re2-Datei (Koordinaten, kommagetrennt) in ein Smartpart einzulesen.
Mittels OPEN/INPUT funktioniert das sehr gut. Die Übergabe der Werte an den benannten Parameter P funktioniert nicht immer richtig.
Der Parameter P [Anzahl Punkte][X/Y/Z] wird zur Laufzeit gelöscht und neu erstellt. Wird eine neue Datei, mit anderer Anzahl an Punkten, eingelesen, werden nicht alle Werte an P übergeben. Wird die Datei erneut eingelesen, werden alle Werte richtig übergeben.

Gruss und Dank
Hansruedi

!CODE PARAMETER-SCRIPT

IF GLOB_UI_BUTTON_ID = 4111 THEN
! file = "punkte.re2"
PARAMETERS file = file

i1 = 3
fileopen = OPEN ( "TEXT" , file , "SEPARATOR=',',MODE=RO , fullpath , dialog" )
IF ( fileopen > 0 ) THEN
DIM pim [ ][ ]REPEAT
n = INPUT ( fileopen , i1 , 1 , p0 , xh , yh , zh , p1 )
pim [ i1 - 2 ] [ 1 ]= xh
pim [ i1 - 2 ] [ 2 ]= yh
pim [ i1 - 2 ] [ 3 ]= zh
i1 = i1 + 1
UNTIL n <= 0

CLOSE fileopen

PARAMETERS filesaved = file
PARAMETERS cnt_p = VARDIM1 ( pim ) - 1

DELPARAMETER "p"
NEWPARAMETER 6 , "p" , 0 , "Werte" , "" , -1 , cnt_p , 3 , 0 , 1 , 1

FOR i3 = 1 TO cnt_p
PARAMETERS p [ i3 ][ 1 ]= pim [ i3 ][ 1 ]PARAMETERS p [ i3 ][ 2 ]= pim [ i3 ][ 2 ]PARAMETERS p [ i3 ][ 3 ]= pim [ i3 ][ 3 ]NEXT

PARAMETERS dblxstart = pim [ 1 ][ 1 ]PARAMETERS dblystart = pim [ 1 ][ 2 ]PARAMETERS dblzstart = pim [ 1 ][ 3 ]ENDIF
ELSE
PARAMETERS file = filesaved
ENDIF

Anhänge (2)

Typ: application/xml
1593-mal heruntergeladen
Größe: 42,52 KiB
Typ: text/plain
1498-mal heruntergeladen
Größe: 703,00 B

Lösung anzeigen Lösung verbergen

..bei der letzten FOR-NEXT-Schleife fehlt der Parameter i3! -> "NEXT i3"
Und: Der letzt Punkt wird immer doppelt gelesen!
Ansonsten ist das ziemlich umständlich. Man könnte die Werte sofort in den Parameter "p" einlesen,
ohne diesen jedesmal zu löschen:

IF GLOB_UI_BUTTON_ID = 4111 THEN
! file = "punkte.re2"
PARAMETERS file = file

i1 = 3
fileopen = OPEN ( "TEXT" , file , "SEPARATOR=',',MODE=RO , fullpath , dialog" )
IF ( fileopen > 0 ) THEN
REDIM p [ ][ 3 ]

REPEAT
n = INPUT ( fileopen , i1 , 1 , p0 , xh , yh , zh , p1 )
IF n > 0 THEN !!!otherwise last point is reading twise!
p [ i1 - 2 ] [ 1 ] = xh
p [ i1 - 2 ] [ 2 ] = yh
p [ i1 - 2 ] [ 3 ] = zh
ENDIF
i1 = i1 + 1
UNTIL n <= 0

CLOSE fileopen

PARAMETERS p = p
PARAMETERS filesaved = file

PARAMETERS dblxstart = p [ 1 ] [ 1 ]

PARAMETERS dblystart = p [ 1 ] [ 2 ]

PARAMETERS dblzstart = p [ 1 ] [ 3 ]

ENDIF
ELSE
PARAMETERS file = filesaved
ENDIF

Dazu ist es notwendig, das Parameter-Array in der ersten Dimension "erweiterbar" zu machen.
(s. param_array.png)

DELPARAMETER und NEWPARAMETER sind nicht dafür da, diese ständig aufzurufen.
Diese Befehle wurden eigentlich für die Migration eingeführt....

Anhänge (1)

Typ: image/png
171-mal heruntergeladen
Größe: 115,85 KiB

..bei der letzten FOR-NEXT-Schleife fehlt der Parameter i3! -> "NEXT i3"
Und: Der letzt Punkt wird immer doppelt gelesen!
Ansonsten ist das ziemlich umständlich. Man könnte die Werte sofort in den Parameter "p" einlesen,
ohne diesen jedesmal zu löschen:

IF GLOB_UI_BUTTON_ID = 4111 THEN
! file = "punkte.re2"
PARAMETERS file = file

i1 = 3
fileopen = OPEN ( "TEXT" , file , "SEPARATOR=',',MODE=RO , fullpath , dialog" )
IF ( fileopen > 0 ) THEN
REDIM p [ ][ 3 ]

REPEAT
n = INPUT ( fileopen , i1 , 1 , p0 , xh , yh , zh , p1 )
IF n > 0 THEN !!!otherwise last point is reading twise!
p [ i1 - 2 ] [ 1 ] = xh
p [ i1 - 2 ] [ 2 ] = yh
p [ i1 - 2 ] [ 3 ] = zh
ENDIF
i1 = i1 + 1
UNTIL n <= 0

CLOSE fileopen

PARAMETERS p = p
PARAMETERS filesaved = file

PARAMETERS dblxstart = p [ 1 ] [ 1 ]

PARAMETERS dblystart = p [ 1 ] [ 2 ]

PARAMETERS dblzstart = p [ 1 ] [ 3 ]

ENDIF
ELSE
PARAMETERS file = filesaved
ENDIF

Dazu ist es notwendig, das Parameter-Array in der ersten Dimension "erweiterbar" zu machen.
(s. param_array.png)

DELPARAMETER und NEWPARAMETER sind nicht dafür da, diese ständig aufzurufen.
Diese Befehle wurden eigentlich für die Migration eingeführt....

Anhänge (1)

Typ: image/png
171-mal heruntergeladen
Größe: 115,85 KiB

Hallo Jörg

vielen Dank für deine Korrekturen. Jetzt funktioniert es wie es soll.

Gruss
Hansruedi

Hallo in die smartpart-script-Runde,

Danke für den Beitrag und wie immer für Jörgs Expertise und Engagement.

Mich interessiert das Thema der Kommunikation mit einer externen Datei auch sehr.

Woher weiß Allplan, dass es ein Datenbaum-Dialog aufmachen soll?
Alleine durch die Funktion "I_BUTTON I_FUNCTION"? (Die Erklärungen im Syntax waren mir nicht so verständlich)
Mit welchen Dateitypen funktionert das?
Was ist CSV-Files(*.re2)? (Die Endung kannte ich so noch nicht.)
Bearbeitet Ihr die auch direkt mit Excel? (Die Werte verteilen sich bei mir nicht so schön auf Zellen, sondern stehen einfach alle in der ersten Spalte.) Tipps sind willkommen.

Beste Grüße in die Runde

czyborra klingbeil architekturwerkstatt - http://www.cka.berlin

Hi Marek,

der Datei-Öffnen-Dialog kommt durch die Option "dialog" im OPEN.
Das funktioniert mit alles Dateitypen (txt, csv, xml)
CSV steht für Comma-Separated-Values
*.re2 ist ein Punkt-Format vom Vermesser.
Wenn man die Datei in Excel öffnet, kann man den "Separator" einstellen. Das kann ein Tab (\t) sein,
oder ein Komma, oder auch ein Leerzeichen. Kommt ganz auf den Inhalt an.

Grüße Jörg

..in excel ist es entscheidend, WIE eine datei geöffnet wird!
zieht man eine textdatei einfach nach excel rein, kommt alles zumeist in eine spalte, wird die gleiche datei über den datei-öffnen-dialog geöffnet hat man mehr möglichkeiten u kann spalten u formate einstellen.

Namenlos gezeichnet in vollem Bewusstsein - ignorant, in eigen Augen vermutlich höflich, dennoch unhöflichst, unfreundlichst wer einen/viele vermutete - sich von alters erschließende Namen nennt.
[b]