Sie sind nicht angemeldet.

1

Dienstag, 20. Januar 2015, 11:58

Wie kann man Teilbereiche im Objectmovie abdecken?

Hallo Klaus,

ist es möglich, einen Teilbereich eines Objectmovies durch einen Skin mit Verlauf von transparent bis opak abzudecken? In diesem png-Bild soll dann noch ein Schriftzug zu sehen sein.

Gibt es dafür ein xml-Beispiel?

Danke!

Viele Grüße

Harald

2

Dienstag, 20. Januar 2015, 18:41

Hi,

je nachdem was genau gemeint ist, wäre eventuell entweder ein <layer> oder <hotspot> Element dazu geeignet...
Mehr lässt sich ohne detaillierte Beschreibung nicht sagen...

Schöne Grüße,
Klaus

3

Dienstag, 20. Januar 2015, 19:30

Hi,

diesen Code aus diesem Forum habe ich mit einem Layer erweitert, der meine Abdeckung zeigt.
Leider wird diese nicht beim Skalieren des Browserfensters proportional verkleinert.

So sieht das dann im Vergleich zu einem Object-Movie, erstellt mit dem Object-Batch-Tool, aus:

http://www.pano4all.de/Objektfilme/Objec…_mit_Layer.html


Auch die Navigationsbuttons sind im umgewandelten Objektfilm verschwunden.

Quellcode

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<krpano version="1.0.8.15" onstart="buildframes(%CURRENTXML%/objects/inspire1/,107);">

	<events onresize="updateframes()"></events>
	
	<style name="frame" keep="true" visible="false" align="center" onloaded="updateframesize(get(name));set(plugin[loadingtext].visible,false);" ondown="copy(oldmousex,mouse.x);domouserotate();"></style>
	
	<plugin name="loadingtext" url="plugins/textfield.swf" keep="true" zorder="100" visible="true" enabled="false" preload="true" align="center" autoheight="true" width="100" background="false" html="[p]Loading...[/p]" css="p {color:#FFFFFF; font-family:arial; font-size:16px }"></plugin>
	
	<layer name="gallerynext" url="gallerybtns.png" keep="true" align="right" x="0" y="0" zorder="100" crop="100|0|100|100" onovercrop="100|100|100|100" ondowncrop="100|100|100|100" ondown="set(y,1);dorotate();" onup="set(y,0)" direction="-1"></layer>
	
	<layer name="galleryprev" url="gallerybtns.png" keep="true" align="left" x="0" y="0" zorder="100" crop="0|0|100|100" onovercrop="0|100|100|100" ondowncrop="0|100|100|100" ondown="set(y,1);dorotate();" onup="set(y,0)" direction="1"></layer>
  
  	<layer name="titel" url="overlay_red.png" keep="true" align="center" x="0" y="0" zorder="2"></layer>	
		
	
	<action name="buildframes">
		for(set(i,0), i LT %2, inc(i),
			txtadd(fname,frame,get(i));
			txtadd(furl,%1,get(i),.jpg);
			addplugin(get(fname));
			plugin[get(fname)].loadstyle(frame);
			copy(plugin[get(fname)].url,furl);
		);
		set(currentframe,0);
		set(framecount,%2);
		set(oldmousex,0);
		showframe(0);
	</action>
	
	<action name="updateframesize">
		if(plugin[%1].imagewidth GT stagewidth,
			set(plugin[%1].width,100%);
			set(plugin[%1].height,prop);
		,
			if(plugin[%1].imageheight GT stageheight,
				set(plugin[%1].width,prop);
				set(plugin[%1].height,100%);
			,
				plugin[%1].resetsize();
			);
		);
	</action>
	
	<action name="updateframes">
		for(set(i,0), i LT framecount, inc(i),
			txtadd(fname,frame,get(i));
			updateframesize(get(fname));
		);		
	</action>
	
	<action name="showframe">
		txtadd(fname,frame,get(currentframe));
		txtadd(tempstr,'set(plugin[',get(fname),'].visible,false);');
		ifnot(%1 == 0, delayedcall(0.03,get(tempstr)); );
		add(currentframe,%1);
		if(currentframe LT 0, sub(currentframe,framecount,1); );
		if(currentframe == framecount, set(currentframe,0); );
		txtadd(fname,frame,get(currentframe));
		set(plugin[get(fname)].visible,true);
		ifnot(plugin[get(fname)].loaded, set(plugin[loadingtext].visible,true);, set(plugin[loadingtext].visible,false); );
	</action>

	<action name="dorotate">
		if(pressed,
			showframe(get(direction));
			delayedcall(0.05,dorotate(););
		);
	</action>

	<action name="domouserotate">
		if(pressed,
			sub(temp,oldmousex,mouse.x);
			if(temp GT 0, set(temp,1); );
			if(temp LT 0, set(temp,-1); );
			showframe(get(temp));
			copy(oldmousex,mouse.x);
			delayedcall(0.03,domouserotate(););
		);
	</action>

	
	
