• Login
sketchucation logo sketchucation
  • Login
🤑 SketchPlus 1.3 | 44 Tools for $15 until June 20th Buy Now

[CODE] Camera settings

Scheduled Pinned Locked Moved Developers' Forum
28 Posts 5 Posters 4.3k Views 5 Watching
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C Offline
    chrisglasier
    last edited by 15 Feb 2010, 05:33

    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!

    With TBA interfaces we can analyse what is to be achieved so that IT can help with automation to achieve it.

    1 Reply Last reply Reply Quote 0
    • C Offline
      Chris Fullmer
      last edited by 15 Feb 2010, 05:49

      Hehe, yeah sorry about that imperial vs. metric thing. I hope you're able to pin down the problems!

      Chris

      Lately you've been tan, suspicious for the winter.
      All my Plugins I've written

      1 Reply Last reply Reply Quote 0
      • D Offline
        driven
        last edited by 15 Feb 2010, 11:44

        @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

        learn from the mistakes of others, you may not live long enough to make them all yourself...

        1 Reply Last reply Reply Quote 0
        • C Offline
          chrisglasier
          last edited by 15 Feb 2010, 13:11

          @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.

          With TBA interfaces we can analyse what is to be achieved so that IT can help with automation to achieve it.

          1 Reply Last reply Reply Quote 0
          • C Offline
            chrisglasier
            last edited by 16 Feb 2010, 03:15

            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.


            Metric!

            With TBA interfaces we can analyse what is to be achieved so that IT can help with automation to achieve it.

            1 Reply Last reply Reply Quote 0
            • C Offline
              chrisglasier
              last edited by 17 Feb 2010, 08:49

              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:
              originalrecreated
              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.)

              With TBA interfaces we can analyse what is to be achieved so that IT can help with automation to achieve it.

              1 Reply Last reply Reply Quote 0
              • C Offline
                chrisglasier
                last edited by 17 Feb 2010, 08:51

                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


                Scene extraction and view generation

                With TBA interfaces we can analyse what is to be achieved so that IT can help with automation to achieve it.

                1 Reply Last reply Reply Quote 0
                • C Offline
                  chrisglasier
                  last edited by 17 Feb 2010, 09:58

                  And here's the matrix returns for one component in the original and recreated view.
                  camera011.png

                  With TBA interfaces we can analyse what is to be achieved so that IT can help with automation to achieve it.

                  1 Reply Last reply Reply Quote 0
                  • 1
                  • 2
                  • 2 / 2
                  2 / 2
                  • First post
                    21/28
                    Last post
                  Buy SketchPlus
                  Buy SUbD
                  Buy WrapR
                  Buy eBook
                  Buy Modelur
                  Buy Vertex Tools
                  Buy SketchCuisine
                  Buy FormFonts

                  Advertisement