From f2efafec301f102dc4930eb4a2c5451b9ca8708a Mon Sep 17 00:00:00 2001 From: Jing Wei Li Date: Sun, 25 Feb 2018 12:31:35 -0500 Subject: [PATCH 01/12] Added Scrollable Color Picker & Bug Fixes --- .../CSDTModelViewer.xcodeproj/project.pbxproj | 8 + .../paletteIcon.imageset/Contents.json | 22 +++ .../paletteIcon.imageset/paletteIcon.png | Bin 0 -> 24272 bytes .../paletteIcon.imageset/paletteIcon2x.png | Bin 0 -> 21158 bytes .../yesIcon.imageset/Contents.json | 22 +++ .../yesIcon.imageset/yesIcon.png | Bin 0 -> 20888 bytes .../yesIcon.imageset/yesIcon2x.png | Bin 0 -> 19209 bytes .../AugmentedRealityViewController.swift | 11 +- .../Base.lproj/Main.storyboard | 137 +++++++++++++++--- .../SceneSettingsTableViewController.swift | 22 ++- .../CSDTModelViewer/SceneViewController.swift | 83 ++++++++++- .../CSDTModelViewer/SettingsHeader.swift | 37 +++++ .../CSDTModelViewer/SettingsHeaderView.xib | 46 ++++++ 3DVisualizer-iOS/CSDTModelViewer/Shared.swift | 17 ++- .../TwoDModelCollectionViewController.swift | 11 +- .../TwoDSpecificsViewController.swift | 3 + README.md | 1 + 17 files changed, 388 insertions(+), 32 deletions(-) create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/paletteIcon.imageset/Contents.json create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/paletteIcon.imageset/paletteIcon.png create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/paletteIcon.imageset/paletteIcon2x.png create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/yesIcon.imageset/Contents.json create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/yesIcon.imageset/yesIcon.png create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/yesIcon.imageset/yesIcon2x.png create mode 100644 3DVisualizer-iOS/CSDTModelViewer/SettingsHeader.swift create mode 100644 3DVisualizer-iOS/CSDTModelViewer/SettingsHeaderView.xib diff --git a/3DVisualizer-iOS/CSDTModelViewer.xcodeproj/project.pbxproj b/3DVisualizer-iOS/CSDTModelViewer.xcodeproj/project.pbxproj index 760524c..9f285a1 100644 --- a/3DVisualizer-iOS/CSDTModelViewer.xcodeproj/project.pbxproj +++ b/3DVisualizer-iOS/CSDTModelViewer.xcodeproj/project.pbxproj @@ -22,6 +22,8 @@ 04854EE820312A6E00D4958C /* SettingsPickerTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04854EE720312A6E00D4958C /* SettingsPickerTableViewCell.swift */; }; 0486266120380590003E1400 /* TwoDSpecificsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0486266020380590003E1400 /* TwoDSpecificsViewController.swift */; }; 04AFD7EF202434B600FA5DFF /* ModelPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04AFD7EE202434B600FA5DFF /* ModelPickerViewController.swift */; }; + 04DFE45720412AAD00AB8FBF /* SettingsHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 04DFE45620412AAD00AB8FBF /* SettingsHeaderView.xib */; }; + 04DFE45920412B5F00AB8FBF /* SettingsHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04DFE45820412B5F00AB8FBF /* SettingsHeader.swift */; }; 3501D39EF228C1775D27D401 /* Pods_CSDTModelViewer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 328D86A68850FCB8F41D52F0 /* Pods_CSDTModelViewer.framework */; }; /* End PBXBuildFile section */ @@ -43,6 +45,8 @@ 04854EE720312A6E00D4958C /* SettingsPickerTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsPickerTableViewCell.swift; sourceTree = ""; }; 0486266020380590003E1400 /* TwoDSpecificsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TwoDSpecificsViewController.swift; sourceTree = ""; }; 04AFD7EE202434B600FA5DFF /* ModelPickerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModelPickerViewController.swift; sourceTree = ""; }; + 04DFE45620412AAD00AB8FBF /* SettingsHeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SettingsHeaderView.xib; sourceTree = ""; }; + 04DFE45820412B5F00AB8FBF /* SettingsHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsHeader.swift; sourceTree = ""; }; 14CC5F52A9D4EF190A6985F4 /* Pods-CSDTModelViewer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CSDTModelViewer.debug.xcconfig"; path = "Pods/Target Support Files/Pods-CSDTModelViewer/Pods-CSDTModelViewer.debug.xcconfig"; sourceTree = ""; }; 328D86A68850FCB8F41D52F0 /* Pods_CSDTModelViewer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_CSDTModelViewer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9098B8F5B7076EB16E061B56 /* Pods-CSDTModelViewer.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CSDTModelViewer.release.xcconfig"; path = "Pods/Target Support Files/Pods-CSDTModelViewer/Pods-CSDTModelViewer.release.xcconfig"; sourceTree = ""; }; @@ -93,6 +97,8 @@ 0447270B2023C64C003A9095 /* AppDelegate.swift */, 0447270D2023C64C003A9095 /* SceneViewController.swift */, 0420FFAC2025021600FCA0EB /* SceneSettingsTableViewController.swift */, + 04DFE45620412AAD00AB8FBF /* SettingsHeaderView.xib */, + 04DFE45820412B5F00AB8FBF /* SettingsHeader.swift */, 04AFD7EE202434B600FA5DFF /* ModelPickerViewController.swift */, 0420FFAE2025075A00FCA0EB /* Shared.swift */, 045B39082026327800E3BA39 /* AugmentedRealityViewController.swift */, @@ -181,6 +187,7 @@ buildActionMask = 2147483647; files = ( 044727162023C64C003A9095 /* LaunchScreen.storyboard in Resources */, + 04DFE45720412AAD00AB8FBF /* SettingsHeaderView.xib in Resources */, 044727202023D3BF003A9095 /* wigwaam.stl in Resources */, 044727132023C64C003A9095 /* Assets.xcassets in Resources */, 044727112023C64C003A9095 /* Main.storyboard in Resources */, @@ -253,6 +260,7 @@ 0447270E2023C64C003A9095 /* SceneViewController.swift in Sources */, 0486266120380590003E1400 /* TwoDSpecificsViewController.swift in Sources */, 047A8DF82037D0C10066521A /* TwoDModelCollectionViewController.swift in Sources */, + 04DFE45920412B5F00AB8FBF /* SettingsHeader.swift in Sources */, 04854EE820312A6E00D4958C /* SettingsPickerTableViewCell.swift in Sources */, 0447270C2023C64C003A9095 /* AppDelegate.swift in Sources */, 04AFD7EF202434B600FA5DFF /* ModelPickerViewController.swift in Sources */, diff --git a/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/paletteIcon.imageset/Contents.json b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/paletteIcon.imageset/Contents.json new file mode 100644 index 0000000..8105a8b --- /dev/null +++ b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/paletteIcon.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "paletteIcon2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "paletteIcon.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/paletteIcon.imageset/paletteIcon.png b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/paletteIcon.imageset/paletteIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..ec939b304b4d71e79a99f4f5a0233904fddfb46e GIT binary patch literal 24272 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 literal 0 HcmV?d00001 diff --git a/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/yesIcon.imageset/Contents.json b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/yesIcon.imageset/Contents.json new file mode 100644 index 0000000..bb14016 --- /dev/null +++ b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/yesIcon.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "yesIcon2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "yesIcon.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/yesIcon.imageset/yesIcon.png b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/yesIcon.imageset/yesIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..4b64fcc4fb6572844c8281b0f765d2621cab7b64 GIT binary patch literal 20888 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 - + @@ -134,19 +134,17 @@ - + - + - - @@ -154,7 +152,7 @@ - + @@ -163,8 +161,8 @@ - - + + @@ -186,11 +184,26 @@ + + + @@ -253,6 +266,7 @@ + @@ -389,7 +403,7 @@ - + @@ -404,7 +418,7 @@ - + @@ -440,9 +454,13 @@ + + @@ -450,8 +468,10 @@ + + @@ -469,6 +489,7 @@ + @@ -518,13 +539,91 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -629,14 +728,14 @@ - - + + - + - + @@ -644,7 +743,7 @@ - + @@ -668,7 +767,7 @@ - + @@ -786,11 +885,13 @@ + + - + diff --git a/3DVisualizer-iOS/CSDTModelViewer/SceneSettingsTableViewController.swift b/3DVisualizer-iOS/CSDTModelViewer/SceneSettingsTableViewController.swift index 7f628ef..4030f8c 100644 --- a/3DVisualizer-iOS/CSDTModelViewer/SceneSettingsTableViewController.swift +++ b/3DVisualizer-iOS/CSDTModelViewer/SceneSettingsTableViewController.swift @@ -97,9 +97,9 @@ class SceneSettingsTableViewController: UITableViewController { return cell } - override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { - return sectionTitles[section] - } +// override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { +// return sectionTitles[section] +// } override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { switch indexPath.section{ @@ -151,6 +151,22 @@ class SceneSettingsTableViewController: UITableViewController { } } + override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { + let width = UIScreen.main.bounds.width + let frame = CGRect(x: 0, y: 0, width: width, height: 50.0) + let header = SettingsHeader(frame: frame) + header.addLabel(with: sectionTitles[section]) + return header + } + + override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { + return 50.0 + } + + override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { + return CGFloat.leastNormalMagnitude + } + override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { // aka the picker if indexPath.row == 1 && indexPath.section == 0 { diff --git a/3DVisualizer-iOS/CSDTModelViewer/SceneViewController.swift b/3DVisualizer-iOS/CSDTModelViewer/SceneViewController.swift index 8d14005..f95c358 100644 --- a/3DVisualizer-iOS/CSDTModelViewer/SceneViewController.swift +++ b/3DVisualizer-iOS/CSDTModelViewer/SceneViewController.swift @@ -12,11 +12,12 @@ import ModelIO import SceneKit.ModelIO import ARKit -class SceneViewController: UIViewController { +class SceneViewController: UIViewController, UIPopoverPresentationControllerDelegate { @IBOutlet weak var sceneView: SCNView! @IBOutlet weak var intensitySlider: UISlider! @IBOutlet weak var modelLoadingIndicator: UIActivityIndicatorView! @IBOutlet weak var ARButton: UIButton! + @IBOutlet weak var colorSegments: UISegmentedControl! var lightingControl: SCNNode! var wigwaam: SCNNode! var cameraNode: SCNNode! @@ -26,6 +27,7 @@ class SceneViewController: UIViewController { var modelAsset: MDLAsset!{ didSet{ setUp() } } var ARModelScale: Float = 0.07 var ARRotationAxis: String = "X" + var selectedColor: UIColor = UIColor.clear override var preferredStatusBarStyle: UIStatusBarStyle{ return .default @@ -134,8 +136,6 @@ class SceneViewController: UIViewController { lightingControl.light?.color = UIColor.orange case 2: lightingControl.light?.color = UIColor.green - case 3: - lightingControl.light?.color = UIColor.yellow default: break } @@ -189,6 +189,83 @@ class SceneViewController: UIViewController { dest.modelScale = ARModelScale dest.rotationAxis = ARRotationAxis } + if let dest = destinationViewController as? ColorPickerCollectionView{ + dest.selectedColor = lightingControl.light?.color as! UIColor + if let ppc = segue.destination.popoverPresentationController{ + ppc.delegate = self + } + } + } + + @IBAction func getColorFromPicker(with segue: UIStoryboardSegue){ + if(selectedColor != lightingControl.light?.color as! UIColor){ + colorSegments.selectedSegmentIndex = -1 // deselect the segment if different + } + lightingControl.light?.color = selectedColor + } + + func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle { + return .none + } +} + +class ColorPickerCell: UICollectionViewCell{ + @IBOutlet weak var colorView: UIView! + var color: UIColor!{ + didSet{ + colorView.backgroundColor = color + colorView.clipsToBounds = true + colorView.layer.cornerRadius = 39.0 + } + } +} + +class ColorPickerCollectionView: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource{ + let colors: [UIColor] = [UIColor.black, UIColor.blue, UIColor.brown, UIColor.cyan, UIColor.purple,UIColor.gray,UIColor.yellow, UIColor.darkGray,UIColor.magenta, UIColor().rgb(r: 250, g: 190, b:190), UIColor().rgb(r: 210, g: 245, b:60), UIColor().rgb(r: 230, g: 190, b:255), UIColor().rgb(r: 255, g: 250, b:200), UIColor().rgb(r: 255, g: 215, b:180)] + var selectedColor: UIColor! + let hapticGenerator = UIImpactFeedbackGenerator(style: .medium) + + @IBOutlet weak var colorsColelctionView: UICollectionView! { + didSet{ + colorsColelctionView.dataSource = self + colorsColelctionView.delegate = self + } + } + + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return colors.count + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "colorsCell", for: indexPath) + if let colorCell = cell as? ColorPickerCell{ + colorCell.color = colors[indexPath.row] + } + return cell + } + + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + if let cell = collectionView.cellForItem(at: indexPath), let custom = cell as? ColorPickerCell{ + selectedColor = custom.color + custom.colorView.layer.borderWidth = 5.0 + custom.colorView.layer.borderColor = customGreen().cgColor + hapticGenerator.impactOccurred() + } } + + func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) { + if let cell = collectionView.cellForItem(at: indexPath), let custom = cell as? ColorPickerCell{ + selectedColor = custom.color + custom.colorView.layer.borderWidth = 0 + custom.colorView.layer.borderColor = UIColor.clear.cgColor + } + } + + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + if let dest = segue.destination as? SceneViewController{ + dest.selectedColor = selectedColor + } + } + } diff --git a/3DVisualizer-iOS/CSDTModelViewer/SettingsHeader.swift b/3DVisualizer-iOS/CSDTModelViewer/SettingsHeader.swift new file mode 100644 index 0000000..776cacc --- /dev/null +++ b/3DVisualizer-iOS/CSDTModelViewer/SettingsHeader.swift @@ -0,0 +1,37 @@ +// +// SettingsHeader.swift +// CSDTModelViewer +// +// Created by Jing Wei Li on 2/24/18. +// Copyright © 2018 Jing Wei Li. All rights reserved. +// + +import UIKit + +class SettingsHeader: UIView { + @IBOutlet private weak var settingsLabel: UILabel! + + override init(frame: CGRect) { + super.init(frame: frame) + commonInit() + } + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + //fatalError("Not implemented") + commonInit() + } + + func addLabel(with text: String?){ + settingsLabel?.text = text?.uppercased() + settingsLabel.autoresizingMask = [.flexibleWidth, .flexibleHeight] + settingsLabel.translatesAutoresizingMaskIntoConstraints = true // enable autolayout + addSubview(settingsLabel) + } + + func commonInit(){ + Bundle.main.loadNibNamed("SettingsHeaderView", owner: self, options: nil) + self.backgroundColor = UIColor.groupTableViewBackground + } + +} diff --git a/3DVisualizer-iOS/CSDTModelViewer/SettingsHeaderView.xib b/3DVisualizer-iOS/CSDTModelViewer/SettingsHeaderView.xib new file mode 100644 index 0000000..887aa1d --- /dev/null +++ b/3DVisualizer-iOS/CSDTModelViewer/SettingsHeaderView.xib @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + Avenir-Light + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/3DVisualizer-iOS/CSDTModelViewer/Shared.swift b/3DVisualizer-iOS/CSDTModelViewer/Shared.swift index 688d6ed..3f60b4c 100644 --- a/3DVisualizer-iOS/CSDTModelViewer/Shared.swift +++ b/3DVisualizer-iOS/CSDTModelViewer/Shared.swift @@ -35,7 +35,6 @@ enum animationSettings{ case rotate } - let stringToLightType: Dictionary = ["Omnidirectional": .omni, "Ambient":.ambient, "Directional":.directional, "Probe": .probe, "Spot": .spot] let stringToBlendMode: Dictionary = @@ -137,5 +136,19 @@ func setupCollectionViewLayout(with collectionView: UICollectionView?, layout.minimumInteritemSpacing = 0 layout.minimumLineSpacing = 0 layout.headerReferenceSize = CGSize(width: UIScreen.main.bounds.width, height: 27) - collectionView!.collectionViewLayout = layout + collectionView?.collectionViewLayout = layout +} + +func isJsonEntryAProject(with name:String) -> Bool { + let filter:[String] = ["csdt","application", "blank", "test", "tutorial", "js","darwin"] + for item in filter{ + if name.lowercased().contains(item) { return false } + } + return true +} + +extension UIColor{ + func rgb(r red:CGFloat, g green:CGFloat, b blue:CGFloat) -> UIColor{ + return UIColor(red: red/255, green: green/255, blue: blue/255, alpha: 1) + } } diff --git a/3DVisualizer-iOS/CSDTModelViewer/TwoDModelCollectionViewController.swift b/3DVisualizer-iOS/CSDTModelViewer/TwoDModelCollectionViewController.swift index 82f57c1..6766bea 100644 --- a/3DVisualizer-iOS/CSDTModelViewer/TwoDModelCollectionViewController.swift +++ b/3DVisualizer-iOS/CSDTModelViewer/TwoDModelCollectionViewController.swift @@ -28,13 +28,13 @@ class TwoDModelCollectionViewCell: UICollectionViewCell{ } } } - } class TwoDModelCollectionViewController: UICollectionViewController { @IBOutlet weak var cellLoadingIndicator: UIActivityIndicatorView! //data structure representing the name, description, image link and web url var allData: [(String, String, String, String)] = [] + var isColectionViewLoaded: Bool = false override func viewDidLoad() { super.viewDidLoad() @@ -48,6 +48,7 @@ class TwoDModelCollectionViewController: UICollectionViewController { var dataEntry: (String, String, String, String) = ("Unknown","Unknown","Unknown", "https://csdt.rpi.edu") if let name = fetchedData["name"] as? String{ + if !isJsonEntryAProject(with: name) { continue } dataEntry.0 = name.capitalized } if let descrip = fetchedData["description"] as? String{ @@ -57,7 +58,11 @@ class TwoDModelCollectionViewController: UICollectionViewController { dataEntry.2 = imageURL } if let webLink = fetchedData["url"] as? String{ - dataEntry.3 = dataEntry.3 + webLink + if webLink.contains("http"){ + dataEntry.3 = webLink + } else { + dataEntry.3 += webLink + } } self.allData.append(dataEntry) } @@ -69,7 +74,9 @@ class TwoDModelCollectionViewController: UICollectionViewController { override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) + guard !isColectionViewLoaded else { return } setupCollectionViewLayout(with: collectionView, andSize: traitCollection.horizontalSizeClass) + isColectionViewLoaded = true } override func didReceiveMemoryWarning() { diff --git a/3DVisualizer-iOS/CSDTModelViewer/TwoDSpecificsViewController.swift b/3DVisualizer-iOS/CSDTModelViewer/TwoDSpecificsViewController.swift index 7ddfe0d..bdcf227 100644 --- a/3DVisualizer-iOS/CSDTModelViewer/TwoDSpecificsViewController.swift +++ b/3DVisualizer-iOS/CSDTModelViewer/TwoDSpecificsViewController.swift @@ -13,6 +13,7 @@ class TwoDSpecificsViewController: UIViewController { @IBOutlet weak var specificsImage: UIImageView! @IBOutlet weak var specificsTextView: UITextView! @IBOutlet weak var viewARButton: UIButton! + @IBOutlet weak var imageLoadingIndicator: UIActivityIndicatorView! var specificData: (String, String, String, String)! var isFullyLoaded = false @@ -25,6 +26,7 @@ class TwoDSpecificsViewController: UIViewController { viewARButton.layer.cornerRadius = 15.0 viewARButton.clipsToBounds = true + imageLoadingIndicator.startAnimating() DispatchQueue.global(qos: .userInitiated).async { [weak self] in let url = URL(string: (self?.specificData.2)!) @@ -33,6 +35,7 @@ class TwoDSpecificsViewController: UIViewController { self?.specificsImage.image = image self?.specificsImage.clipsToBounds = true self?.isFullyLoaded = true + self?.imageLoadingIndicator.stopAnimating() } } } diff --git a/README.md b/README.md index 17b09f8..3945a9e 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ This is an iOS application for visualizing 3D CAD models, created using SceneKit * Manipulate the color of the model with segmented control * Adjust light intensity with slider * Change the position of the light with a tap on the scene +* Pick the color of model with a horizontally-scrollable picker interface. * Settings Page * Change the scale factor used for the AR model * **For large models like wigwam, a very small factor such 0.002 is needed to display AR content correctly** From a54f31b58a1cc375728300744c40d6180e9184a1 Mon Sep 17 00:00:00 2001 From: Jing Wei Li Date: Sat, 3 Mar 2018 17:27:10 -0500 Subject: [PATCH 02/12] Added App Icon, Intensity/Temperature Switch & Bug Fixes --- .../3DVisualizerIconDesign-1024.png | Bin 0 -> 129864 bytes .../3DVisualizerIconDesign-20.png | Bin 0 -> 2012 bytes .../3DVisualizerIconDesign-20@2x.png | Bin 0 -> 3586 bytes .../3DVisualizerIconDesign-20@3x.png | Bin 0 -> 5205 bytes .../3DVisualizerIconDesign-29.png | Bin 0 -> 2699 bytes .../3DVisualizerIconDesign-29@2x.png | Bin 0 -> 5017 bytes .../3DVisualizerIconDesign-29@3x.png | Bin 0 -> 7489 bytes .../3DVisualizerIconDesign-40.png | Bin 0 -> 3586 bytes .../3DVisualizerIconDesign-40@2x.png | Bin 0 -> 6859 bytes .../3DVisualizerIconDesign-40@3x.png | Bin 0 -> 10418 bytes .../3DVisualizerIconDesign-60@2x.png | Bin 0 -> 10418 bytes .../3DVisualizerIconDesign-60@3x.png | Bin 0 -> 15790 bytes .../3DVisualizerIconDesign-76.png | Bin 0 -> 6534 bytes .../3DVisualizerIconDesign-76@2x.png | Bin 0 -> 13221 bytes .../3DVisualizerIconDesign-83.5@2x.png | Bin 0 -> 14652 bytes .../AppIcon.appiconset/Contents.json | 76 +++++---- .../PickFromListIcon.imageset/Contents.json | 21 +++ .../PickFromListIcon.png | Bin 0 -> 20784 bytes .../UseCustomURLIcon.imageset/Contents.json | 21 +++ .../UseCustomURLIcon.png | Bin 0 -> 22489 bytes .../Contents.json | 21 +++ .../UseDefaultModelIcon.png | Bin 0 -> 23182 bytes .../Base.lproj/Main.storyboard | 157 +++++++++++------- .../ModelPickerViewController.swift | 8 +- .../SceneSettingsTableViewController.swift | 56 ++++++- .../CSDTModelViewer/SceneViewController.swift | 30 +++- .../CSDTModelViewer/SettingsHeaderView.xib | 4 +- 3DVisualizer-iOS/CSDTModelViewer/Shared.swift | 15 +- .../TwoDModelCollectionViewController.swift | 38 +++-- .../TwoDSpecificsViewController.swift | 4 +- README.md | 7 +- 31 files changed, 325 insertions(+), 133 deletions(-) create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-1024.png create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-20.png create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-20@2x.png create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-20@3x.png create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-29.png create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-29@2x.png create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-29@3x.png create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-40.png create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-40@2x.png create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-40@3x.png create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-60@2x.png create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-60@3x.png create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-76.png create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-76@2x.png create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-83.5@2x.png create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/PickFromListIcon.imageset/Contents.json create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/PickFromListIcon.imageset/PickFromListIcon.png create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/UseCustomURLIcon.imageset/Contents.json create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/UseCustomURLIcon.imageset/UseCustomURLIcon.png create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/UseDefaultModelIcon.imageset/Contents.json create mode 100644 3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/UseDefaultModelIcon.imageset/UseDefaultModelIcon.png diff --git a/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-1024.png b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..ca165683ad53ed5277f20e05a6514ad8f1cb9dca GIT binary patch literal 129864 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 OeujD`mr5==-1$FJoGpt0 literal 0 HcmV?d00001 diff --git a/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-20.png b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-20.png new file mode 100644 index 0000000000000000000000000000000000000000..8791c1be6a71058f9a364d55b1cbda019fdf6698 GIT binary patch literal 2012 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 IM6N<$g6f{<(EtDd literal 0 HcmV?d00001 diff --git a/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-20@3x.png b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..777d5903c05e4fa05934ad41756982cad3550e04 GIT binary patch literal 5205 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 P00000NkvXXu0mjfQOr-O literal 0 HcmV?d00001 diff --git a/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-29.png b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-29.png new file mode 100644 index 0000000000000000000000000000000000000000..8793bcef3c6e840929d153591dac010d1d288649 GIT binary patch literal 2699 zcmV;63Uu{}P)Hg1+lHrgWSWcKdPn90sKGrRqvPeo9CG3uKX#J{(IASm?@+di}}l?o-=)F3E6 zwD^Ni=!>T7nL9I?X}YoAW$t|Qo$sD|?zw001?ah|SeB6#0T!CBEf+H4bBB+JJu8re zhoBb*p;u8ID_yBf0ya+zcePvJL&AGs+11_tpRKn>9TgyPA7ZoSs0)aX0r00)%XR^J z`jH<$>RKN5V(7OqK*TS4xZz{h!*f1C3ECFkK$#7nA@pGN!$;%jYv zwjAKwmYb0gKL(K8-kPtb5${A?tlI~wzMrJ6wTdBr=Y%%%EaEMQ&o}4FQ^DA)s*}Z> z!FI&AHCpoWI|RUqx?7s@$8!5^Q=anY%X@i5{QA6kNcMelpE>R6eCYFpmMsVT zrI(b06~u#xf1yS}_UGdMvD``!0~u->P=lA4?YN`hilQ z|3tHka)7T{2CGqwjZfMwx$5irQN_*|e4l)UHmiYuz74Yp1t^#>hrJ3-SOXDcC_o0^ z7T9R1gAN8V6s;5)ieI5-7aQlmJn}lUna#nz!j%5V$X|o`xX!dHWQRV27P1=rj;t2b zW$~+pTw@bIek?ZvKPDL<64`^#UNTAck#RBsB6*5DP4<%UA_FqU$I>2EH_cM;u)Q~SI+rg`Rn{L z_AC5qq~L$#SMj%U$6Cz0vP{G5Y*=%5RT^yu;}-DInZ=349rJPVM6C3K^oO)8y(fJr{l>k`ead~!ea?NsT>_Ci%bnxC;Vy6= zb6>{xYV#Ue-+LB$7`JEXmTRm^AtP)R9u{)KHsMiWGV&)32xCG~*nyU<>-!d;FP=Re z4r3qYr~6#KE>;1F`>_J_P5xC?ROxV(DIHdCO*p$HRQI@7^PwV@Pvuf+ z5K}u-6REM(K@W$srgorh0{i?O)v0c>QtHxU-hBdD(>iYJ4b2sIOVX2K8m~4gmYVA5 zh^QEb$V`rCQ-|7ZS{nuL-t>?3n=-o(6I(7vocj#GzCZEo`!3>+v;dYIfPu#&ZWzzX z2i^rZ^Mu;6+rb@?NPG+6)c5T6zxpzGe*M(x+{AON=PiJ>H#?ob-|uwRK0yDg0B4PV z0id6JRRdfL?*IS>ElET{R7efIR_jlbXB7XnrLEiqq%8=WEyx`eaV9Fu5~8SVy3IJ< zj4@tj=G5(r(=En7U|XEJ4=&=O9|rot#i?;#QHOJzw>be3Xb}a<98lVVC`vDH>CSn2 zfrg@nB|Ayq_wD;W&-p#)ch2uTkIYMk|JmeY#rrR7jd)qmy4F8&%~*w|w!5%BvcM_1 zpo&mI6R$(gq^X#bHx~uzvtG)b>_zle)t*E}Wf_bu^>8>HkjZ59lhY62#CW}f^z%Zk z9*5kte5_iy3G)k=JQsXa&`14te0Ah=T)J@o zNQlvf9UT_5!)C^3WvkKnpaE)?iYEHNI4Y0FBO>F7IYPcG6bcc&55Wtk%Y~fuT(_+|M)Ew+jx^ch5h~9o1-kP-xD;BI3dX7{_ z3Rc(;`*TrluQgl}^Y{{^*JQpc%Aa3y@nq?9VKUbVy1leoUS*r58E0-CL6kZgN`(q) zA1SoH?Zdk~H}uI=O>!yJX{9cawiERyOgL!)Hf?EsPi8 z_P9x_<3xTvl5eo@>*!af+W`-?OxCaDk;Ggc&2E)cRNNxjd{=tV(r)2PJgtltVeRe0 zL`{ltB9jjZTg)2e;&2TJuoO)yth5sa^z5aDB$9t$%)>ylX?x-b*|?Y9GaHesFAx;n zG+rTaUtYz4Q7#g(!#;8h(`bGp)dT6BOuQri0SiX@dVY!6o|p{I1@}^JZH2jo`1$fN zd~skMo;jZqO{!o70ViDDojvWSZoZD($@!udx@?`IfY=|?T}1u^7OdVpeIfGF^KqxC zMu?iD=eU~Jw0rfktl*# zloq{8=xtQcz_1I|$8m^GgC>gFMR{YV z!P6iOV&St6Sr*xbTsjSIMCohG0@K6ZUkJ*x*lBIcb=scj+}lp)UTWT)GuCWkycXG$ zrl5$!>k literal 0 HcmV?d00001 diff --git a/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-29@2x.png b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3be1df604a4e1fdf5ee99df0db34baa2013ad9ee GIT binary patch literal 5017 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 LNkvXXu0mjf`SRWg literal 0 HcmV?d00001 diff --git a/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-40.png b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-40.png new file mode 100644 index 0000000000000000000000000000000000000000..f09fc5d817ce9a1b6554ddc3cf6261deeda4ff87 GIT binary patch literal 3586 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 IM6N<$g6f{<(EtDd literal 0 HcmV?d00001 diff --git a/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-40@2x.png b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..24a0393a40a89f671d3721eda885134c2155a4f8 GIT binary patch literal 6859 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 FV1mOND+vGq literal 0 HcmV?d00001 diff --git a/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-40@3x.png b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..ee529fd229f6c701a44f1c1950aef71f968c2dbc GIT binary patch literal 10418 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 literal 0 HcmV?d00001 diff --git a/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-76@2x.png b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/AppIcon.appiconset/3DVisualizerIconDesign-76@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..76d026f19ac85318194d3abcaf06bfa0907ea883 GIT binary patch literal 13221 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 UADbRr{i!ltZGEl$V~&6P4`Q`5-T(jq literal 0 HcmV?d00001 diff --git a/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/UseCustomURLIcon.imageset/Contents.json b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/UseCustomURLIcon.imageset/Contents.json new file mode 100644 index 0000000..a46b268 --- /dev/null +++ b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/UseCustomURLIcon.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "UseCustomURLIcon.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/UseCustomURLIcon.imageset/UseCustomURLIcon.png b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/UseCustomURLIcon.imageset/UseCustomURLIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..b66df1bbe01923dc6a78645313b0cc70b107921c GIT binary patch literal 22489 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 A!~g&Q literal 0 HcmV?d00001 diff --git a/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/UseDefaultModelIcon.imageset/Contents.json b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/UseDefaultModelIcon.imageset/Contents.json new file mode 100644 index 0000000..62d348b --- /dev/null +++ b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/UseDefaultModelIcon.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "UseDefaultModelIcon.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/UseDefaultModelIcon.imageset/UseDefaultModelIcon.png b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/UseDefaultModelIcon.imageset/UseDefaultModelIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..6f3829439df8a086b7ae082903e304d0e7adc4fa GIT binary patch literal 23182 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 - + - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + @@ -110,7 +100,7 @@ - + @@ -734,7 +724,7 @@ - + @@ -799,6 +789,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -883,6 +911,9 @@ + + + @@ -891,7 +922,7 @@ - + diff --git a/3DVisualizer-iOS/CSDTModelViewer/ModelPickerViewController.swift b/3DVisualizer-iOS/CSDTModelViewer/ModelPickerViewController.swift index 4b57160..9f11ab5 100644 --- a/3DVisualizer-iOS/CSDTModelViewer/ModelPickerViewController.swift +++ b/3DVisualizer-iOS/CSDTModelViewer/ModelPickerViewController.swift @@ -11,18 +11,18 @@ import Alamofire class ModelPickerViewController: UIViewController { var customURL: String! = "None" - let defaultURL = "http://thingiverse-production-new.s3.amazonaws.com/assets/c4/4c/76/de/9b/jordanb.stl" + let defaultURL = "https://github.com/nealrs/CADViewer/raw/gh-pages/models/tsa.stl" @IBOutlet weak var customURLButton: UIButton! @IBOutlet weak var defaultURLButton: UIButton! @IBOutlet weak var listButton: UIButton! override func viewDidLoad() { super.viewDidLoad() - customURLButton.layer.cornerRadius = 15.0 + customURLButton.layer.cornerRadius = 30.0 customURLButton.clipsToBounds = true - defaultURLButton.layer.cornerRadius = 15.0 + defaultURLButton.layer.cornerRadius = 30.0 defaultURLButton.clipsToBounds = true - listButton.layer.cornerRadius = 15.0 + listButton.layer.cornerRadius = 30.0 listButton.clipsToBounds = true } diff --git a/3DVisualizer-iOS/CSDTModelViewer/SceneSettingsTableViewController.swift b/3DVisualizer-iOS/CSDTModelViewer/SceneSettingsTableViewController.swift index 4030f8c..8d12dba 100644 --- a/3DVisualizer-iOS/CSDTModelViewer/SceneSettingsTableViewController.swift +++ b/3DVisualizer-iOS/CSDTModelViewer/SceneSettingsTableViewController.swift @@ -11,9 +11,11 @@ import UIKit class SceneSettingsTableViewController: UITableViewController { let allSettings: [[String]] = [["AR Model Scale", "Rotation Axis"], ["Ambient", "Directional", "Omnidirectional", "Probe", "Spot"], + ["On: Intensity, Off: Temperature"], ["Add","Alpha", "Multiply", "Subtract", "Screen", "Replace"], ["None", "Rotate"]] - let sectionTitles: [String] = ["AR Settings","Light Settings", "Blend Mode Settings", "Animation Settings"] + let sectionTitles: [String] = ["AR Settings","Light Settings", + "Sliding Slider Changes The ... of Light","Blend Mode Settings", "Animation Settings"] let impactGenerator = UIImpactFeedbackGenerator(style: .medium) var lightSettings: String! @@ -27,6 +29,7 @@ class SceneSettingsTableViewController: UITableViewController { var animationMode: animationSettings! var ARModelScale:Float! var ARRotationAxis: String! + var IntensityOrTemp = true override func viewDidLoad() { super.viewDidLoad() @@ -55,7 +58,6 @@ class SceneSettingsTableViewController: UITableViewController { dismiss(animated: true, completion: nil) } - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { if indexPath.section == 0 && indexPath.row == 0 { let cell = tableView.dequeueReusableCell(withIdentifier: "ARScale", for: indexPath) @@ -71,7 +73,16 @@ class SceneSettingsTableViewController: UITableViewController { } return cell } - let cell = tableView.dequeueReusableCell(withIdentifier: "settingsCell", for: indexPath) + if indexPath.section == 2{ + let cell = tableView.dequeueReusableCell(withIdentifier: "switchCell", for: indexPath) + if let switchedCell = cell as? SwitchTableViewCell{ + switchedCell.switchStatus = IntensityOrTemp + switchedCell.descriptor = allSettings[indexPath.section][indexPath.row] + } + return cell + } + guard let cell = tableView.dequeueReusableCell(withIdentifier: "settingsCell", for: indexPath) as? BasicCell + else { return tableView.dequeueReusableCell(withIdentifier: "settingsCell", for: indexPath) } switch indexPath.section{ case 1: if lightSettings == allSettings[indexPath.section][indexPath.row]{ @@ -79,13 +90,13 @@ class SceneSettingsTableViewController: UITableViewController { cell.accessoryType = .checkmark } cell.textLabel?.text = allSettings[indexPath.section][indexPath.row] - case 2: + case 3: if blendSettings == allSettings[indexPath.section][indexPath.row]{ prevBlendIndex = indexPath cell.accessoryType = .checkmark } cell.textLabel?.text = allSettings[indexPath.section][indexPath.row] - case 3: + case 4: let curr = allSettings[indexPath.section][indexPath.row] if ((animationMode == animationSettings.none && curr == "None") || (animationMode == .rotate && curr == "Rotate")) { prevAnimationIndex = indexPath @@ -120,14 +131,16 @@ class SceneSettingsTableViewController: UITableViewController { case 1: tableView.cellForRow(at: prevLightIndex)?.accessoryType = .none selectedLightSetting = allSettings[indexPath.section][indexPath.row] + lightSettings = allSettings[indexPath.section][indexPath.row] prevLightIndex = indexPath tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark - case 2: + case 3: tableView.cellForRow(at: prevBlendIndex)?.accessoryType = .none selectedBlendSetting = allSettings[indexPath.section][indexPath.row] + blendSettings = allSettings[indexPath.section][indexPath.row] prevBlendIndex = indexPath tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark - case 3: + case 4: tableView.cellForRow(at: prevAnimationIndex)?.accessoryType = .none switch allSettings[indexPath.section][indexPath.row]{ case "None": @@ -136,6 +149,7 @@ class SceneSettingsTableViewController: UITableViewController { selectedAnimationSetting = .rotate default: break } + animationMode = selectedAnimationSetting prevAnimationIndex = indexPath tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark default:break @@ -148,6 +162,8 @@ class SceneSettingsTableViewController: UITableViewController { if let _ = segue.destination as? SceneViewController{ let rotationAxisPickerIndex = IndexPath(row: 1, section: 0) ARRotationAxis = (tableView.cellForRow(at: rotationAxisPickerIndex) as? SettingsPickerTableViewCell)?.selectedSetting ?? "X" + let lightIndex = IndexPath(row: 0, section: 2) + IntensityOrTemp = ((tableView.cellForRow(at: lightIndex)) as? SwitchTableViewCell)?.switchStatus ?? IntensityOrTemp } } @@ -174,5 +190,31 @@ class SceneSettingsTableViewController: UITableViewController { } return UITableViewAutomaticDimension } +} + +class SwitchTableViewCell: UITableViewCell{ + @IBOutlet weak var switchLabel: UILabel! + @IBOutlet weak var switchControl: UISwitch! + var switchStatus: Bool! + var descriptor: String!{ + didSet{ + switchLabel.text = descriptor + if switchStatus { + switchControl.isOn = true + } else { + switchControl.isOn = false + } + } + } + + @IBAction func switchTriggered(_ sender: UISwitch) { + switchStatus = sender.isOn + } +} +class BasicCell: UITableViewCell{ + override func prepareForReuse() { + self.accessoryType = .none + } } + diff --git a/3DVisualizer-iOS/CSDTModelViewer/SceneViewController.swift b/3DVisualizer-iOS/CSDTModelViewer/SceneViewController.swift index f95c358..039bec9 100644 --- a/3DVisualizer-iOS/CSDTModelViewer/SceneViewController.swift +++ b/3DVisualizer-iOS/CSDTModelViewer/SceneViewController.swift @@ -28,6 +28,7 @@ class SceneViewController: UIViewController, UIPopoverPresentationControllerDele var ARModelScale: Float = 0.07 var ARRotationAxis: String = "X" var selectedColor: UIColor = UIColor.clear + var IntensityOrTemperature = true override var preferredStatusBarStyle: UIStatusBarStyle{ return .default @@ -51,6 +52,7 @@ class SceneViewController: UIViewController, UIPopoverPresentationControllerDele modelLoadingIndicator.tintColor = UIColor.white modelLoadingIndicator.startAnimating() navigationController?.setNavigationBarHidden(true, animated: true) + colorSegments.selectedSegmentIndex = -1 DispatchQueue.global(qos: .userInitiated).async { [weak self] in if self?.customURL != "None"{ guard let url = URL(string: (self?.customURL)!) else { @@ -142,7 +144,11 @@ class SceneViewController: UIViewController, UIPopoverPresentationControllerDele } @IBAction func changeLightIntensity(_ sender: UISlider) { - lightingControl.light?.intensity = CGFloat(sender.value) + if IntensityOrTemperature { + lightingControl.light?.intensity = CGFloat(sender.value) + } else { + lightingControl.light?.temperature = CGFloat(sender.value) + } } @IBAction func changeLightLocation(_ sender: UITapGestureRecognizer) { let ctr = sender.location(in: sceneView) @@ -160,6 +166,12 @@ class SceneViewController: UIViewController, UIPopoverPresentationControllerDele animationMode = settings.selectedAnimationSetting ARModelScale = settings.ARModelScale ARRotationAxis = settings.ARRotationAxis + IntensityOrTemperature = settings.IntensityOrTemp + if IntensityOrTemperature{ + lightingControl.light?.intensity = CGFloat(intensitySlider.value) + } else { + lightingControl.light?.temperature = CGFloat(intensitySlider.value) + } } } @@ -179,6 +191,7 @@ class SceneViewController: UIViewController, UIPopoverPresentationControllerDele dest.animationMode = animationMode dest.ARModelScale = ARModelScale dest.ARRotationAxis = ARRotationAxis + dest.IntensityOrTemp = IntensityOrTemperature } if let dest = destinationViewController as? AugmentedRealityViewController{ dest.model = modelObject @@ -218,12 +231,19 @@ class ColorPickerCell: UICollectionViewCell{ colorView.layer.cornerRadius = 39.0 } } + + override func prepareForReuse() { + super.prepareForReuse() + colorView.layer.borderWidth = 0 + colorView.layer.borderColor = UIColor.clear.cgColor + } } class ColorPickerCollectionView: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource{ - let colors: [UIColor] = [UIColor.black, UIColor.blue, UIColor.brown, UIColor.cyan, UIColor.purple,UIColor.gray,UIColor.yellow, UIColor.darkGray,UIColor.magenta, UIColor().rgb(r: 250, g: 190, b:190), UIColor().rgb(r: 210, g: 245, b:60), UIColor().rgb(r: 230, g: 190, b:255), UIColor().rgb(r: 255, g: 250, b:200), UIColor().rgb(r: 255, g: 215, b:180)] + let colors: [UIColor] = [UIColor.black, UIColor.blue, UIColor.brown, UIColor.cyan, UIColor.purple,UIColor.gray,UIColor.yellow, UIColor.darkGray,UIColor.magenta, UIColor.rgb(r: 250, g: 190, b:190), UIColor.rgb(r: 210, g: 245, b:60), UIColor.rgb(r: 230, g: 190, b:255), UIColor.rgb(r: 255, g: 250, b:200), UIColor.rgb(r: 255, g: 215, b:180)] var selectedColor: UIColor! let hapticGenerator = UIImpactFeedbackGenerator(style: .medium) + var selectedIndexPath: IndexPath? @IBOutlet weak var colorsColelctionView: UICollectionView! { didSet{ @@ -240,6 +260,10 @@ class ColorPickerCollectionView: UIViewController, UICollectionViewDelegate, UIC let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "colorsCell", for: indexPath) if let colorCell = cell as? ColorPickerCell{ colorCell.color = colors[indexPath.row] + if indexPath == selectedIndexPath { + colorCell.colorView.layer.borderWidth = 5.0 + colorCell.colorView.layer.borderColor = customGreen().cgColor + } } return cell } @@ -250,12 +274,12 @@ class ColorPickerCollectionView: UIViewController, UICollectionViewDelegate, UIC custom.colorView.layer.borderWidth = 5.0 custom.colorView.layer.borderColor = customGreen().cgColor hapticGenerator.impactOccurred() + selectedIndexPath = indexPath } } func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) { if let cell = collectionView.cellForItem(at: indexPath), let custom = cell as? ColorPickerCell{ - selectedColor = custom.color custom.colorView.layer.borderWidth = 0 custom.colorView.layer.borderColor = UIColor.clear.cgColor } diff --git a/3DVisualizer-iOS/CSDTModelViewer/SettingsHeaderView.xib b/3DVisualizer-iOS/CSDTModelViewer/SettingsHeaderView.xib index 887aa1d..f6a2034 100644 --- a/3DVisualizer-iOS/CSDTModelViewer/SettingsHeaderView.xib +++ b/3DVisualizer-iOS/CSDTModelViewer/SettingsHeaderView.xib @@ -25,8 +25,8 @@ - JWtM{Oz2Qi5P-(}N7jL=`m!AqksU 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 literal 0 HcmV?d00001 diff --git a/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/refreshIcon.imageset/refreshIcon3x.png b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/refreshIcon.imageset/refreshIcon3x.png new file mode 100644 index 0000000000000000000000000000000000000000..59f77fe4ff77863011fae605e6d9922b71a1823e GIT binary patch literal 20303 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 literal 0 HcmV?d00001 diff --git a/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/verticalIcon.imageset/Contents.json b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/verticalIcon.imageset/Contents.json new file mode 100644 index 0000000..05fba52 --- /dev/null +++ b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/verticalIcon.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "verticalIcon.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "verticalIcon3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/verticalIcon.imageset/verticalIcon.png b/3DVisualizer-iOS/CSDTModelViewer/Assets.xcassets/verticalIcon.imageset/verticalIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..394ed532d2f334ddba736127dfcb2001e2ba4106 GIT binary patch literal 18531 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 literal 0 HcmV?d00001 diff --git a/3DVisualizer-iOS/CSDTModelViewer/AugmentedRealityViewController.swift b/3DVisualizer-iOS/CSDTModelViewer/AugmentedRealityViewController.swift index 35bfadb..0ef2cb1 100644 --- a/3DVisualizer-iOS/CSDTModelViewer/AugmentedRealityViewController.swift +++ b/3DVisualizer-iOS/CSDTModelViewer/AugmentedRealityViewController.swift @@ -45,7 +45,7 @@ class AugmentedRealityViewController: UIViewController, ARSCNViewDelegate { super.viewWillAppear(animated) // Create a session configuration let configuration = ARWorldTrackingConfiguration() - configuration.planeDetection = .horizontal + configuration.planeDetection = stringToPlaneDetection[ar.planeDirection]! configuration.worldAlignment = .gravityAndHeading configuration.isLightEstimationEnabled = true @@ -98,6 +98,21 @@ class AugmentedRealityViewController: UIViewController, ARSCNViewDelegate { ar.handleZoom(with: sender) } + @IBAction func resetAR(_ sender: UIButton) { + sceneView.session.pause() + sceneView.scene.rootNode.enumerateChildNodes { node, _ in + node.removeFromParentNode() + } + ar.isModelAdded = false + ar.isPlaneAdded = false + // Run the view's session + let configuration = ARWorldTrackingConfiguration() + configuration.planeDetection = stringToPlaneDetection[ar.planeDirection]! + configuration.worldAlignment = .gravityAndHeading + configuration.isLightEstimationEnabled = true + sceneView.session.run(configuration, options: [.removeExistingAnchors, .resetTracking]) + + } // MARK: - ARSCNViewDelegate func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? { @@ -105,7 +120,7 @@ class AugmentedRealityViewController: UIViewController, ARSCNViewDelegate { if let planeAnchor = anchor as? ARPlaneAnchor{ if !ar.isModelAdded && !ar.isPlaneAdded{ - DispatchQueue.main.async { overlayTextWithVisualEffect(using: "Surface Recognized", on: self.view)} + DispatchQueue.main.async { overlayTextWithVisualEffect(using: "Surface Recognized", on: self.view) } node = SCNNode() ar.handlePlaneAddition(usingAnchor: planeAnchor, andNode: node) } diff --git a/3DVisualizer-iOS/CSDTModelViewer/Base.lproj/Main.storyboard b/3DVisualizer-iOS/CSDTModelViewer/Base.lproj/Main.storyboard index a9d8a12..33765ee 100644 --- a/3DVisualizer-iOS/CSDTModelViewer/Base.lproj/Main.storyboard +++ b/3DVisualizer-iOS/CSDTModelViewer/Base.lproj/Main.storyboard @@ -8,6 +8,7 @@ + @@ -261,7 +262,6 @@ - @@ -312,6 +312,7 @@ + @@ -478,14 +479,22 @@ - - - - - + + + + + + + + + + + + + @@ -638,7 +647,7 @@ - + @@ -648,7 +657,7 @@ - + - - - + + + + + @@ -973,13 +997,15 @@ + + - + diff --git a/3DVisualizer-iOS/CSDTModelViewer/ModelClasses/ARModel.swift b/3DVisualizer-iOS/CSDTModelViewer/ModelClasses/ARModel.swift index 9810d46..d52a74f 100644 --- a/3DVisualizer-iOS/CSDTModelViewer/ModelClasses/ARModel.swift +++ b/3DVisualizer-iOS/CSDTModelViewer/ModelClasses/ARModel.swift @@ -29,7 +29,7 @@ class ARModel:NSObject{ var prevZoomScale: CGFloat = 0 var isThreeD = true var twoDImage: UIImage? - var view: UIView! + var planeDirection: String! override init() { super.init() @@ -42,7 +42,13 @@ class ARModel:NSObject{ let geometry = SCNBox(width: 300, height: 300, length: 0.01, chamferRadius: 0) geometry.firstMaterial?.diffuse.contents = twoDImage nodeToUse = SCNNode(geometry: geometry) - nodeToUse.runAction(SCNAction.rotateBy(x: CGFloat.pi/2, y: 0, z: 0, duration: 0.0001)) + switch planeDirection{ + case "Horizontal": + nodeToUse.runAction(SCNAction.rotateBy(x: CGFloat.pi/2, y: 0, z: 0, duration: 0.0001)) + case "Vertical": + nodeToUse.runAction(SCNAction.rotateBy(x: CGFloat.pi, y: 0, z: 0, duration: 0.0001)) + default: break + } } nodeToUse.scale = SCNVector3Make(modelScale, modelScale, modelScale) diff --git a/3DVisualizer-iOS/CSDTModelViewer/ModelClasses/JSONFetch.swift b/3DVisualizer-iOS/CSDTModelViewer/ModelClasses/JSONFetch.swift index 58afabd..a0e69c3 100644 --- a/3DVisualizer-iOS/CSDTModelViewer/ModelClasses/JSONFetch.swift +++ b/3DVisualizer-iOS/CSDTModelViewer/ModelClasses/JSONFetch.swift @@ -10,6 +10,9 @@ import Foundation struct JSONFetch{ + /** + + */ static func fetchFromCSDTServer(with data: Any?) -> [(String, String, String, String, String)]{ guard let jsonData = data as? [Dictionary] else { return [] } var temp: [(String, String, String, String, String)] = [] diff --git a/3DVisualizer-iOS/CSDTModelViewer/ModelClasses/Shared.swift b/3DVisualizer-iOS/CSDTModelViewer/ModelClasses/Shared.swift index f3ca4c8..251969a 100644 --- a/3DVisualizer-iOS/CSDTModelViewer/ModelClasses/Shared.swift +++ b/3DVisualizer-iOS/CSDTModelViewer/ModelClasses/Shared.swift @@ -9,6 +9,7 @@ import Foundation import UIKit import SceneKit +import ARKit func customGreen() -> UIColor { @@ -39,6 +40,8 @@ let stringToLightType: Dictionary = ["Omnidirectional": .omni, "Ambient":.ambient, "Directional":.directional, "Probe": .probe, "Spot": .spot] let stringToBlendMode: Dictionary = ["Add": .add, "Alpha": .alpha, "Multiply": .multiply, "Replace": .replace, "Screen": .screen, "Subtract": .subtract] +let stringToPlaneDetection: Dictionary = + ["Horizontal":.horizontal, "Vertical": .vertical] func determineLightType(with light:SCNLight) -> String{ switch light.type{ @@ -76,6 +79,17 @@ func determineBlendMode(with mode:SCNBlendMode) -> String{ return "Alpha" } +func determinePlaneDetectionMode(with mode: ARWorldTrackingConfiguration.PlaneDetection) -> String{ + switch mode { + case .horizontal: + return "Horizontal" + case .vertical: + return "Vertical" + default: + return "Horizontal" + } +} + func overlayTextWithVisualEffect(using text:String, on view: UIView){ let blurEffect = UIBlurEffect(style: .prominent) let blurredEffectView = UIVisualEffectView(effect: blurEffect) diff --git a/3DVisualizer-iOS/CSDTModelViewer/SceneSettingsTableViewController.swift b/3DVisualizer-iOS/CSDTModelViewer/SceneSettingsTableViewController.swift index ca61e34..9363be8 100644 --- a/3DVisualizer-iOS/CSDTModelViewer/SceneSettingsTableViewController.swift +++ b/3DVisualizer-iOS/CSDTModelViewer/SceneSettingsTableViewController.swift @@ -13,13 +13,16 @@ class SceneSettingsTableViewController: UITableViewController { ["Ambient", "Directional", "Omnidirectional", "Probe", "Spot"], ["On: Intensity, Off: Temperature"], ["Add","Alpha", "Multiply", "Subtract", "Screen", "Replace"], - ["None", "Rotate"]] + ["None", "Rotate"], + ["Horizontal", "Vertical"]] let sectionTitles: [String] = ["AR Settings","Light Settings", - "Sliding Slider Changes The ... of Light","Blend Mode Settings", "Animation Settings"] + "Sliding Slider Changes The ... of Light","Blend Mode Settings", "Animation Settings", + "AR Plane Detection Direction"] let impactGenerator = UIImpactFeedbackGenerator(style: .medium) var lightSettings: String! var blendSettings: String! + var planeSettings: String! var selectedLightSetting: String! var selectedBlendSetting: String! var selectedAnimationSetting: animationSettings! @@ -106,6 +109,12 @@ class SceneSettingsTableViewController: UITableViewController { cell.tintColor = customGreen() } cell.textLabel?.text = allSettings[indexPath.section][indexPath.row] + case 5: + if planeSettings == allSettings[indexPath.section][indexPath.row]{ + cell.accessoryType = .checkmark + cell.tintColor = customGreen() + } + cell.textLabel?.text = allSettings[indexPath.section][indexPath.row] default:break } return cell @@ -151,12 +160,22 @@ class SceneSettingsTableViewController: UITableViewController { animationMode = selectedAnimationSetting prevAnimationIndex = indexPath tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark + case 5: + planeSettings = allSettings[indexPath.section][indexPath.row] + tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark + tableView.selectRow(at: indexPath, animated: false, scrollPosition: .none) default:break } if indexPath.section != 0 {tableView.cellForRow(at: indexPath)?.tintColor = customGreen() } impactGenerator.impactOccurred() } + override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { + if indexPath.section == 5{ + tableView.cellForRow(at: indexPath)?.accessoryType = .none + } + } + // prepare for unwind segue back to scenekit view - get the value from picker override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let _ = segue.destination as? SceneViewController{ diff --git a/3DVisualizer-iOS/CSDTModelViewer/SceneViewController.swift b/3DVisualizer-iOS/CSDTModelViewer/SceneViewController.swift index 153ad77..d664494 100644 --- a/3DVisualizer-iOS/CSDTModelViewer/SceneViewController.swift +++ b/3DVisualizer-iOS/CSDTModelViewer/SceneViewController.swift @@ -31,6 +31,7 @@ class SceneViewController: UIViewController, UIPopoverPresentationControllerDele var IntensityOrTemperature = true var isFromWeb = false var blobLink: URL? = nil + var ARPlaneMode: String = "Horizontal" override var preferredStatusBarStyle: UIStatusBarStyle{ return .default @@ -220,6 +221,7 @@ class SceneViewController: UIViewController, UIPopoverPresentationControllerDele ARModelScale = settings.ARModelScale ARRotationAxis = settings.ARRotationAxis IntensityOrTemperature = settings.IntensityOrTemp + ARPlaneMode = settings.planeSettings if IntensityOrTemperature{ intensitySlider.maximumValue = 200000 lightingControl.light?.intensity = CGFloat(intensitySlider.value) @@ -247,6 +249,7 @@ class SceneViewController: UIViewController, UIPopoverPresentationControllerDele dest.ARModelScale = ARModelScale dest.ARRotationAxis = ARRotationAxis dest.IntensityOrTemp = IntensityOrTemperature + dest.planeSettings = ARPlaneMode } if let dest = destinationViewController as? AugmentedRealityViewController{ let ar = ARModel() @@ -257,6 +260,7 @@ class SceneViewController: UIViewController, UIPopoverPresentationControllerDele ar.lightColor = lightingControl.light!.color as! UIColor ar.modelScale = ARModelScale ar.rotationAxis = ARRotationAxis + ar.planeDirection = ARPlaneMode dest.ar = ar } if let dest = destinationViewController as? ColorPickerCollectionView{ diff --git a/3DVisualizer-iOS/CSDTModelViewer/TwoDSpecificsViewController.swift b/3DVisualizer-iOS/CSDTModelViewer/TwoDSpecificsViewController.swift index d85ed41..a25cd85 100644 --- a/3DVisualizer-iOS/CSDTModelViewer/TwoDSpecificsViewController.swift +++ b/3DVisualizer-iOS/CSDTModelViewer/TwoDSpecificsViewController.swift @@ -15,8 +15,20 @@ class TwoDSpecificsViewController: UIViewController, XMLParserDelegate { @IBOutlet weak var specificsTextView: UITextView! @IBOutlet weak var viewARButton: UIButton! @IBOutlet weak var imageLoadingIndicator: UIActivityIndicatorView! + @IBOutlet weak var planeDirButton: UIBarButtonItem! var specificData: (String, String, String, String, String)! var ARModelLink = "" + var isHorizontal = true { + didSet{ + if isHorizontal{ + planeDirButton.image = UIImage(named: "horizontalIcon") + overlayTextWithVisualEffect(using: "Horizontal AR Plane", on: view) + } else { + planeDirButton.image = UIImage(named: "verticalIcon") + overlayTextWithVisualEffect(using: "Vertical AR Plane", on: view) + } + } + } override func viewDidLoad() { @@ -59,6 +71,7 @@ class TwoDSpecificsViewController: UIViewController, XMLParserDelegate { guard val != "" else { return } ARModelLink = "https://csdt.rpi.edu" + (val ?? "") viewARButton.setTitle("View in 3D", for: .normal) + planeDirButton.isEnabled = false parser.abortParsing() // no need to continue parsing since we already have what we need } } @@ -76,6 +89,9 @@ class TwoDSpecificsViewController: UIViewController, XMLParserDelegate { UIApplication.shared.open(URL(string: specificData.3)!, options: [:], completionHandler: nil) } + @IBAction func changePlaneDirection(_ sender: UIBarButtonItem) { + isHorizontal = !isHorizontal + } @IBAction func modelARSegue(_ sender: UIButton) { DispatchQueue.main.async { if self.ARModelLink == "" { // 2d segue @@ -104,6 +120,7 @@ class TwoDSpecificsViewController: UIViewController, XMLParserDelegate { ar.lightColor = UIColor.white ar.modelScale = 0.002 ar.rotationAxis = "Y" + ar.planeDirection = isHorizontal ? "Horizontal" : "Vertical" dest.ar = ar } if let dest = destination as? SceneViewController{ From e2e2e0e2cac03ed59c486549136361de70a99628 Mon Sep 17 00:00:00 2001 From: Jing Wei Li Date: Tue, 24 Apr 2018 02:26:40 -0400 Subject: [PATCH 12/12] Bug Fixes on AR --- .../ModelClasses/ARModel.swift | 5 ++--- .../SceneSettingsTableViewController.swift | 20 +++++++++---------- .../CSDTModelViewer/SceneViewController.swift | 3 +++ .../ThreeDModelListTableViewController.swift | 7 ++++++- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/3DVisualizer-iOS/CSDTModelViewer/ModelClasses/ARModel.swift b/3DVisualizer-iOS/CSDTModelViewer/ModelClasses/ARModel.swift index d52a74f..f28c3f6 100644 --- a/3DVisualizer-iOS/CSDTModelViewer/ModelClasses/ARModel.swift +++ b/3DVisualizer-iOS/CSDTModelViewer/ModelClasses/ARModel.swift @@ -95,9 +95,8 @@ class ARModel:NSObject{ newPlane.position = SCNVector3Make(planeAnchor.center.x, Float(planeHeight/2), planeAnchor.center.z) lightingControl.light = SCNLight() - lightingControl.light?.type = stringToLightType[lightSettings]! - lightingControl.light?.color = UIColor.white - lightingControl.light?.intensity = 2000 + lightingControl.light?.type = .directional//stringToLightType[lightSettings]! + lightingControl.light?.intensity = 10000 lightingControl.position = SCNVector3Make(242, 100, 118) lightingControl.light?.color = lightColor isPlaneAdded = true diff --git a/3DVisualizer-iOS/CSDTModelViewer/SceneSettingsTableViewController.swift b/3DVisualizer-iOS/CSDTModelViewer/SceneSettingsTableViewController.swift index 9363be8..e998b99 100644 --- a/3DVisualizer-iOS/CSDTModelViewer/SceneSettingsTableViewController.swift +++ b/3DVisualizer-iOS/CSDTModelViewer/SceneSettingsTableViewController.swift @@ -28,6 +28,7 @@ class SceneSettingsTableViewController: UITableViewController { var selectedAnimationSetting: animationSettings! var prevLightIndex: IndexPath! var prevBlendIndex: IndexPath! + var prevPlaneIndex: IndexPath! var prevAnimationIndex: IndexPath! var animationMode: animationSettings! var ARModelScale:Float! @@ -113,6 +114,7 @@ class SceneSettingsTableViewController: UITableViewController { if planeSettings == allSettings[indexPath.section][indexPath.row]{ cell.accessoryType = .checkmark cell.tintColor = customGreen() + prevPlaneIndex = indexPath } cell.textLabel?.text = allSettings[indexPath.section][indexPath.row] default:break @@ -151,30 +153,26 @@ class SceneSettingsTableViewController: UITableViewController { case 4: tableView.cellForRow(at: prevAnimationIndex)?.accessoryType = .none switch allSettings[indexPath.section][indexPath.row]{ - case "None": - selectedAnimationSetting = animationSettings.none - case "Rotate": - selectedAnimationSetting = .rotate - default: break + case "None": + selectedAnimationSetting = animationSettings.none + case "Rotate": + selectedAnimationSetting = .rotate + default: break } animationMode = selectedAnimationSetting prevAnimationIndex = indexPath tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark case 5: + tableView.cellForRow(at: prevPlaneIndex)?.accessoryType = .none planeSettings = allSettings[indexPath.section][indexPath.row] + prevPlaneIndex = indexPath tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark - tableView.selectRow(at: indexPath, animated: false, scrollPosition: .none) default:break } if indexPath.section != 0 {tableView.cellForRow(at: indexPath)?.tintColor = customGreen() } impactGenerator.impactOccurred() } - override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { - if indexPath.section == 5{ - tableView.cellForRow(at: indexPath)?.accessoryType = .none - } - } // prepare for unwind segue back to scenekit view - get the value from picker override func prepare(for segue: UIStoryboardSegue, sender: Any?) { diff --git a/3DVisualizer-iOS/CSDTModelViewer/SceneViewController.swift b/3DVisualizer-iOS/CSDTModelViewer/SceneViewController.swift index d664494..177766c 100644 --- a/3DVisualizer-iOS/CSDTModelViewer/SceneViewController.swift +++ b/3DVisualizer-iOS/CSDTModelViewer/SceneViewController.swift @@ -120,6 +120,9 @@ class SceneViewController: UIViewController, UIPopoverPresentationControllerDele self.present(saveAlert, animated: true, completion: nil) UserDefaults.standard.set(false, forKey: "ThirdPartyLaunch") } + NotificationCenter.default.addObserver(forName: NSNotification.Name.UIApplicationWillTerminate, object: UIApplication.shared, queue: OperationQueue.main){ _ in + if let blobs = self.blobLink { try? FileManager.default.removeItem(at: blobs) } + } } fileprivate func setUp(){ diff --git a/3DVisualizer-iOS/CSDTModelViewer/ThreeDModelListTableViewController.swift b/3DVisualizer-iOS/CSDTModelViewer/ThreeDModelListTableViewController.swift index 5470d39..30fa133 100644 --- a/3DVisualizer-iOS/CSDTModelViewer/ThreeDModelListTableViewController.swift +++ b/3DVisualizer-iOS/CSDTModelViewer/ThreeDModelListTableViewController.swift @@ -36,6 +36,9 @@ class ThreeDModelListTableViewController: UITableViewController, UIViewControlle registerForPreviewing(with: self, sourceView: tableView) } NotificationCenter.default.addObserver(self, selector: #selector(handleARPeekDismiss(with:)), name: Notification.Name.viewARPeekDidDismiss, object: nil) + if self.tabBarController?.tabBar.isHidden ?? false{ + self.tabBarController?.tabBar.isHidden = false + } } @objc func handleARPeekDismiss(with notification:NSNotification){ @@ -126,6 +129,7 @@ class ThreeDModelListTableViewController: UITableViewController, UIViewControlle guard let indexPath = tableView.indexPathForRow(at: location), let cell = tableView.cellForRow(at: indexPath), let threeDVC = storyboard?.instantiateViewController(withIdentifier: "sceneViewController") as? SceneViewController else { return nil } if indexPath.section == 0 { threeDVC.customURL = models[indexPath.row].path + threeDVC.ARModelScale = 0.002 } else if indexPath.section == 1{ threeDVC.customURL = savedModels[indexPath.row].path } @@ -137,7 +141,8 @@ class ThreeDModelListTableViewController: UITableViewController, UIViewControlle func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) { viewControllerToCommit.navigationController?.setNavigationBarHidden(true, animated: false) - show(viewControllerToCommit, sender: self) + self.tabBarController?.tabBar.isHidden = true + present(viewControllerToCommit, animated: true, completion: nil) } }