|
DeleD Community Edition Forums
|
View previous topic :: View next topic |
Author |
Message |
paul_nicholls DeleD PRO user
Joined: 05 Dec 2007 Posts: 356 Location: Hobart, Tasmania, Australia
|
Posted: Wed Jan 20, 2010 4:48 am Post subject: Patch for turn-table rotation 3d view |
|
|
Hi guys,
I have a patch for the current version of DeleD CE (version 6) which should add in y-axis rotation around the world origin or the first selected object origin.
See this item:
https://sourceforge.net/tracker/?func=detail&aid=2924593&group_id=293758&atid=1241130
This happens in 3d mode when using right mouse + ctrl + alt and dragging left or right.
First you put the object you wish to rotate around into the 3d view.
If the object isn't in the center of the world, then you can select it to rotate around that object.
Otherwise the default, no objects selected mode is to rotate around the world origin.
Anyone wish to try it to see what they think?
The patch should affect these files:
Forms/frm3dView.pas
Units/unit_Cameras.pas
Here is the patch file (inside quotes)
EDIT: updated to latest code changes.
Quote: |
Index: Forms/frm3dView.pas
===================================================================
--- Forms/frm3dView.pas (revision 6)
+++ Forms/frm3dView.pas (working copy)
@@ -425,6 +425,11 @@
deltaUV: TUVCoordinate;
angle: single;
dx,dy: single;
+ prim: TBasePrimitive;
+ primX: Single;
+ primY: Single;
+ primZ: Single;
+ usePrim: Boolean;
begin
if not Active then exit;
@@ -453,13 +458,36 @@
fCamera3D.MoveRelative(0, 0, s);
+ end else if (ssCtrl in Shift) and (ssAlt in Shift) then begin //right+ctrl+alt=orbit
+ if Scene.SelectedPrimitives.Count = 0 then begin
+ usePrim := false;
+ primX := 0;
+ primY := 0;
+ primZ := 0;
+ end else begin
+ usePrim := true;
+ prim := Scene.SelectedPrimitives.First;
+
+ primX := prim.Center.x;
+ primY := prim.Center.y;
+ primZ := prim.Center.z;
+ end;
+
+ fCamera3D.Orbit(sp.X - mp.X, mp.Y - sp.Y, 0,
+ usePrim,
+ primX,
+ primY,
+ primZ,
+ editDimension = edX,
+ editDimension = edY);
+
end else if (ssCtrl in Shift) then begin // right+ctrl=navigate left/right
fCamera3D.MoveRelative(sp.X - mp.X, 0, 0);
fCamera3D.MoveRelative(0, mp.Y - sp.Y, 0);
- end else begin // right button=rotate
- fCamera3D.Rotate( mp.Y - sp.Y, mp.X - sp.X, 0);
+ end else begin
+ fCamera3D.Rotate( mp.Y - sp.Y, mp.X - sp.X, 0); // right=rotate
end;
SetCursorPos(sp.X,sp.Y);
Index: Units/unit_Cameras.pas
===================================================================
--- Units/unit_Cameras.pas (revision 6)
+++ Units/unit_Cameras.pas (working copy)
@@ -87,7 +87,11 @@
procedure Move(vector: TVertice);
procedure MoveRelative(const aVector: TVertice); overload;
procedure MoveRelative(const anX, aY, aZ: single); overload;
+ procedure Orbit(const anX, aY, aZ: Single; const aOrbitSelectedObject: Boolean;
+ const aSelectedObjectX, aSelectedObjectY, aSelectedObjectZ : Single;
+ const aConstrainToX,aConstrainToY: Boolean); overload;
procedure Rotate(const anX, anY, aZ: integer);
+ procedure RotateWithAdj(const anX, anY, aZ: Single);
procedure Reset;
property Position: TVertice read fPosition write fPosition;
property Rotation: TVertice read fRotation write fRotation; // pitch, yaw and roll
@@ -294,6 +298,21 @@
if Rotation.z < 0 then Rotation.z := 359;
end;
+procedure TCamera3d.RotateWithAdj(const anX, anY, aZ: Single);
+begin
+ Rotation.x := Rotation.x+anX;
+ if Rotation.x >= 360 then Rotation.x := Rotation.x - 360;
+ if Rotation.x < 0 then Rotation.x := 360 + Rotation.x;
+
+ Rotation.y := Rotation.y+anY;
+ if Rotation.y >= 360 then Rotation.y := Rotation.y - 360;
+ if Rotation.y < 0 then Rotation.y := 360 + Rotation.y;
+
+ Rotation.z := Rotation.z+aZ;
+ if Rotation.z >= 360 then Rotation.z := Rotation.z - 360;
+ if Rotation.z < 0 then Rotation.z := 360 + Rotation.z;
+end;
+
procedure TCamera3d.MoveRelative(const anX, aY, aZ: single);
var vector: TVertice;
begin
@@ -305,6 +324,63 @@
end;
end;
+procedure TCamera3d.Orbit(const anX, aY, aZ: Single;
+ const aOrbitSelectedObject: Boolean;
+ const aSelectedObjectX, aSelectedObjectY, aSelectedObjectZ : Single;
+ const aConstrainToX,aConstrainToY: Boolean);
+var
+ x,y,z : Single;
+ rx,ry,rz : Single;
+
+ procedure RotatePoint_YAxis(angle,x,z,ox,oz : Single; var rx,rz : Single);
+ begin
+ angle := angle * PI / 180;
+ x := x - ox;
+ z := z - oz;
+ rx := x * Cos(angle) - z * Sin(angle) + ox;
+ rz := x * Sin(angle) + z * Cos(angle) + oz;
+ end;
+
+ //todo: include this when x-axis orbit is working along with y-axis orbit
+{ procedure RotatePoint_XAxis(angle,z,y,oz,oy : Single; Var rz,ry : Single);
+ begin
+ angle := angle * PI / 180;
+ z := z - oz;
+ y := y - oy;
+ rz := z * Cos(angle) - y * Sin(angle) + oz;
+ ry := z * Sin(angle) + y * Cos(angle) + oy;
+ end;}
+begin
+ // default to world origin for orbit point
+ if aOrbitSelectedObject then begin // use selected object center as orbit point
+ x := aSelectedObjectX;
+ y := aSelectedObjectY;
+ z := aSelectedObjectZ;
+ end else begin
+ x := 0;
+ y := 0;
+ z := 0;
+ end;
+
+ //todo: include this when x-axis orbit is working along with y-axis orbit
+// if aConstrainToY or (not aConstrainToX and not aConstrainToY) then begin
+ begin
+ RotatePoint_YAxis(-anX,Position.x,Position.z,x,z,rx,rz);
+ Position.x := rx;
+ Position.z := rz;
+ RotateWithAdj(0, -anX, 0);
+ end;
+
+ //todo: include this when x-axis orbit is working along with y-axis orbit
+ {
+ if aConstrainToX or (not aConstrainToX and not aConstrainToY) then begin
+ RotatePoint_XAxis(-aY,Position.z,Position.y,z,y,rz,ry);
+ Position.z := rz;
+ Position.y := ry;
+ RotateWithAdj(-aY, 0, 0);
+ end;}
+end;
+
procedure TCamera3d.Reset;
begin
Position.x := 0;
|
If applying the patch is difficult, then I could supply my executable for people to try the new functionality?
cheers,
Paul _________________ Long live DeleD!
Hi ho...hi ho...it's off 3d modeling I go...
Last edited by paul_nicholls on Wed Jan 20, 2010 10:17 am; edited 2 times in total |
|
Back to top |
|
|
chronozphere DeleD PRO user
Joined: 20 Jun 2006 Posts: 1010 Location: Netherlands
|
Posted: Wed Jan 20, 2010 7:44 am Post subject: |
|
|
Great work paul. Can't wait to see this feature in the new release.
I still need to deliver my first patch. I'm working on it. |
|
Back to top |
|
|
paul_nicholls DeleD PRO user
Joined: 05 Dec 2007 Posts: 356 Location: Hobart, Tasmania, Australia
|
Posted: Wed Jan 20, 2010 9:18 am Post subject: |
|
|
Hi all,
I have made some small changes to the code to neaten/shorten it a bit.
I am quite happy with the result so far, so would anyone have an issue if I try checking in my change directly to the DeleD CE codebase?
Then others can just update their code to insert my change if they want to live 'on the bleeding edge' LOL
PLEASE let me know!
cheers,
Paul _________________ Long live DeleD!
Hi ho...hi ho...it's off 3d modeling I go... |
|
Back to top |
|
|
Paul-Jan Site Admin
Joined: 08 Aug 2004 Posts: 3066 Location: Lage Zwaluwe
|
Posted: Wed Jan 20, 2010 8:20 pm Post subject: |
|
|
I say "go". I really appreciate how you took the effort of creating a patch first (gave as a chance to run through the patching process, yay), but I wouldn't mind you committing directly into the code base either. I say we have plenty of experience with your contributions. |
|
Back to top |
|
|
tpascal Member
Joined: 23 Nov 2009 Posts: 11
|
Posted: Wed Jan 20, 2010 10:42 pm Post subject: |
|
|
Quote: |
Hi guys,
I have a patch for the current version of DeleD CE (version 6) which should add in y-axis rotation around the world origin or the first selected object origin.
|
This is simple the most important patch i desired since i saw deled; several 3d modeling programs (like milkshape) suffer from that, they all orbit the camera around the center or the world, which make hard to focus and inspect specific spot in the world.
Quote: |
If applying the patch is difficult, then I could supply my executable for people to try the new functionality?
|
I am using TortoiseSVN 1.6.6, and i am trying to apply your patch, but i was unable to success.
I copy and pasted your quoted patch into a "camera.patch" file, then in the explorer i select my deled source code folder and used tourtoise "apply patch" option, i selected my camera.patch file and i get a message error "unknow line type was found in line 5", actually all lines in your patch with @@ somthing @@ is not working for me,
If i remove manually all those lines then it works and i get a two files editor windows, but it looks like not difference are found.
what i am doing wrong? |
|
Back to top |
|
|
paul_nicholls DeleD PRO user
Joined: 05 Dec 2007 Posts: 356 Location: Hobart, Tasmania, Australia
|
Posted: Thu Jan 21, 2010 3:00 am Post subject: |
|
|
Paul-Jan wrote: |
I say "go". I really appreciate how you took the effort of creating a patch first (gave as a chance to run through the patching process, yay), but I wouldn't mind you committing directly into the code base either. I say we have plenty of experience with your contributions. |
ok, thanks PJ
I will try committing the patch so other people can enjoy
cheers,
Paul _________________ Long live DeleD!
Hi ho...hi ho...it's off 3d modeling I go... |
|
Back to top |
|
|
paul_nicholls DeleD PRO user
Joined: 05 Dec 2007 Posts: 356 Location: Hobart, Tasmania, Australia
|
Posted: Thu Jan 21, 2010 3:01 am Post subject: |
|
|
tpascal wrote: |
Quote: |
Hi guys,
I have a patch for the current version of DeleD CE (version 6) which should add in y-axis rotation around the world origin or the first selected object origin.
|
This is simple the most important patch i desired since i saw deled; several 3d modeling programs (like milkshape) suffer from that, they all orbit the camera around the center or the world, which make hard to focus and inspect specific spot in the world.
Quote: |
If applying the patch is difficult, then I could supply my executable for people to try the new functionality?
|
I am using TortoiseSVN 1.6.6, and i am trying to apply your patch, but i was unable to success.
I copy and pasted your quoted patch into a "camera.patch" file, then in the explorer i select my deled source code folder and used tourtoise "apply patch" option, i selected my camera.patch file and i get a message error "unknow line type was found in line 5", actually all lines in your patch with @@ somthing @@ is not working for me,
If i remove manually all those lines then it works and i get a two files editor windows, but it looks like not difference are found.
what i am doing wrong? |
Hmm...not sure why you are getting an error?
If you do an update via tortise, does it say version 6?
I couldn't apply the patch to my other copy of the SVN till tortise had opened the dual window with small overlaying window, and I had selected one of those files, and actually saved the changes from the file menu...
I hope this makes sense, and helps too!
cheers,
Paul _________________ Long live DeleD!
Hi ho...hi ho...it's off 3d modeling I go... |
|
Back to top |
|
|
paul_nicholls DeleD PRO user
Joined: 05 Dec 2007 Posts: 356 Location: Hobart, Tasmania, Australia
|
Posted: Thu Jan 21, 2010 3:12 am Post subject: |
|
|
Hear ye, hear ye...come one, come all....
the initial version of the turn-table 3d rotation has been committed to the DeleD CE codebase, so fee free to check out the code and try it out
https://sourceforge.net/tracker/?func=detail&atid=1241130&aid=2924593&group_id=293758
I have included the instructions as a comment in the tracker item, but here they are again:
Quote: |
INSTRUCTIONS
--------------------------
Use CTRL+ALT+right mouse drag left/right in 3d view window to rotate
around y-axis.
If no objects are selected, then the y-axis is the world origin, but if 1
or more objects is selected, then the first selected object is used as the
location of the y-axis to rotate around. |
Enjoy!
Please let me know if there are any issues that need fixing
cheers,
Paul _________________ Long live DeleD!
Hi ho...hi ho...it's off 3d modeling I go... |
|
Back to top |
|
|
Jeroen Site Admin
Joined: 07 Aug 2004 Posts: 5332 Location: The Netherlands
|
Posted: Thu Jan 21, 2010 7:27 am Post subject: |
|
|
Excellent work paul - keep it up! _________________ Check out Figuro, our online 3D app! More powerful 3D tools for free. |
|
Back to top |
|
|
tpascal Member
Joined: 23 Nov 2009 Posts: 11
|
Posted: Thu Jan 21, 2010 5:20 pm Post subject: |
|
|
Quote: |
the initial version of the turn-table 3d rotation has been committed to the DeleD CE codebase, so fee free to check out the code and try it out
|
It works excelent Paul, exactly the feature i was looking for, thank you, I even dare to suggest this should be the default rotation mouse control cos it is more useful that current default rotating the camera_AT vector.
May i suggest you should extend the Orbit to the "X" axis too?, so there is more freedom to inspect the target from (Up to down for example), in this case i think the angle rotation cant exced from 180 degree.
good work, |
|
Back to top |
|
|
Paul-Jan Site Admin
Joined: 08 Aug 2004 Posts: 3066 Location: Lage Zwaluwe
|
Posted: Thu Jan 21, 2010 7:10 pm Post subject: |
|
|
As an experiment, I have created two groups inside tracker to aid with documentation:
- Next Release - means done and will be present in the next binary release
- Next Release - Needs Doc - means done, will be present in the next binary release, but needs documenting in wiki/help files.
I marked this feature with the second category.
When we do a binary release, we can simple sort on these two groups inside tracker and then either document them (using your text from the comments) fully or a add a single line to the changelog.
We still have to recruit someone to do the actual documenting, but at least we'll be able to actually find the issues inside tracker. |
|
Back to top |
|
|
paul_nicholls DeleD PRO user
Joined: 05 Dec 2007 Posts: 356 Location: Hobart, Tasmania, Australia
|
Posted: Thu Jan 21, 2010 7:43 pm Post subject: |
|
|
That's a great idea PJ
I looked for any changes that had happened to the tracker item after I was emailed about changes, but I didn't notice that change.. LOL
This was prior to looking at THIS topic update haha
EDIT: perhaps it might be a good idea for the person who initially adds the feature request does the documentation in the wiki?
How does the help get updated though?
cheers,
Paul _________________ Long live DeleD!
Hi ho...hi ho...it's off 3d modeling I go... |
|
Back to top |
|
|
Paul-Jan Site Admin
Joined: 08 Aug 2004 Posts: 3066 Location: Lage Zwaluwe
|
Posted: Thu Jan 21, 2010 9:20 pm Post subject: |
|
|
I'd really really prefer to decouple writing documentation from requesting and/or coding stuff. I know a lot of developers who can't write proper sensible english if their life depends on it (mostly because their native language is very different) who would much rather write code. Other people (like Nocturn for instance) can write very clear documentation on stuff other people created.
I think the best solution would be
- anyone is encouraged to document their own stuff
- one or two people are end-responsible and check whether everything new/changed is documented properly, and fix/add where necessary.
Now all we need to do is recruit those "one or two" people and we are set.
The help files themselves are something we need to discuss. The help files are in sourceforge so anyone can go in and edit them, and we can do a build of the chm each time we update the binaries. Then again, the information in there is more or less a duplicate of what we want to write in the wiki, and the wiki is REALLY REALLY open. I've seen projects where they generate the documentation straight from the wiki, and while I like the idea, that is a lot of work to setup, and the end-results are not always the most practical help files (*cough* delphi 2010 *cough*). |
|
Back to top |
|
|
paul_nicholls DeleD PRO user
Joined: 05 Dec 2007 Posts: 356 Location: Hobart, Tasmania, Australia
|
Posted: Thu Jan 21, 2010 9:30 pm Post subject: |
|
|
Hi PJ,
ok, that's fair enough.
I'm not that good at doing documentation myself (*cough*) LOL
Thanks for the update
cheers,
Paul _________________ Long live DeleD!
Hi ho...hi ho...it's off 3d modeling I go... |
|
Back to top |
|
|
chronozphere DeleD PRO user
Joined: 20 Jun 2006 Posts: 1010 Location: Netherlands
|
Posted: Thu Jan 21, 2010 10:34 pm Post subject: |
|
|
It works great paul! Thanks you for this.
You could improve the feature by letting the user go "all around" the model instead of moving in a fixed circle. You could utilize the Y-coordinate of the mouse to achieve vertical movement (this would be a rotation about the X-axis in screen space). I did exactly the same for the first versions of my UV-plugin (now It has a free camera).
About the docs. I'm one of the programmers who is willing to write his own documentation (It will be simple and to the point, so I can concentrate on code). |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|