Aktuelle Zeit: 12. Jul 2020, 11:18
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Ankerpunkt setzen
BeitragVerfasst: 13. Mai 2017, 11:20 
Offline
Forum Veteran

Registriert: 22. Aug 2006, 01:01
Beiträge: 596
Wohnort: /var/root
Land: DE
Hallo zusammen,

ich habe mir einige einfache GDL Objekte gebastelt und bin auf folgende Problem gestoßen.

Bei einem Objekt habe ich beispielsweise 6 Hotspots definiert.
Es besteht u. a. aus einem Rechteck und einem Text.
In der Mitte des Rechtecks habe ich einen Hotspot und einen weiteren als "Beweger" für den Text.

Wenn ich in der Vorschau den Objekteinstellungen den Mittelpunkt des Rechtecks aktiviere, sodass das Quadrat dort sitzt und dann die Parameter für Länge und Breite ändere, möchte ich logischerweise, dass sich die Größe des Rechtecks ändert und der aktivierte Mittelpunkt als Ankerpunkt verwendet wird.
Stattdessen wird aber der Bewegungspunkt des Textes als Ankerpunkt verwendet.
Dieser ist im 2D Skript als Basispunkt definiert.

Hier mal das Skrip (Achtung, ich bin noch bzw. wieder Anfänger)t.
Ich hab versucht, das fett zu machen, was mir wichtig erscheint.
Zitat:
! Variablen
laenge = groesse -0.020

! Start Rechteck zeichnen
PEN stift_rechteck
RECT2 0,0,laenge,laenge

! Achsen
PEN stift_achsen
LINE_TYPE linie_achsen
LINE2 laenge/2,0,laenge/2,laenge
LINE2 0,laenge/2,laenge,laenge/2

LINE_TYPE 1
diagonale=(laenge*SQR(2)/4)
LINE2 laenge/2+diagonale/4,laenge/2+diagonale/4,laenge-diagonale/4,laenge-diagonale/4
LINE2 laenge/2-diagonale/4,laenge/2+diagonale/4,diagonale/4,laenge-diagonale/4
LINE2 diagonale/4,diagonale/4,laenge/2-diagonale/4,laenge/2-diagonale/4
LINE2 laenge-diagonale/4,diagonale/4,laenge/2+diagonale/4,laenge/2-diagonale/4

! Hotspots
!Mitte
HOTSPOT2 laenge/2, laenge/2
!! Länge
!!! lu
HOTSPOT2 0, 0
!!! lo
HOTSPOT2 0, laenge
!!! ru
HOTSPOT2 laenge, 0
!!! ro
HOTSPOT2 laenge, laenge

! Ende Rechteck zeichnen

! Start Bezeichnung (Text)


IF seite="links" THEN
anker = 9
ELSE IF seite = "rechts" THEN
anker = 7
pos_x=-pos_x+laenge
ENDIF

DEFINE STYLE stil_bezeichung "Arial", 2, anker, 0
SET STYLE stil_bezeichung
PEN stift_bezeichung
gr=STR(groesse*1000,3,0)
bezeichnung="ZLDA\n" + gr
TEXT2 pos_x, pos_y, bezeichnung

!!Hotspots
HOTSPOT2 0, 0, 09, pos_x, 1 ! Basisfangpunkt
HOTSPOT2 pos_x, 0, 10, pos_x, 2 ! beweglicher Fangpunkt
!HOTSPOT2 0, 10, 11, pos_x, 3, pos_x !


Was muss ich machen, damit der in der Vorschau aktivierte Fangpunkt als Anker für Größenänderungen des Rechtecks benutzt wird?

_________________
iMac 27'' - 3,4 GHz - RAM 16/32 GB - VRAM 2 GB
AC 10-22


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ankerpunkt setzen
BeitragVerfasst: 15. Mai 2017, 08:47 
Offline
Forum Veteran

Registriert: 6. Sep 2012, 19:49
Beiträge: 539
Land: DE
Betriebsystem: Windows 7
Hallo Mac,
ich weiß was Du meinst. Ich mache das immer so:
Generell lasse ich alle Verschiebepunkte der dyn. HoSpos als Parameter im UI anzeigen. So kann man schnell bei 1000 Objekten den Text einheitlich verschieben.
Standardmäßig verschiebe ich den Text immer über den Mittelpunkt, läßt sich ja leicht mit o.g. Y-Verschiebungswerten des dyn. HoSpo schnell einstellen.
Generell mache ich Text in Objekten ausschaltbar, incl. deren HoSpos.
Gruß Mario

_________________
Beste Grüße
Mario
Archicad 23, Intel(R) Xeon(R) CPU E5-1650 V4 @ 3,6 GHz, WIN 10/64bit, 32 GB RAM, NVIDIA Quadro P2000, alles was Leistung kostet deaktiviert.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ankerpunkt setzen
BeitragVerfasst: 15. Mai 2017, 20:58 
Offline
Forum Veteran

Registriert: 22. Aug 2006, 01:01
Beiträge: 596
Wohnort: /var/root
Land: DE
Vielen Dank für Dein Feedback.
Ich kann Dir aber nicht ganz folgen.

Was bedeutet "Generell lasse ich alle Verschiebepunkte der dyn. HoSpos als Parameter im UI anzeigen." Gehts es da um die pos_x und pos_y Werte im Einstellungen Fenster?
Das hab ich auch so.

Das hilft mir aber nicht dabei, dass Größenänderungen ab dem von mir angeklickten Ankerpunkt aus durchgeführt werden.

Gruß
Martin

