You are not logged in.

1

Wednesday, January 18th 2012, 10:56am

autotour with if condition

next step (I never give up...):
I have an xml-file which defines all scenes, one after each other.
I now want to load the next scene, after a full circle is completed.
I tried this - which, of course, doesn't work ;-); after each scene node:

Source code

1
2
3
4
5
	...
	</scene>
	<action>
		if(view.hlookat==85,loadscene(get(nextscene), null, MERGE, ZOOMBLEND(1,2));
	</action>

Where did I go wrong?
(I don't want to use time; I want the scene to change at a given hlookat value)
thx!

2

Wednesday, January 18th 2012, 11:42am

Hi,

first you would need to define that 'full circle is completed',
where to start?
and how to do that (tweens, lookto, autorotate, ...)
and where would you detect it (after the tween/lookto, in the onviewchanged event?)

a exact compare like view.hlookat == 85 will probably not work, when e.g. the extact value is 85.0012 or so,

to explain a solution to full startup situation and the exact wanted behavior would be needed to know,

best regards,
Klaus

3

Wednesday, January 18th 2012, 12:06pm

thank you Klaus for response!
Each scene has an initial view hlookat and it autorotates. I'd like the "full circle" be defined by 355° from that starting point. Thus, after one full circle, the next scene would blend in. ALso, if a user interacts, the pano would finish rotating to the starting point and blend the next scene.
and where would you detect it (after the tween/lookto, in the onviewchanged event?)
well, that I don't know... thtat's why I tried an if condition checking against a given hlookat value...

4

Wednesday, January 25th 2012, 12:13am

.
I tried Falkos suggestion from the panorama community board, but I can't get it to work. This is how I implemented it:
.

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
<krpano version="1.0.8.14" onstart="startup();">
    <!-- vtour.xml template krpano tools version 1.0.8.14 -->

    <autorotate enabled="true"
            waittime="1.5"
            speed="10.0"
            />

    <action name="startup">
        loadscene(get(scene[0].name), null, MERGE);
        if(scene.count GT 1, buildthumbs(); );
    </action>

    <action name="getHlookat">
        <!--
        %1    = auf Ganzzahl runden (true)
        -->
        set(hpos, get(view.hlookat));
        set(hposreal, get(view.hlookat));
            if (hpos LT 0, mul(hposreal, -1); );
        div(hposreal, 360);
            Math.floor(hposrealtmp, hposreal);
         sub(hposreal, hposrealtmp);
        mul(hposreal, 360);
            if (hpos LT 0, sub(hposreal, 360, hposreal); );

        if (%1 EQ true, roundval(hposreal, 0); roundval(hpos, 0); );
    </action>
    <events onviewchange="getHlookat();" />
    
    <scene name="scene_a....."
        ...
    </scene>

    <action>
        if(view.hposreal==15,loadscene(get(nextscene), null, MERGE, ZOOMBLEND(1,2));
    </action>

    <scene name="scene_b..."
        ...

iceman_fx

Professional

Posts: 601

Location: Sachsen

Occupation: Webdesigner- und entwickler sowie Fotodesigner

  • Send private message

5

Wednesday, January 25th 2012, 6:48pm

Du darfst nicht if (view.hposreal == ... machen sondern if (hposreal == ...
Die hposreal ist eine eigene Variable, welche nicht mehr zu einem Systemarray (Gruppe) gehört.
VG vom iceman

www.fotodesign360.de / www.falkomueller.com
_____________________________________________________________________________________________________________________
Sende eCards direkt aus Deinem Panorama. Send eCards from your panorama.
The eCard-Plugin for krpano >> http://ecardplugin.falkomueller.com

6

Wednesday, January 25th 2012, 10:31pm

dankeeee!!!!
Leider tut sich nichts :-( ... das nächste Pano wird nciht eingeblendet.
http://www.wishbone-design.de/assets/panos/tour.html
Verlange ich zu viel???
So habe ich es jetzt versucht:

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
<krpano version="1.0.8.14" onstart="startup();">
	<!-- vtour.xml template krpano tools version 1.0.8.14 -->

	<autorotate enabled="true"
            waittime="1.5"
            speed="10.0"
            />
	<action name="startup">
		if(scene.count GT 1, buildthumbs(); );
		<!-- load the first scene -->
		loadscene(get(scene[0].name), null, MERGE, ZOOMBLEND(1,2)E);
		autotour();
	</action>
	<action name="getHlookat">
            <!--
               %1    = auf Ganzzahl runden (true)
            -->
            set(hpos, get(view.hlookat));
            set(hposreal, get(view.hlookat));
                if (hpos LT 0, mul(hposreal, -1); );
            div(hposreal, 360);
                Math.floor(hposrealtmp, hposreal);
            sub(hposreal, hposrealtmp);
            mul(hposreal, 360);
                if (hpos LT 0, sub(hposreal, 360, hposreal); );

            if (%1 EQ true, roundval(hposreal, 0); roundval(hpos, 0); );
        </action>
	<events onviewchange="getHlookat();" />
	<action name="autotour">	
		if(hposreal==25,loadscene(get(scene[1].name), null, MERGE, ZOOMBLEND(1,2));
		if(hposreal==25,loadscene(get(scene[0].name), null, MERGE, ZOOMBLEND(1,2));
		autotour();
	</action>
	<scene....
.

iceman_fx

Professional

Posts: 601

Location: Sachsen

Occupation: Webdesigner- und entwickler sowie Fotodesigner

  • Send private message

7

Thursday, January 26th 2012, 7:13pm

Wie Klaus weiter oben schon schrieb, wird es zu ungenau um auf Ganzzahlen zu prüfen.
Probier es mal mit hposreal GT 25 oder hpposreal LT 25
Also große oder kleiner gleich 25, je nach Wunsch.
VG vom iceman

www.fotodesign360.de / www.falkomueller.com
_____________________________________________________________________________________________________________________
Sende eCards direkt aus Deinem Panorama. Send eCards from your panorama.
The eCard-Plugin for krpano >> http://ecardplugin.falkomueller.com

8

Saturday, January 28th 2012, 10:13am

dankeee!!
aber leider ergeben weder GT noch LT eine Änderung...

9

Thursday, February 2nd 2012, 8:02pm

Hi,

sorry, der Code ist leider nicht ganz einfach zu durchschauen...

z.B. warum hier zwei mal der gleiche Aufruf?
if(hposreal==25,loadscene(get(scene[1].name), null, MERGE, ZOOMBLEND(1,2));
if(hposreal==25,loadscene(get(scene[0].name), null, MERGE, ZOOMBLEND(1,2));

Warum möchtest du unbedingt per <autorotate> eine Drehung vollführen?
Warum nicht per lookto() oder tween()?
Diese Actions sind dafür vorgesehen sich steuern zu lassen, das <autorotate> dagegen ist eigentlich bloss für eine automatische Drehung wenn nichts im Pano nichts tut... das hat keine Start und End Events,

Schöne Grüße,
Klaus

10

Friday, February 3rd 2012, 12:15am

danke, dass du dir das angesehen hast.
Warum möchtest du unbedingt per <autorotate> eine Drehung vollführen?
Warum nicht per lookto() oder tween()?

Die Absicht ist, die Tour automatisch ablaufen zu lassen - aber im Unterschied zur step inc Methode nach einem Benutzereingriff nicht zum letzten Punkt zu springen, sondern einfach die autorotation wieder aufzunehmen. Von dort aus dann aber die autotour wieder weiterlaufen zu lassen! Das wäre für viele Szenarien geschmeidiger, nahtloser als step inc.
Das heißt, ein lookto 360 geht nicht, denn man weiß ja nicht, wo der Nutzer oder Nutzerin das pano angehalten hat.

z.B. warum hier zwei mal der gleiche Aufruf?
if(hposreal==25,loadscene(get(scene[1].name), null, MERGE, ZOOMBLEND(1,2));
if(hposreal==25,loadscene(get(scene[0].name), null, MERGE, ZOOMBLEND(1,2));

pano [0] ist geladen. Wenn es beim vorgesehenen Punkt (hier:25°) angekommen ist, wird pano [1] geladen. Wenn dieses beim vorgesehenen Punkt angekommen ist, wird pano [0] geladen.
.

11

Friday, February 3rd 2012, 9:47am

Wie wäre es mit einer Kombi aus der "step inc" Variante und der "if hposreal" Variante?:

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
	<action name="startup">
		buildthumbs();
	    loadscene(scene(get(scene[0].name), null, MERGE, ZOOMBLEND(1,2)); 
		autotour();
		set(idletime,53);
		set(events.onidle, autotour() );
	</action>
	<action name="getHlookat">
        <!--
        %1    = auf Ganzzahl runden (true)
        -->
        set(hpos, get(view.hlookat));
        set(hposreal, get(view.hlookat));
            if (hpos LT 0, mul(hposreal, -1); );
        div(hposreal, 360);
            Math.floor(hposrealtmp, hposreal);
        sub(hposreal, hposrealtmp);
        mul(hposreal, 360);
            if (hpos LT 0, sub(hposreal, 360, hposreal); );

        if (%1 EQ true, roundval(hposreal, 0); roundval(hpos, 0); );
        </action>
	
	<action name="autotour">
	  oninterrupt(break);
	  if(step == 2, if(hposreal==28), inc(step););
	  if(step == 3, loadscene((get(scene[1].name), null, MERGE, ZOOMBLEND(1,2) inc(step);); 
	  if(step == 4, if(hposreal==20, inc(step););
	  if(step == 5, loadscene((get(scene[2].name), null, MERGE, ZOOMBLEND(1,2); inc(step); ); 
	  if(step == 6, if(hposreal==25), inc(step); );
	  if(step == 7, loadscene((get(scene[3].name), null, MERGE, ZOOMBLEND(1,2) );
	  if(step == 8, if(hposreal==18), inc(step); );
	  autotour();
	</action>
...
und bei den scenes dann jeweils:
<scene name="scene_baghahouddin" title="baghahouddin" onstart="" thumburl="baghahouddin.tiles/thumb.jpg">
		<action name="setstep">
			set(step,2)
		</action>
		<view...>
...
<scene name="scene_chor-bakr-2569" title="chor-bakr-2569" onstart="" thumburl="chor-bakr-2569.tiles/thumb.jpg">
		<action name="setstep">
			set(step,4)
		</action>
		<view...>
...

aber natürlich funktioniert das wieder nicht, es wird noch nicht mal das erste Pano gezeigt...

Warum möchtest du unbedingt per <autorotate> eine Drehung vollführen?
Warum nicht per lookto() oder tween()?

über die angegebenen Gründe (keine Sprünge) hinaus ist die Rotation bei autorotate angeblich gleichmäßiger
.