You are not logged in.

Dear visitor, welcome to krpano.com Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Friday, July 9th 2010, 8:12am

Alle Hotspots eines bestimmten Typs (bzw.Hotspot-Kategorie) ein- / ausblenden

Hallo zusammen

Ich muss für eine Panoramatour eine Kategorisierung ermöglichen. Wenn der Anwender auf den Menübefehl "Kunst", klickt sollen nur die Hotspots angezeigt werden, welche mit Kunst zu tun haben. Wenn auf "Architektur" geklickt wird, sollen nur die Hotspots angezeigt werden, welche mit Architektur zu tun haben usw.

Habe mir überlegt, pro Kategorie je ein anders JPG-Symbol zu verwenden (dient nebenbei bei der Erstellung auch zur optischen Kontrolle). Allerdings finde ich keinen Weg, mittels einer Schleife z.B
  • im ersten Schritt alle Hotspot-Symbole auszublenden und ...
  • im zweiten Schritt dann alle Hotspots mit Symbol "kunst.jpg" einzublenden
Vielleicht gibt es hier auch ganz andere oder gar einfachere Lösungsansätze? Natürlich könnte man die Tour auch ganz einfach aufteilen. Allerdings ist das bei umfangreichen Inhalten fast nicht mehr fehlerfrei zu bewerkstelligen.

Wer weiss Rat?

Vielen Dank und einen schönen Sommertag!

Pepe

2

Friday, July 9th 2010, 1:24pm

hi,

poligonale hs lassen sich so ein- und ausblenden.

wie und ob das mit kategorien geht ->??

vg

markus

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<action name="toggle_polygonal_hotspots">
  foreach(hotspot,i,
  toggle_alpha(get(i));
  );
  set(update,view);
 </action>
 <action name="toggle_alpha">
  if (hotspot[%1].point.count != 0,
  switch(hotspot[%1].fillalpha,0,0.4);
  set(hotspot[%1].fillcolor,0xFFCC00);,
  );
 </action>
 <action name="_foreach_action">
  trace("Error in foreach loop: push/pop stack corrupted");
 </action>
 <action name="foreach">
  set(%2,0);
  push(action[_foreach_action].content);
  set(action[_foreach_action].content,"if(%2 LT %1.count,%3;inc(%2);_foreach_action(););");
  _foreach_action();
  pop(action[_foreach_action].content);
 </action>

<plugin name="hotspot_button"
          url="hotspots.png"
         keep="true" preload="false"
          visible="true" enabled="true" handcursor="true" capture="true" children="true"
         zorder="0"
          alpha="1.00" blendmode="normal"
          smoothing="true"
          align="leftbottom" edge=""
          x="460" y="10" ox="" oy=""
         scale="1" scale9grid="" scalechildren="false"
          rotate="0"
         onhover="showtext(Hotspots);"
         onclick="toggle_polygonal_hotspots();"
         />

3

Wednesday, July 14th 2010, 7:54am

Hallo Markus

Vielen Dank. Deinen Ansatz über Polygonal Hotspots ist an sich genau der gesuchte Ansatz. Aber leider bin trotz mehreren Versuchen in den letzten Tagen ich zurzeit weit davon entfernt, eine Schleife erstellen zu können, die dies auf verschiedene Arten von "Hotspot-Grafiken", also getrennt für z.B. kunst.jpg und Architektur, jpg zu durchführt. Offensichtlich fehlen mir dazu die erforderlichen Detailkenntnisse bzw. Befehle und auch die Übersicht darüber. Kurz: Ich bin kläglich gescheitert :-(

Vielleicht weiss sonst noch jemand Rat?

Schöne Grüsse
Pepe

4

Thursday, July 15th 2010, 3:28pm

Hi,

z.B. so:

erstmal zwei Actions zum ein-/ausblenden eines Hotspots,
als Parameter muss jeweils der Name oder Index des Hotpots angegeben werden:

Source code

1
2
3
4
5
6
7
8
<action name="hidehotspot">
  tween(hotspot[%1].alpha, 0, 0.5, default, set(hotspot[%1].visible,false) );
</action>

<action name="showhotspot">
  set(hotspot[%1].visible, true);
  tween(hotspot[%1].alpha, 1.0);
</action>



dann hier eine Action um alle Hotspots auszublenden:

Source code

1
2
3
4
5
6
7
8
<action name="hideallhotspots">
  if(%1 != NEXT, set(i,0) );

  hidehotspot( get(hotspot[%i].name) );

  inc(i);
  if(i LT hotspot.count, hideallhotspots(NEXT) );
</action>



um jetzt weiter nur bestimmte Hotspots einblenden zu können,
müssen diese irgendein Unterscheidungsmerkmal haben,

der "url" Parameter kann hier nicht verwendet werden, da dieser
beim Laden unter Umständen verändert/angepasst wurde,

also z.B. jedem (gewünschtem) Hotspots die Variable "kategorie" mit einem
bestimmten Wert hinzufügen (z.B. "Kunst"):

Source code

1
<hotspot ... kategorie="Kunst" ... />


dann können mit dieser Action nur die Hotspots mit dieser Kategorie angezeigt werden:

Source code

1
2
3
4
5
6
7
8
<action name="showhotspots">
  if(%1 != NEXT, set(i,0) );

  if(hotspot[%i].kategorie == "Kunst", showhotspot( get(hotspot[%i].name) ) );

  inc(i);
  if(i LT hotspot.count, showhotspots(NEXT) );
</action>


Schöne Grüße,
Klaus

5

Tuesday, July 20th 2010, 7:34am

Hallo Klaus

Ganz herzlichen Dank für Deine hilfreiche und tolle Unterstützung!

Zwar bin ich infolge laufenden Projekten etwas in Verzug - aber ich habe den Code bereits provisiorisch einkopiert. So der Spur nach, denke ich nun auch, endlich die Logik dahinter verstanden zu haben.
Ich hoffe, baldmöglichts einen Test machen zu können und danach an dieser Stelle ein Feedback zu geben.

Nochmals vielen Dank und
freundliche Grüsse

Pepe