</krpano>


Wäre toll, wenn das auf andere Weise klappen könnte!

Schöne Grüße

Harald

toosten

Fortgeschrittener

Beiträge: 521

Wohnort: Berlin

Beruf: Software-Entwickler bei VR-Easy ( HTML, JS, PHP, krpano, C++, Java )

  • Nachricht senden

4

Mittwoch, 21. Januar 2015, 07:31

<action name="updateframesize">
if(plugin[%1].imagewidth GT stagewidth,
set(plugin[%1].width,100%);
set(plugin[%1].height,100%);
,
if(plugin[%1].imageheight GT stageheight,
set(plugin[%1].width,100%);
set(plugin[%1].height,100%);
,
plugin[%1].resetsize();
);
);
</action>

5

Mittwoch, 21. Januar 2015, 09:35

Danke, aber das funktioniert leider nicht.

Damit wird beim Skalieren des Browserfensters das abgebildete Objekt insgesamt verzerrt. Davon ausgenommen ist aber noch der eingefügte Layer.



Über weitere Lösungsvorschläge bin ich dankbar.

Hi toosten, Deine Anregung war spitze! Hiermit bin ich fast am Ziel:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
	<action name="updateframesize">
		if(plugin[%1].imagewidth GT stagewidth,
			set(plugin[%1].width,prop);
			set(plugin[%1].height,prop);
		,
			if(plugin[%1].imageheight GT stageheight,
				set(plugin[%1].width,prop);
				set(plugin[%1].height,prop);
			,
				plugin[%1].resetsize();
			);
		);
	</action>


Beide Zeilen mit prop und das Layer zur Überdeckung unerwünschter Bildteile bliebt da, wo es hingehört.
Das Fenster kann nun ohne Beeinflussung des Inhalts skaliert werden, der Inhalt selbst aber noch nicht.

Nachtrag:

Leider dauert das Laden des Layers zu lange, so dass einige Sekunden der zu verdeckende Bildteil erscheint.
Kann man den Layer vorrangig laden?

Auch das ist jetzt erledigt mit preload="true" in der Zeile für den Layer.

Grüße

Harald

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »panox« (21. Januar 2015, 10:51)


6

Mittwoch, 21. Januar 2015, 12:26

Hi,

super Video - damit wird sehr schnell verständlich um was es geht! *thumbsup* ;-)

Dazu wäre ein 'distorted' Hotspot am besten geeignet, da dieser automatisch dieselben Transformationen erfährt wie das Panorama selbst.

z.B.

Quellcode

1
2
3
4
5
6
7
8
<hotspot name="overlay_spot"
   	url="overlay_grafik.png"
   	distorted="true"
   	preload="true"
   	enabled="false"
   	width="8.726867"
   	height="prop"
   	/>


Die Grafik muss dazu nur dasselbe Seitenverhältnis wie die Objektgrafik haben (nicht aber dieselbe absolute Größe).

Der Wert 8.726867 für die Breite kommt daher das bei distorted Hotspots eine Bildgröße von 1000px einem Blickwinkel von 90° entsprechen. Objekt-Panoramen (oder auch Flache Panoramen) werden in krpano mit einem Blickwinkel von 1° dargestellt. Daher müssen die 1000px von 90° auf 1° umgerechnet werden. Das geht mit dieser Formel: 'Breite = 1000 * tan(Winkel/2)' - was bei 1° den 8.726867 entspricht. Das muss man aber nicht jedes-mal ausrechnen, sondern man kann einfach diesen Wert übernehmen.

Damit wird dann automatisch immer eine Pixel-perfekte Ausrichtung erreicht.

(Achtung - mein Beispiel Code bezieht sich auf 'normale' krpano Objekte Panoramen, d.h. nicht auf die Darstellung mittels einzelner plugin/layer Elemente)

Schöne Grüße,
Klaus

7

Mittwoch, 21. Januar 2015, 15:17

Danke vielmals, Klaus, das ist so die beste Darstellung! Einfach perfekt. Die Hotspot-png habe ich mit

https://tinypng.com/

um 74% bei voller Transparenz auf 80 KB komprimiert. Dadurch wird die abdeckende Grafik sehr schnell geladen.

Klasse Forum!! "Hier werden Sie geholfen!" *thumbsup*

Wenn das Movie öffentlich ist, verlinke ich es gern hier.

Schöne Grüße

Harald