vor 2 Wochen
Hallo zusammen
ich würde gerne verschiebliche Hotspot generieren. Dies gelingt auch so weit. allerdings ist die Anzahl der Hotspots Dynamisch.
im Parameterscript initalisiere ich die Parameter
Und im 2D Script erstelle ich die Hotspots
Operating system used: Windows 10
Gelöst! Gehe zu Lösung.
vor 2 Wochen
Herzlichen Dank jetzt scheint alles wie gewünscht zu funktionieren
vor 2 Wochen
ich gehe davon aus, dass das Problem im Parameterscript liegt
vor 2 Wochen
Kann sein, dass die Syntax nicht genau stimmt, aber vom Prinzip:
if vardim1(x)< points then
for i= vardim1(x) to points
parameters x[i]=i, y[i]=0
next i
endif
vor 2 Wochen
herzlichen Dank für die schnelle Antwort
Allerdings funktiniert es nach wie vor nicht
da es mir die das Array x und y nicht mehr Dynamisch macht
Wenn ich points z.b im auf 2 oder grösser setze geht nicht mehr und die Array Grösse von x und y bleibt bei 1
vor 2 Wochen
habe nun folgenden Code im Parameterscript
FOR i = 1 to points
vor 2 Wochen
Der Fehler ist, dass die verschobenen Werte immer wieder überschrieben werden. Das Parameters Skript wird immer abgearbeitet, wenn ein Parameter geändert wird. Kontinuierlich immer wieder sogar, wenn ein beweglicher Fangpunkt im Grundriss verändert wird. Er wird geändert und sofort wieder auf die Anfangswerte überschrieben. das kann nicht gehen.
Ein Auslagern dieses Skriptteiles hat übrigens auch keinen Sinn, weil PARAMETERS nur im Parameter Skript funktioniert.
Wie oben eingebaut war meine Idee nicht gedacht. DIM für x und y ist überflüssig. Ist ja ohnehin ein Parameter, sonst funktionieren die Hotspots ja nicht. Vorher noch alles initialisieren ist auch kontraproduktiv. S.o. Alle existierenden Felder des Arrays brauchen keine neuen Werte.
! ##################
! PARAMETER SKRIPT
n = vardim1(x)
if n < points then
for i = n+1 to points
parameters x[i] = x[n] + (i-n) , y[i] = y[n]
next i
endif
! ##################
! 2D SKRIPT
unid=0
FOR i=1 to vardim1(x)
!x control
HOTSPOT2 0,y[i], unID,x[i],1+128 :unID=unID+1 !BASE
HOTSPOT2 x[i],y[i], unID,x[i],2 :unID=unID+1 !MOVE
HOTSPOT2 -1,y[i], unID,x[i],3 :unID=unID+1 !REF
NEXT i
Wo kommt denn "points" her? ist das ein Parameter in der Liste und wird nicht graphisch bestimmt?
Points muss wahrscheinlich ein PARAMETER sein. das hängt aber von dem Gesamtkonzept des Objektes ab.
vor 2 Wochen
Herzlichen Dank für die Unterstützung
Ich mache Langsam Fortschritte 😃
Ja points kommt von einem Parameter
Was ich eigentlich machen will vereinfacht gesagt Ich habe eine Linie diese Teile ich durch eine bestimmte Anzahl Punkte (points) diese Punkte sollen aber auf der Line verschieblich sein. An dem jeweiligen Punkt will ich ein weiteres Objekt hinzufügen.
Das funktioniert nun auch schon fast nur das die Eingefügten Hotspots immer einen Abstand zur Linie haben.
unid=0
!X controll
HOTSPOT2 0,StartY, unID,StartX,1+128 :unID=unID+1 !BASE
HOTSPOT2 StartX,StartY, unID,StartX,2 :unID=unID+1 !MOVE
HOTSPOT2 -1,StartY, unID,StartX,3 :unID=unID+1 !REF
!y controll
HOTSPOT2 StartX,0, unID,StartY,1+128 :unID=unID+1 !BASE
HOTSPOT2 StartX,StartY, unID,StartY,2 :unID=unID+1 !MOVE
HOTSPOT2 StartX,-1, unID,StartY,3 :unID=unID+1 !REF
!x controll
HOTSPOT2 0,EndeY, unID,EndeX,1+128 :unID=unID+1 !BASE
HOTSPOT2 EndeX,EndeY, unID,EndeX,2 :unID=unID+1 !MOVE
HOTSPOT2 -1,StartY, unID,EndeX,3 :unID=unID+1 !REF
!y controll
HOTSPOT2 EndeX,0, unID,EndeY,1+128 :unID=unID+1 !BASE
HOTSPOT2 EndeX,EndeY, unID,EndeY,2 :unID=unID+1 !MOVE
HOTSPOT2 EndeX,-1, unID,EndeY,3 :unID=unID+1 !REF
hotline2 StartX,StartY, EndeX,EndeY
line2 StartX,StartY, EndeX,EndeY
vx= EndeX-StartX
vy=EndeY-StartY
alpha = ATN((vy)/(vx))
unid=0
FOR i=1 to points
del top
rot2 Alpha
If StartX-EndeX>0 then rot2 180
HOTSPOT2 0, y[i] , unID,x[i],1+128 :unID=unID+1 !BASE
HOTSPOT2 x[i],y[i], unID,x[i],2 :unID=unID+1 !MOVE
HOTSPOT2 -1,y[i], unID,x[i],3 :unID=unID+1 !REF
xstr = STR(x[i]*1000,5,1)
ystr = STR(y[i]*1000,5,1)
text2 x[i],y[i], "x:" + xstr +" y:"+ ystr
del top
Add2 x[i],y[i]
CALL "Simpson Strong Tie AE116" PARAMETERS all
del top
NEXT i
Ich komme einfach nicht darauf wo der Fehler ist
vor 2 Wochen - zuletzt bearbeitet vor 2 Wochen
Das ist nicht eindeutig, was du schreibst und programmierst. Was ich verstehe:
1. Du willst zwischen Start und Ende deiner Linie an beliebiger Stelle Teilungspunkte setzen. Diese Punkte möchtest du auf der Linie im Grundriss beweglich verschieben.
2. Du möchtest von diesen Punkten ausgehend jeweils senkrecht (zu was? Zur Linie? Zur Projektorientierung (=Bildschirmrand unten/oben)? Zum Objektrand (=Objekt-X-Achse) - die hat je nach Drehung des Gesamtobjektes eine andere Richtung) in einem wieder per Hotspot beweglich Abstand ein Objekt ausgeben.
Oder sollen die Objekte auf der Linie sitzen? Im Moment gibt dein y[i] nämlich nicht viel Sinn.
Und was funktioniert da nicht?
BTW: Ich würde den Startpunkt deiner Linie auf 0/0 lassen (=einsparen) und nicht beweglich machen, weil:
- das macht es einfacher in der Programmierung
- deine erzeugten Geometrien und deren Darstellung bleiben dicht am Nullpunkt des Objektes und können vom Anwender nicht unangemessen weit davon verschoben werden (-> Performance des Projektes).
Wahrscheinlich kannst du dir den Endpunkt ebenfalls ganz sparen, wenn du einfach die Objektbreite (A) nimmst. Und zur Drehung drehst du das Objekt.
vor 2 Wochen
Herzlichen Dank für die Antwort
das Ganze ist nur ein teil eines grösseren Scripts. (Einer Wand welche Verankerungswinkel eingezeichnet werden sollen)
Ich Versuches nochmals genauer zu erläutern:
Es gibt eine Linie welche zur einen Startpunkt und Endpunkt defniert ist (StartX, StartY sowie EndeX, EndeY)
an dieser Linie Entlang sollen die Verankerungswinkel eingefügt werden.
Mit einem Fixen Abstand Funktiniert das ganze einwandfrei. Es sollte jedoch möglich sein die Winkel entlang der Wandachse auch von Hand zu verschieben.
Deswegen die Dynamischen Hotspots.
Als es soll nichts rechtwinklig dazu stehen sondern alles auf der Linie.
Das mein y[i] nicht so viel Sinn macht habe ich auch bemerkt, aber ich sehe den Fehler nicht.
Die Rotation mache ich lediglich damit sich die Hotspots immer im gleichen Winkel bewegen wie die Wand. Den Winkel habe ich ja berechnet.
Momentan würde ich gerne die Endpunkte gerne beide Dynamisch halten, da dies das Handling für den Nutzer vereinfacht wenn dieser beide Enden manipulieren kann.
Ich hoffe so ist es etwas verständlicher.
vor 2 Wochen - zuletzt bearbeitet vor 2 Wochen
Etwas. Aber nicht 100%. 🙂
In x[i] sind Ordinaten deiner Winkel gespeichert. Damit sich diese nicht verändern, wenn du Start und Ende deiner Linie veränderst, müssen diese in Richtung der Linie gemessen werden. Daher musst du da nicht lange mit dem Winkel hin und her drehen. Gehe an den Startpunkt und drehe dein Koordinatensystem um die Neigung der Linie. Das ist nicht ganz einfach zu berechnen, wenn die Koordinaten beliebig sein können. Wenn du y nicht brauchst, dann verwende es nicht. 🙂
unid=0
!X controll
HOTSPOT2 0,StartY, unID,StartX,1+128 :unID=unID+1 !BASE
HOTSPOT2 StartX,StartY, unID,StartX,2 :unID=unID+1 !MOVE
HOTSPOT2 -1,StartY, unID,StartX,3 :unID=unID+1 !REF
!y controll
HOTSPOT2 StartX,0, unID,StartY,1+128 :unID=unID+1 !BASE
HOTSPOT2 StartX,StartY, unID,StartY,2 :unID=unID+1 !MOVE
HOTSPOT2 StartX,-1, unID,StartY,3 :unID=unID+1 !REF
!x controll
HOTSPOT2 0,EndeY, unID,EndeX,1+128 :unID=unID+1 !BASE
HOTSPOT2 EndeX,EndeY, unID,EndeX,2 :unID=unID+1 !MOVE
HOTSPOT2 -1,StartY, unID,EndeX,3 :unID=unID+1 !REF
!y controll
HOTSPOT2 EndeX,0, unID,EndeY,1+128 :unID=unID+1 !BASE
HOTSPOT2 EndeX,EndeY, unID,EndeY,2 :unID=unID+1 !MOVE
HOTSPOT2 EndeX,-1, unID,EndeY,3 :unID=unID+1 !REF
hotline2 StartX,StartY, EndeX,EndeY
line2 StartX,StartY, EndeX,EndeY
vx = EndeX-StartX
vy = EndeY-StartY
! Hier kann es sein, dass noch einmal 180° dazugerechnet werden
! müssen, wenn der Vektor in den III. oder IV. Quadranten zeigt.
alpha = ATN( vy/vx )
add2 StartX, StartY
rot2 alpha
! Festlegung in welchem Abstand die Elemente gesetzt werden sollen.
abstand = 0
FOR i=1 to vardim1(x)
HOTSPOT2 0, 0, unID,x[i],1+128 :unID=unID+1 !BASE
HOTSPOT2 x[i],0, unID,x[i],2 :unID=unID+1 !MOVE
HOTSPOT2 -1,0, unID,x[i],3 :unID=unID+1 !REF
xstr = STR(x[i]*1000,5,1)
ystr = STR(abstand*1000,5,1)
text2 x[i],0, "x:" + xstr +" y:"+ ystr
Add2 x[i], abstand
! Sollen die Winkel nicht senkrecht zu Linie stehen braucht es
! hier vielleicht noch ein ROT2 -alpha und nach dem CALL auch ein DEL 2
CALL "Simpson Strong Tie AE116" PARAMETERS all
del 1
NEXT i
del 2
Das Skript habe ich aus dem Kopf und ohne Test geändert. Die Richtung solltest du aber erkennen, wenn es nicht funktioniert.