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.

HansNyb

Professional

  • "HansNyb" started this thread

Posts: 936

Location: Denmark

Occupation: Photographer

  • Send private message

1

Thursday, March 29th 2012, 1:46pm

Trigger event at hlookat="XX"

I would like to trigger an event like this tween(plugin[guide4].y,-200,3)"
when you pass for example hlookat 90, 180 etc.

Is this possible with a simple code? I can not find anything about it.

Hans

2

Thursday, March 29th 2012, 5:32pm

Hi,

directly triggering an event when reaching a specific point isn't possible, but you can use the onviewchange event and do there specific checks...

e.g. here a a one-time check if hlookat is greater then 90:

Source code

1
<events name="viewtest" onviewchange="if(view.hlookat GT 90,  events.removearrayitem(viewtest); trace(...do your stuff here...); );"  />

one-time because after the condition is the first time true, the event itself will be removed and the custom code executed (the trace in this example),

if an event should trigger constantly when reaching a certain range, it would be more complicated - an additional variable, that stores if inside or outside the range, must be used,

e.g. this code checks when entering the hlookat range 90-180 and when leaving it:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<events name="rangeevent" onviewchange="rangeevent();" />
<action name="rangeevent">
    set(inside,false);
    if(view.hlookat GT 90, if(view.hlookat LT 180, set(inside,true); ); );
    if(lasttime_inside === null, copy(lasttime_inside,inside));
    if(lasttime_inside != inside,
        if(inside, 
            trace('you have entered the range 90 to 180');
          ,
            trace('you have leaved the range 90 to 180');
          );
        copy(lasttime_inside,inside);
      );
</action>


best regards,
Klaus

3

Saturday, November 23rd 2013, 7:01pm

There is a "not a bug" with this idea, but there is an issue

Hi,

directly triggering an event when reaching a specific point isn't possible, but you can use the onviewchange event and do there specific checks...

e.g. here a a one-time check if hlookat is greater then 90:

Source code

1
<events name="viewtest" onviewchange="if(view.hlookat GT 90,  events.removearrayitem(viewtest); trace(...do your stuff here...); );"  />

one-time because after the condition is the first time true, the event itself will be removed and the custom code executed (the trace in this example),

if an event should trigger constantly when reaching a certain range, it would be more complicated - an additional variable, that stores if inside or outside the range, must be used,

e.g. this code checks when entering the hlookat range 90-180 and when leaving it:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<events name="rangeevent" onviewchange="rangeevent();" />
<action name="rangeevent">
    set(inside,false);
    if(view.hlookat GT 90, if(view.hlookat LT 180, set(inside,true); ); );
    if(lasttime_inside === null, copy(lasttime_inside,inside));
    if(lasttime_inside != inside,
        if(inside, 
            trace('you have entered the range 90 to 180');
          ,
            trace('you have leaved the range 90 to 180');
          );
        copy(lasttime_inside,inside);
      );
</action>


best regards,
Klaus


Hi Klaus,
I have been browsing the forums looking for an option like this to fix a problem. I too need a way to call an action when the user passing a certain viewpoint in the tour. The problem with this "continuous code version" is when the user passes the point, and continues spinning the tour in the same direction, the view.hlookat value continues to build towards infinity (so long as the user continues moving one direction). So the point in the scene we need a trigger, is gone.

I have a daytime/nighttime transition using 1 scene. Then i have 6 cubeface hotspots in the scene. So the scene starts as day, then switches to night, back and forth. I have yet to figure a code that will allow for continues transition at a heading say 0-1 degrees (view.hlookat = 0-1) when the tour spins only 1 direction.

Can you recommend a solution?

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<krpano version="1.16" onstart="showlog();  set(counter, 0); startup();">

	<events onviewchange="transition();" />

	<action name="transition">
    if(counter == 0,
    	if(view.hlookat GE 0, 
    		if(view.hlookat LT 1.0, 
    			delayedcall(1.0, changetonight(); );
    		); 
    	);
    );
    if(counter == 1,
    	if(view.hlookat GE 0, 
    		if(view.hlookat LT 1.0, 
    			delayedcall(1.0, changetoday(); );
    		); 
    	);
    );
	</action>

	<action name="changetonight">
		set(counter, 1); if(counter == 1, stopall();); 
		for(set(i, 1), i LE 6, inc(i),
			txtadd(night, 'hot_', get(i));
			set(hotspot[get(night)].visible, true);
			tween(hotspot[get(night)].alpha, 1.0, 0.3, linear);
		);
		trace(Its Night);
	</action>
	<action name="changetoday">
		set(counter, 0); if(counter == 0, stopall(););
		for(set(i, 1), i LE 6, inc(i),
			txtadd(day, 'hot_', get(i));
			set(hotspot[get(day)].visible, true);
			tween(hotspot[get(day)].alpha, 0.0, 0.3, linear);
		);
		trace(Its Day);
	</action>

	<action name="startup">
		loadscene(scene_day, null, MERGE);
	</action>
	
	<scene name="scene_day" title="day" onstart="" thumburl="panos/day.tiles/thumb.jpg" lat="" lng="" heading="">
		<view hlookat="-1" vlookat="0" fovtype="MFOV" fov="120" maxpixelzoom="2.0" fovmin="70" fovmax="140" limitview="auto" />
		<preview url="panos/day.tiles/preview.jpg" />
		<image>
			<cube url="panos/day.tiles/pano_%s.jpg" />
			<mobile>
				<cube url="panos/day.tiles/mobile_%s.jpg" />
			</mobile>
		</image>

   <style name="cubeface" width="1002" height="1002" distorted="true" enabled="false" pixelhittest="true" preload="true" visible="false" alpha="0.0" />
    <hotspot name="hot_1" style="cubeface" url="panos/night.tiles/pano_l.jpg" ath="-90"  atv="0"   zorder="2" />
    <hotspot name="hot_2" style="cubeface" url="panos/night.tiles/pano_f.jpg" ath="0"    atv="0"   zorder="2" />
    <hotspot name="hot_3" style="cubeface" url="panos/night.tiles/pano_r.jpg" ath="+90"  atv="0"   zorder="2" />
    <hotspot name="hot_4" style="cubeface" url="panos/night.tiles/pano_b.jpg" ath="+180" atv="0"   zorder="2" />
    <hotspot name="hot_5" style="cubeface" url="panos/night.tiles/pano_u.jpg" ath="0"    atv="-90" zorder="2" />
    <hotspot name="hot_6" style="cubeface" url="panos/night.tiles/pano_d.jpg" ath="0"    atv="+90" zorder="2" />

	</scene>
</krpano>