omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    AR Quick Look

    Pythonista
    1
    1
    1061
    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.
    • cvp
      cvp last edited by

      AR Quick Look to display USDZ files of virtual objects in 3D or AR.
      Download an example usdz file from f.i. here and run this quick and dirty script using a QLPreviewController.

      
      from   objc_util import *
      import os
      import ui
      
      # create delegate for QLPreviewController
      def previewControllerDidDismiss_(_self, _cmd, _controller):
      	global uiview
      	#print('previewControllerDidDismiss_')
      	uiview.close()
      	
      methods = [previewControllerDidDismiss_,]
      protocols = ['QLPreviewControllerDelegate']
      try:
      	MyQLPreviewControllerDelegate = ObjCClass('MyQLPreviewControllerDelegate')
      except:
      	MyQLPreviewControllerDelegate = create_objc_class('MyQLPreviewControllerDelegate', methods=methods, protocols=protocols)
      
      # create datasource for QLPreviewController
      def numberOfPreviewItemsInPreviewController_(_self, _cmd, _controller):
      	#print('numberOfPreviewItemsInPreviewController_ called')
      	return 1
      
      def previewController_previewItemAtIndex_( _self, _cmd, _controller, index):
      	#print('previewController_previewItemAtIndex_ called, index=',index)
      	global uiview
      	return uiview.nsurl.ptr
      	
      methods = [numberOfPreviewItemsInPreviewController_, previewController_previewItemAtIndex_]
      protocols = ['QLPreviewControllerDataSource']
      try:
      	MyQLPreviewControllerDataSource = ObjCClass('MyQLPreviewControllerDataSource')
      except:
      	MyQLPreviewControllerDataSource = create_objc_class('MyQLPreviewControllerDataSource', methods=methods, protocols=protocols)
      	
      @on_main_thread	
      def MyQLPreviewController(ns_url, w, h, mode='sheet', popover_location=None):
      	global uiview
      	uiview = ui.View()
      	uiview.frame = (0,0,w,h)
      	uiview.background_color = 'white'
      	if mode == 'sheet':
      		uiview.present('sheet',hide_title_bar=False)
      	elif mode == 'popover':
      		if popover_location:
      			uiview.present('popover', hide_title_bar=True, popover_location=popover_location)
      		else:
      			return
      	else:
      		return
      		
      	QLPreviewController = ObjCClass('QLPreviewController').new()
      	#print(dir(QLPreviewController))
      			
      	# Use new delegate class:
      	delegate = MyQLPreviewControllerDelegate.alloc().init()
      	QLPreviewController.delegate = delegate		
      	
      	# Use new datasource class:
      	datasource = MyQLPreviewControllerDataSource.alloc().init()
      	QLPreviewController.dataSource = datasource
      	
      	QLPreviewController.setModalPresentationStyle_(3)
      	
      	objc_uiview = ObjCInstance(uiview)
      	SUIViewController = ObjCClass('SUIViewController')
      	vc = SUIViewController.viewControllerForView_(objc_uiview)	
      	
      	uiview.nsurl = ns_url	# used in datasource to display url
      
      	vc.presentViewController_animated_completion_(QLPreviewController, True, None)
      		
      def main():
      	# demo code	
      	ns_url = nsurl(os.path.expanduser('~/Documents/wheelbarrow.usdz'))
      	MyQLPreviewController(ns_url,600,500)
      
      if __name__ == '__main__':
      	main()
      

      You can pinch and rotate...

      1 Reply Last reply Reply Quote 2
      • First post
        Last post
      Powered by NodeBB Forums | Contributors