Auf der Stelle drehen via linker Maustaste?

Fragen & Antworten zur Steuerung von 3D Inhalten in PDFs über JavaScript
Antworten
mbaker
Beiträge: 3
Registriert: 05.11.2010, 13:53

Auf der Stelle drehen via linker Maustaste?

Beitrag von mbaker » 01.12.2010, 15:56

Hallo Zusammen,

ich bin auf der Suche nach einer Möglichkeit die Kamerasteuerung auf ein einfaches "Drehen auf der Stelle" zu begrenzen. Ziel: Bessere Kontrollierbarkeit des 3DPDFs.

Ich bin davon überzeugt, dass das über eine JS-Funktion möglich ist, komme aber einfach nicht weiter.

Diese Funkion sieht idealer Weise so aus, wie der Rundumblick im Modus "Walk" (rechte Maustaste). Die Funktion die ich suche muss jedoch unbedingt auf der linken Maustaste liegen.

Die rechte Maustaste sollte dabei deaktiviert werden können.

Ich möchte diese Funktion über einen Button ansteuern können. Über andere Buttons möchte ich wieder zu meiner "Standard-Steuerung" zurückkehren (Rotate).

Ich wäre euch wahnsinnig dankbar, wenn ihr eine Anregung für mich habt.

Der Hintergrund: Für ein Studien-Projekt möchte ich einen Sportwagen von außen und innen zeigen. Innen verliert sich jedoch jeder zweite und verzweifelt an der Steuerung.

Vielen Dank und beste Grüße!


frankbr
Beiträge: 11
Registriert: 24.11.2010, 11:04

Auf der Stelle drehen via linker Maustaste?

Beitrag von frankbr » 02.12.2010, 10:10

mhm also ich glaube, dass das nicht so einfach geht wie du dir das vorstellst.
du müsstest halt bei jedem camera event eingreifen. dieses soll dann ja nicht ausgeführt werden, sondern halt deine funktion. das problem bei den callbacks ist nur, so wie ich das erfahren habe, dass du sie zwar abgreifen kannst, sie jedoch trotzdem erst ausgeführt werden. das heißt, bei jedem camera event wird es dann ausgeführt und dann bist du erst dran.
die einzige möglichkeit, die mir jetzt so einfällt ist, dass du erstmal alle cameraoptionen ausstellst

Code: Alles auswählen

runtime.disableTool(runtime.TOOL_NAME_SPIN);
runtime.disableTool(runtime.TOOL_NAME_PAN);
runtime.disableTool(runtime.TOOL_NAME_FLY);
runtime.disableTool(runtime.TOOL_NAME_WALK);
(in der 3d szene)

und dann mit nem handler für das rendern dein ziel mittels einer funktion selbst berechnest.

sonst wüsste ich nicht, dass das einfach mit einer gegebenen javascript funktion geht. in der api hab ich auch nichts dazu gefunden.

mfg frank.

mbaker
Beiträge: 3
Registriert: 05.11.2010, 13:53

Auf der Stelle drehen via linker Maustaste?

Beitrag von mbaker » 07.12.2010, 06:06

Zunächst danke für deine Antwort. Leider bin ich noch nicht weiter gekommen. Mein Problem ist, dass ich ab hier nicht weiter komme:
und dann mit nem handler für das rendern dein ziel mittels einer funktion selbst berechnest.
Hast du hier ein Stichwort für mich, über das ich mehr zur Umsetzung erfahren könnte? Stehe total auf dem Schlauch.


frankbr
Beiträge: 11
Registriert: 24.11.2010, 11:04

Auf der Stelle drehen via linker Maustaste?

Beitrag von frankbr » 07.12.2010, 09:05

ja ok also ich mein das ungefähr so:
ich denke mal, dass du in der 3d szene arbeitest, da helfen dann auch diese links hier, wenn du die nicht kennen solltest:
http://www.adobe.com/devnet/acrobat/javascript.html
http://livedocs.adobe.com/acrobat_sdk/9.1/Acrobat9_1_HTMLHelp/wwhelp/wwhimpl/common/html/wwhelp.htm?context=Acrobat9_HTMLHelp&file=JavaScript_SectionPage.70.1.html
http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/js_api_reference.pdf

Code: Alles auswählen

/*zuerst auf ein renderevent oder auf ein mouseevent reagieren, je nachdem was du möchstest, ich glaube, dass du eher ein mouseeventhandler brauchst, nachdem ich mir das nochmal durchgelesen hab */
var mouseHandler = new MouseEventHandler();
mouseHandler.onMouseDown = false;
mouseHandle.onMouseUp = true;
// rechte maus taste deaktivieren
mouseHandler.rightButtonDown = false;
mouseHandler.onEvent = function(mouseEvent){

 /* und jetzt müsstest du halt entprechend deiner aktuellen kameraposition, dem up-vector und dem aktuellen ziel, für jedes objekt in der szene die neue position berechnen. ich hatte ein ähnlichen problem und bin das aber dann über rendereventhandler angegangen

var renderev = new RenderEventHandler();
runtime.addEventHandler(renderev);
renderev.onEvent = function(ev){
    updateOrientation(); <-- hier erfolgt dann die neuberechnung der positionierung aller objekte
};

aber mit einem mousehandler müsste das auch gehen */

}
runtime.addEventHandler(mouseHandler);

//jetzt noch die anderen möglichkeiten der kamerasteuerung von adobe aus
runtime.disableTool(runtime.TOOL_NAME_SPIN);
runtime.disableTool(runtime.TOOL_NAME_PAN);
runtime.disableTool(runtime.TOOL_NAME_FLY);
runtime.disableTool(runtime.TOOL_NAME_WALK);
runtime.disableTool(runtime.TOOL_NAME_ROTATE /*oder ROTATION, weiß nicht genau */);
 
hoffe ich konnte helfen ein wenig

mfg frank :)

Antworten