Sie sind nicht angemeldet.

1

Mittwoch, 15. Januar 2014, 22:33

Informationen Ein-Ausblenden per Knopfdruck (zB Hotspots)

Hiho
Ich habe seit längerem mal wieder versucht an einem älteren Projekt von mir zu arbeiten. Es ist eine kleine virtuelle Testtour bei der ich einfach Möglichkeiten austesten möchte.

In der Tour habe ich Flächenhotspots um Informationen oder Links zu abgebildeten Objekten anzuzeigen. Je mehr Objekte man hat, je mehr Flächenhotspots trügen ja den Blick aufs Panorama. Deswegen möchte ich nun, dass man per Knopfdruck diese Teile (und auch andere Sachen) aus und einblenden kann.

ich habe meinem Hotspot ein STYLE verpasst
$this->cacheCode('[php]',' <!-- Flächenhotspots für Informationen -->
<hotspot name="hs2" style="skin_infohotspot">
<point ath="64.9" atv="20.7" />
<point ath="65.1" atv="47.1" />
<point ath="43.8" atv="57.1" />
<point ath="30.9" atv="42.6" />
<point ath="28.5" atv="20.6" />
<point ath="29.8" atv="18.5" />
<point ath="48.4" atv="14.9" />
</hotspot>')

augelagert habe ich dann folgendes
$this->cacheCode('[php]',' <!-- Skin für Flächenhotspots -->

<style name="skin_infohotspot"
visible="true"
alpha="0.5"
fillcolor="0x0000FF" fillcolorhover="0xFFFFFF"
fillalpha="0.5" fillalphahover="0.8"
borderwidth="1.0" borderwidthhover="4.0"
bordercolor="0x0000FF" bordercolorhover="0xFFFFFF"
borderalpha="0.5" borderalphahover="1.0"
/>

<plugin name="infosausblenden"
url="../plugins/dot.png"
keep="true"
align="lefttop"
edge="center"
zorder="5"
x="50"
y="50"
onhover="showtext(Infos Ein/Ausblenden,SKIN_TOOLTIPS);"
onclick="set(style[skin_infohotspot].visible, false);"

/>')
Also grob gesagt wie der Flächenhotspot aussehen soll und das dadrunter ist ein kleines Bildchen, mit welchem ich eben die Hotspots deaktivieren will.
Das ganze klappt auch halbwegs... soll heißen, wenn ich das Symbol klicke, und dann eine andere Seite aufrufe, dass dort die Hotspots deaktiviert sind. jedoch eben nicht sofort, es muss erst eine neue Seite geöffnet werden. Ich würde aber gerne, dass die hotspots sofort ausgeblendet werden.

Und zwar jedoch auch nicht über die ALPHA oder so, damit sie auch nciht mehr klickbar sind oder auch keine ONHOVER SHOWTEXTe anzeigen.


wie bekomme ich das gewünschte Ergebnis? Klick- alles weg, Klick- alles wieder da

Danke =)

2

Donnerstag, 16. Januar 2014, 00:18

Man kann einen Hotspot mit removehotspot entfernen.
Er müsste für "Klick- alles wieder da" wieder neu erzeugt werden.

Oder du setzt die Eigenschaft "visible" des Hotspots auf false.
Die brauchst du dann später für "Klick- alles wieder da" nur wieder auf "true" zu setzen.

Gruß
Wolf

3

Donnerstag, 16. Januar 2014, 14:18

gibt es denn keine Möglichkeit es "on the fly" zu machen?
Nicht indem man jedes mal erst das Panorama wechseln muss?

Im Grund möchte ich einen Button haben, mit dem ich per Klick Zusatzinformationen ein und ausblenden kann, ohne erst etwas neu laden zu müssen? Oder ist dieses einfach aufgrund des nicht-dynamischen von KRPano unmöglich?

4

Donnerstag, 16. Januar 2014, 14:23

Schreib eine <action>, welche das visibility Attribut der Hotspots negiert, wenn es positiv ist oder positiviert, wenn es negativ ist und ordne deinem Button per onklick die <action> zu.

Gruß

5

Donnerstag, 16. Januar 2014, 19:49

Hi,

hier ein paar Beispiele:
$this->cacheCode('[php]','<action name="toggle_all_hotspots">
for(set(i,0), i LT hotspot.count, inc(i),
switch(hotspot[get(i)].visible);
);
</action>

<action name="show_all_hotspots">
for(set(i,0), i LT hotspot.count, inc(i),
set(hotspot[get(i)].visible,true);
);
</action>

<action name="hide_all_hotspots">
for(set(i,0), i LT hotspot.count, inc(i),
set(hotspot[get(i)].visible,false);
);
</action>')

Schöne Grüße,
Klaus

6

Dienstag, 21. Januar 2014, 16:33

Hi,

hier ein paar Beispiele:
$this->cacheCode('[php]','
for(set(i,0), i LT hotspot.count, inc(i),
switch(hotspot[get(i)].visible);
);



for(set(i,0), i LT hotspot.count, inc(i),
set(hotspot[get(i)].visible,true);
);



for(set(i,0), i LT hotspot.count, inc(i),
set(hotspot[get(i)].visible,false);
);
')

Schöne Grüße,
Klaus

Hiho Danke. Kannst du erklären, was genau diese Aktion macht, sodass ich etwas draus lernen kann? sind das 3 einzelne Befehle, oder machen sie nuzusammen Sinn? Weil ich verstehe leider nicht, was die Befehle selbst bewirken.

So wie ich es verstehe zähle ich von 0 bis wohin? Zählt KRPano irgendwo mit, wie viele Hotspots vorhanden sind (in dem falle das i)?
Und wie kann ich das so einstellen, dass eben nur Flächenhotspots, aber nicht "Punkthotpots" (zB bei ner Tour um ein neues Panorama zu öffnen)? Müsste ich dazz wie in dem Code oben einfach die Links irgendwie benennen und die Flächenhotspots, die ein/ausgeblendet werden sollen, "hotspot[nummer]" nennen?



edit:
ich hab die erste Action genommen (mit dem switch). Das Klappt wunderbar.
AAAABER er blendet mir eben nicht nur meine Flächenhotspots aus (benannt "hsx") sondern auch meine Punkthotspots (Linkszu anderen Panos, benannt "spotx"). Letztere sollen erhalten bleiben, erstere nicht.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »mÖre« (21. Januar 2014, 16:42)


7

Dienstag, 21. Januar 2014, 17:21

Kannst du erklären, was genau diese Aktion macht, sodass ich etwas draus lernen kann?

Weil ich verstehe leider nicht, was die Befehle selbst bewirken.
Warum schaust Du nicht mal in die Doku?
Z.B.

Wenn aber ganz elementare Programmiergrundlagen (wie z.B. eine For-Schleife) nicht bekannt sind, ist es wahrscheinlich geschickter, sich diese erst mal anzuschauen.
Ich versuche mal einen (hinkenden) Vergleich: wenn man nicht weiß, was Blende, Verschlusszeit und ein Sensor sind, sollte man nicht gleich mit der Panoramafotografie anfangen ;-)

Ihr könnt doch nicht erwarten, dass der Klaus für Euch selbst simpelste Programme schreibt und diese auch noch Zeile für Zeile erklärt.
So ein bischen "Do it yourself" gehört doch schon dazu, oder?

Gruß
Wolf

8

Dienstag, 28. Januar 2014, 17:09

Danke nochmal an Klaus für den Denkanstoß, habe nun die letzten Tage immer mal wieder irgendwas eingetippt und rumprobiert und nun wirklich eine Lösung gefunden.
Mit einer eingebauten if-Bedienung in der Aktion.

Also der Vollständigkeit halber noch einmal Zusammenfassend.

Ich habe 2 Verschiedene Hotspots im Bild: Das eine sind Bilder, welche die Scenen ändern (also zu einem anderen Pano Linken). das andere Sind Flächenhotspots, die Informationen zu Dingen im Bild liefern sollen (zB als Onhover, oder mit Link Hinterlegt, etc).
Die Scenenlinks sollen erhalten bleiben, die Informations"Flächen" sollen ausblendbar sein. Mit der Action von Klaus konnte man so direkt leider nur alle auf einmal ausblenden. Ich habe es nun so erweitert, dass die Scenenlinks erhalten bleiben, die Flächenhotspots aber verschwinden.

Meine Flächenhotspots haben einfach ein Merkmal mehr bekommen... ich habe es einfallslos bla="info" genannt. Beispielhotspot:
$this->cacheCode('[php]','<hotspot bla="info" name="hs2" style="skin_infohotspot"
onhover="showtext(Waschmaschine [br] hier können beim drüberfahren viele informationen angezeigt werden,SKIN_TOOLTIPS);"
>
<point ath="64.9" atv="20.7" />
...
<point ath="48.4" atv="14.9" />
</hotspot>')

Die Action von Klaus habe ich nun so erweitert
$this->cacheCode('[php]','<action name="toggle_all_hotspots">
for(set(i,0), i LT hotspot.count, inc(i),
if(hotspot[get(i)].bla == "info",
switch(hotspot[get(i)].visible));
);
</action>')

Das klappt nun genau so, wie ich es mir wünsche. Wenn ich die Action ausführe, indem ich auf ein Symbol klicke, verschwinden meine Flächenhotspots, ich kann aber immernoch die Scene wechseln.

Danke an euch, dass ihr mir unter die Arme gegriffen habt
Ich habe zwar ein bisschen Erfahrung mit C, aber KRPano ist nun doch noch mal etwas anderes. So mächtig, da muss man erstmal wissen die Macht zu nutzen =)

9

Dienstag, 28. Januar 2014, 18:37

Ich habe zwar ein bisschen Erfahrung mit C, aber KRPano ist nun doch noch mal etwas anderes. So mächtig, da muss man erstmal wissen die Macht zu nutzen =)

Hihi, wenn man bedenkt, das dinge wie PHP oder Windows (zu großen Teilen) in C programmiert sind, scheinen die XML Klassen und Funktionen die krpano verwendet gar nicht mehr sooo mächtig ;-)

Gruß