_________________
iMac 27'' - 3,4 GHz - RAM 16/32 GB - VRAM 2 GB
AC 10-22


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ankerpunkt setzen
BeitragVerfasst: 15. Mai 2017, 23:23 
Offline
Forum Veteran
Benutzeravatar

Registriert: 2. Jun 2004, 01:01
Beiträge: 2287
Wohnort: Hamburg
Da geht etwas ein wenig durcheinander. V.a. bei den Fangpunkten.

Schau dir mal auf selfgdl den Teil über die zweidimensionalen Fangpunkte an. Ich muss das hier nicht wiederholen. Zu zwei Kernfehlern:

- Fangpunkte benötigen einen Index. Dieser muss im Skript eindeutig sein.
- Bewegliche Fangpunkte brauchen eine Referenzrichtung. Bei der Länge=0 "rät" AC sonst in welche Richtung plus ist.
- Eine ganz schlechte Idee ist es den Parameter, der beweglich sein soll im Skript zu ändern (Hier: pos_x).
- Man kann in AC keinen Basispunkt definieren. Der Basispunkt, den Du meinst ist der Basispunkt für den beweglichen Fangpunkt.

Dein IF - THEN Konstrukt ist zwar zulässig, aber etwas unüblich. Wahrscheinlich ist der 2. Teil auch überflüssig, denn wenn die Ausrichtung nicht "rechts" oder "links" ist, kommt es zum Fehler. Besser ist es wie korrigiert.

Zu Deinem eigentlichen Problem: Mario hat das schon korrekt gesagt: Das Objekt ist genau an einem Punkt im Projekt verankert. Nimm alle Bibliotheken aus dem Bib-Manager und Du siehst die EInsetzpunkte. Im Objekt selbst ist dieser Punkt der Nullpunkt des Objektes. In der ersten Zeile in 2D und 3D (bzw. bis zur ersten Systemtransformation) ist die Kordinate 0/0 genau dieser Punkt.

Im Einstellungsdialog kannst Du zwar eine Referenz auf einen anderen Punkt setzen, das ändert aber nichts an der Systematik. Lediglich versucht AC bei Größenänderungen zu berücksichtigen, dass es das Objekt nach der Änderung so verschiebt, dass das Objekt an dem Punkt im Projekt fixiert bleibt. Das ist aber nicht sicher, dass AC das auch schafft, wenn genau dieser Punkt sich auch innerhalb des Objektes in der Position verändert. Jedenfalls versetzt das das Objekt. Also seinen Einsetzpunkt im Projekt. Alles innerhalb des Objektes bleibt aber auf den internen Objektnullpunkt bezogen. Weswegen z.B. auch Dein Text (bezogen auf die linke untere Ecke) mitrutscht und nicht fixiert bleibt.

Welcher Hotspot im Dialog als Referenz/Anker ausgewählt wurde, lässt sich im Skript übrigens nicht abfragen.

Hier Dein etwas redigierter Quelltext:

Code:
! Variablen
laenge = groesse -0.020
halb = laenge / 2
htspt = 1 ! Zähler Fangpunktindex


! Start Rechteck zeichnen
PEN stift_rechteck
RECT2 0,0,laenge,laenge

! Achsen
PEN stift_achsen
LINE_TYPE linie_achsen

LINE2 halb, 0, halb, laenge
LINE2 0 , halb, laenge, halb

! Innereien des Rechtecks

LINE_TYPE 1
diagonale = laenge * 0.088  ! ~ * SQR(2) / 4 / 4  ! Sinn?

LINE2   halb+diagonale, halb+diagonale, laenge-diagonale, laenge-diagonale
LINE2   halb-diagonale, halb+diagonale,        diagonale, laenge-diagonale
LINE2        diagonale,      diagonale,   halb-diagonale,   halb-diagonale
LINE2 laenge-diagonale,      diagonale,   halb+diagonale,   halb-diagonale

! Hotspots
! Mitte
htspt = htspt + 1 : HOTSPOT2 halb, halb, htspt 

! Ecken
htspt = htspt + 1 : HOTSPOT2 0, 0, htspt  !!! lu
htspt = htspt + 1 : HOTSPOT2 0, laenge, htspt  !!! lo
htspt = htspt + 1 : HOTSPOT2 laenge, 0, htspt  !!! ru
htspt = htspt + 1 : HOTSPOT2 laenge, laenge, htspt !!! ro

! Ende Rechteck zeichnen


! Start Bezeichnung (Text)

IF seite="links" THEN
  anker = 9
  ADD2 0,0 : rtg = 1
ELSE
!  IF seite = "rechts" THEN
    anker = 7
    ADD2 laenge,0 : rtg = -1
!    ELSE
!     ADD2 0,0 : rtg = 1
!  ENDIF
ENDIF

! Text
DEFINE STYLE stil_bezeichung "Arial", 2, anker, 0
SET STYLE stil_bezeichung
PEN stift_bezeichung

gr = STR(groesse*1000,3,0)

bezeichnung="ZLDA\n" + gr
TEXT2 pos_x*rtg, pos_y, bezeichnung

!!Hotspots
MUL2 rtg,1
htspt = htspt + 1 : HOTSPOT2 0, 0, htspt, pos_x, 1 ! Basisfangpunkt
htspt = htspt + 1 : HOTSPOT2 pos_x, 0, htspt, pos_x, 2 ! beweglicher Fangpunkt
htspt = htspt + 1 : HOTSPOT2 -0.1, 0, htspt, pos_x, 3, pos_x ! Referenzpunkt
DEL 2


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 23 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu: