[CODE] Camera settings
-
... and the non perspective views are the same ...
-
I can't parse your code very quickly Chris. Especially once it goes out to js, I'm lost. But it looks like you are doing the right thing by getting the fov for the perspective cameras. But somewhere in there, something is getting messed up. If you get the values correctly and apply them back correctly, the cameras will match 100%. There should be no need to do a zoom extents. So it is clear that somewhere the values are not coming through correctly. I would do some solid value testing. Output all the values before they go to js, then output them again as you recreate the camera. See if they differe at all.
Also, if you could make a model with a scene, then run your script on it and recreate that camera, then create a new scene that uses your camera info it might be easier to compare the settings of the 2 cameras - the original and your recreation.
Chris
-
Thanks for all your effort Chris. Just by posting those pix
**.mm**
came to mind ... errgh ... but somehow oddly satisfying. First go seems to work but still not quite it. You know when the French gave you the Statue of Liberty, it would have been nice if you had taken up their metric system.Tally ho!
-
Hehe, yeah sorry about that imperial vs. metric thing. I hope you're able to pin down the problems!
Chris
-
@chrisglasier said:
Yes guess what - fov is in mm by default!
Here's a kind of victory pic.
I amended the previous code in case anyone is thinking of doing something similarly lunatic.Cheers.
hi Chris,
I can't get the feb016.avi to run on any player, I'm on a Mac but don't normally have problems with .avi
can you out-put a quicktime.mov as well? Is it the same video that's up on youtube?
I'm very interested in your approach and although I'm only just starting to learn coding, I'd like to integrate namespace conventions into my efforts right from the start.john
-
@unknownuser said:
Is it the same video that's up on youtube?
Yes. You could also look at my old website (button on left).
Now I'm off to the real movies for a while.
Interested in your interest.
-
Yes guess what - fov is in mm by default!
Here's a kind of victory pic.
I amended the previous code in case anyone is thinking of doing something similarly lunatic.Cheers.
-
A couple of odd things I just discovered when doing something else is that whereas the perspectives are spot on the standard views are unstable. The top/plan views for example get some 164% bigger when imported. See pixs:
The other is that I.mm
'd the vector3ds for up. I changed them but it didn't make any difference. (Obviously I don't understand this stuff well enough.) -
Thanks for your help.
[flash=600,432:21eq7727]http://www.youtube.com/v/6h6m_xr5IYA&hl=en_US&fs=1&[/flash:21eq7727]
For anyone interested here are extracts from the rather clunky code I ended up to support this v quick video hinting at the potential.
Ruby extractor:
pages = model.pages layers = model.layers styles = model.styles @parray =[] pages.each do |page| model.pages.selected_page = page cam = page.camera name = page.name pl = [] page.layers.each do |layer| pl.push(layer.name) end pl = pl.join(",") st = page.style st = st.name pts = [cam.eye, cam.target, cam.up] per = cam.perspective? if(cam.perspective?) fov = cam.fov sub = [pts,per,fov] else sub = [pts,per] end sub = sub.join("yy") entry = [name,pl,st,sub] @parray.push(entry.join("xx"))
JS converter
p = ret[3].split(";"); pages = []; for (a = 0; a < p.length; a += 1){ p[a] = p[a].split("xx"); lgth = fLength(nset); lab = lgth.toString(); o = {}; o.Type = "Scene"; o.Genus = "New"; o.Name = p[a][0]; o.Backlink = []; o.Backlink.push(sRoot); o.Hidden = []; nset[lab] = o; nset[sRoot].Forelink.push(lab); pages.push(lab); nset[lab].Forelink = []; //mark hidden layers //alert(p[a]) pp = p[a][1].split(","); for (c = 0; c < pp.length; c += 1){ for (d = 0; d < combo.length; d += 1){ if(pp[c] === nset[combo[d]].Name){ nset[combo[d]].Filter = 1; } } } for (d = 0; d < combo.length; d += 1){ nset[combo[d]].Backlink = []; if(!nset[combo[d]].Filter){ nset[lab].Forelink.push(combo[d].toString()); nset[combo[d]].Backlink.push(lab); } else{ delete nset[combo[d]].Filter; } } //name,pl,st,camry nset[lab].Style = p[a][2]; nset[lab].Camera = p[a][3]; }
JS scene call
function fScenes(){ var cell,nt,node,name,kids,dn,cm,genus,cmps; cell = document.getElementById("ScenesOn") nt = config.nametrail; node = nt[nt.length-1][0]; type = nset[node].Type; if(type === "Scene"){ name = nset[node].Name; kids = nset[node].Forelink; dn = []; cm = []; for(a = 0; a <kids.length; a += 1){ genus = nset[kids[a]].Genus if(genus === "Dimension" || genus === "Notes"){ dn.push(nset[kids[a]].Name); continue; } dn.push(nset[kids[a]].Name); cmps = nset[kids[a]].Forelink; for(b = 0; b <cmps.length; b += 1){ cm.push(nset[cmps[b]].Index); } } name = nset[node].Name; style = nset[node].Style; rec = nset[node].Camera.split("yy"); cam = []; //eye,target,up for(a=0; a < 3; a += 1){ cam.push(rec[a].slice(1,-1)); } cam.push(rec[3]) if(rec[3]){ cam.push(rec[4]); } data = [name,dn.join(","),cm.join(","),style,cam]; document.getElementById("trans").value = data.join("|"); window.location = "skp;scene"; } }
Ruby callback
@dlg.add_action_callback("scene") {|d, p| a = @dlg.get_element_value("trans") a = a.split("|") name = a[0].split(",") lyrs = a[1].split(",") cmps = a[2].split(",") sty = a[3].to_s cam = a[4].split(",") model = Sketchup.active_model entities = model.entities entities.each do |entity| if entity.class == Sketchup;;ComponentInstance || entity.class == Sketchup;;Group entity.visible = false end end cmps.each do |c| a = Integer(c) #p entities[a].name entities[a].visible = true end layers = model.layers layers.each do |layer| layer.visible = false end lyrs.each do |lyr| layers[lyr].visible = true; #p layers[lyr].name end pages = model.pages styles = model.styles page = pages["Nameset"] styles.selected_style= styles[sty] page.use_style = styles.selected_style eye = Geom;;Point3d.new [Float(cam[0]).mm, Float(cam[1]).mm, Float(cam[2]).mm] target = Geom;;Point3d.new [Float(cam[3]).mm, Float(cam[4]).mm, Float(cam[5]).mm] up = Geom;;Vector3d.new [Float(cam[6]), Float(cam[7]), Float(cam[8])] camera = model.active_view.camera camera.set(eye,target,up) if cam[9] == "true" camera.perspective = true else camera.perspective = false end if camera.perspective? camera.fov = Float(cam[10]) end }
It seems to work OK but I don't like the zoom extents (I'm working on that).
As they say in the gallery ... C&C welcome.
Edit 15 Feb: Changed code in callback to match post post revelations
-
And here's the matrix returns for one component in the original and recreated view.
Advertisement