private VirtualButton CreateNewVirtualButtonInNative(string name, RectangleData rectangleData) { if (this.ImageTargetType != ImageTargetType.PREDEFINED) { Debug.LogError("DataSet.RegisterVirtualButton: virtual button '" + name + "' cannot be registered for a user defined target."); return(null); } IntPtr intPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(RectangleData))); Marshal.StructureToPtr(rectangleData, intPtr, false); bool arg_63_0 = VuforiaWrapper.Instance.ImageTargetCreateVirtualButton(this.mDataSet.DataSetPtr, base.Name, name, intPtr) != 0; VirtualButton virtualButton = null; if (arg_63_0) { int num = VuforiaWrapper.Instance.VirtualButtonGetId(this.mDataSet.DataSetPtr, base.Name, name); if (!this.mVirtualButtons.ContainsKey(num)) { virtualButton = new VirtualButtonImpl(name, num, rectangleData, this, this.mDataSet); this.mVirtualButtons.Add(num, virtualButton); } else { virtualButton = this.mVirtualButtons[num]; } } return(virtualButton); }
private void CreateVirtualButtonsFromNative() { int num = VuforiaWrapper.Instance.ImageTargetGetNumVirtualButtons(this.mDataSet.DataSetPtr, base.Name); if (num > 0) { IntPtr intPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(VuforiaManagerImpl.VirtualButtonData)) * num); IntPtr intPtr2 = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(RectangleData)) * num); VuforiaWrapper.Instance.ImageTargetGetVirtualButtons(intPtr, intPtr2, num, this.mDataSet.DataSetPtr, base.Name); for (int i = 0; i < num; i++) { VuforiaManagerImpl.VirtualButtonData virtualButtonData = (VuforiaManagerImpl.VirtualButtonData)Marshal.PtrToStructure(new IntPtr(intPtr.ToInt64() + (long)(i * Marshal.SizeOf(typeof(VuforiaManagerImpl.VirtualButtonData)))), typeof(VuforiaManagerImpl.VirtualButtonData)); if (!this.mVirtualButtons.ContainsKey(virtualButtonData.id)) { RectangleData area = (RectangleData)Marshal.PtrToStructure(new IntPtr(intPtr2.ToInt64() + (long)(i * Marshal.SizeOf(typeof(RectangleData)))), typeof(RectangleData)); int num2 = 128; StringBuilder stringBuilder = new StringBuilder(num2); if (VuforiaWrapper.Instance.ImageTargetGetVirtualButtonName(this.mDataSet.DataSetPtr, base.Name, i, stringBuilder, num2) == 0) { Debug.LogError("Failed to get virtual button name."); } else { VirtualButton value = new VirtualButtonImpl(stringBuilder.ToString(), virtualButtonData.id, area, this, this.mDataSet); this.mVirtualButtons.Add(virtualButtonData.id, value); } } } Marshal.FreeHGlobal(intPtr); Marshal.FreeHGlobal(intPtr2); } }
public VirtualButtonImpl(string name, int id, RectangleData area, ImageTarget imageTarget, DataSet dataSet) { this.mName = name; this.mID = id; this.mArea = area; this.mIsEnabled = true; this.mParentImageTarget = imageTarget; this.mParentDataSet = (DataSetImpl)dataSet; }
public bool UpdateAreaRectangle() { RectangleData area = default(RectangleData); area.leftTopX = this.mLeftTop.x; area.leftTopY = this.mLeftTop.y; area.rightBottomX = this.mRightBottom.x; area.rightBottomY = this.mRightBottom.y; return(this.mVirtualButton != null && this.mVirtualButton.SetArea(area)); }
public VirtualButton CreateVirtualButton(string name, RectangleData area) { VirtualButton expr_08 = this.CreateNewVirtualButtonInNative(name, area); if (expr_08 == null) { Debug.LogError("Could not create Virtual Button."); return(expr_08); } Debug.Log("Created Virtual Button successfully."); return(expr_08); }
public override bool SetArea(RectangleData area) { IntPtr intPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(RectangleData))); Marshal.StructureToPtr(area, intPtr, false); bool arg_4F_0 = VuforiaWrapper.Instance.VirtualButtonSetAreaRectangle(this.mParentDataSet.DataSetPtr, this.mParentImageTarget.Name, this.Name, intPtr) != 0; Marshal.FreeHGlobal(intPtr); if (!arg_4F_0) { Debug.LogError("Virtual Button area rectangle could not be set."); return(false); } return(true); }
internal void AssociateExistingVirtualButtonBehaviour(VirtualButtonAbstractBehaviour virtualButtonBehaviour) { VirtualButton virtualButton = this.mImageTarget.GetVirtualButtonByName(virtualButtonBehaviour.VirtualButtonName); if (virtualButton == null) { Vector2 vector; Vector2 vector2; virtualButtonBehaviour.CalculateButtonArea(out vector, out vector2); RectangleData area = new RectangleData { leftTopX = vector.x, leftTopY = vector.y, rightBottomX = vector2.x, rightBottomY = vector2.y }; virtualButton = this.mImageTarget.CreateVirtualButton(virtualButtonBehaviour.VirtualButtonName, area); if (virtualButton != null) { Debug.Log("Successfully created virtual button " + virtualButtonBehaviour.VirtualButtonName + " at startup"); virtualButtonBehaviour.UnregisterOnDestroy = true; } else { Debug.LogError("Failed to create virtual button " + virtualButtonBehaviour.VirtualButtonName + " at startup"); } } if (virtualButton != null && !this.mVirtualButtonBehaviours.ContainsKey(virtualButton.ID)) { virtualButtonBehaviour.InitializeVirtualButton(virtualButton); this.mVirtualButtonBehaviours.Add(virtualButton.ID, virtualButtonBehaviour); Debug.Log(string.Concat(new object[] { "Found VirtualButton named ", virtualButtonBehaviour.VirtualButton.Name, " with id ", virtualButtonBehaviour.VirtualButton.ID })); virtualButtonBehaviour.UpdatePose(); if (!virtualButtonBehaviour.UpdateAreaRectangle() || !virtualButtonBehaviour.UpdateSensitivity()) { Debug.LogError("Failed to update virtual button " + virtualButtonBehaviour.VirtualButton.Name + " at startup"); return; } Debug.Log("Updated virtual button " + virtualButtonBehaviour.VirtualButton.Name + " at startup"); } }
private bool CreateNewVirtualButtonFromBehaviour(VirtualButtonAbstractBehaviour newVBB) { Vector2 vector; Vector2 vector2; newVBB.CalculateButtonArea(out vector, out vector2); RectangleData area = new RectangleData { leftTopX = vector.x, leftTopY = vector.y, rightBottomX = vector2.x, rightBottomY = vector2.y }; VirtualButton virtualButton = this.mImageTarget.CreateVirtualButton(newVBB.VirtualButtonName, area); if (virtualButton == null) { UnityEngine.Object.Destroy(newVBB.gameObject); return(false); } newVBB.InitializeVirtualButton(virtualButton); this.mVirtualButtonBehaviours.Add(virtualButton.ID, newVBB); return(true); }
private void UpdateSurfaces(VuforiaManagerImpl.SmartTerrainRevisionData[] smartTerrainRevisions, VuforiaManagerImpl.SurfaceData[] updatedSurfaceData) { List <Surface> list = new List <Surface>(); List <Surface> list2 = new List <Surface>(); List <Surface> list3 = new List <Surface>(); for (int i = 0; i < updatedSurfaceData.Length; i++) { VuforiaManagerImpl.SurfaceData surfaceData = updatedSurfaceData[i]; bool flag = false; SurfaceImpl surfaceImpl; bool flag2; if (!this.mSurfaces.ContainsKey(surfaceData.id)) { surfaceImpl = new SurfaceImpl(surfaceData.id, this.FindSmartTerrainTrackable(surfaceData.parentID)); this.mSurfaces.Add(surfaceData.id, surfaceImpl); list.Add(surfaceImpl); flag2 = true; flag = true; } else { surfaceImpl = (SurfaceImpl)this.mSurfaces[surfaceData.id]; flag2 = (surfaceData.revision != surfaceImpl.MeshRevision); } if (flag2) { Mesh mesh = MeshUtils.UpdateMesh(surfaceData.meshData, surfaceImpl.GetMesh(), false, true); if (flag) { surfaceImpl.SetLocalPose(surfaceData.localPose); } if (mesh != null) { Mesh navMesh = null; if (this.mReconstruction.IsNavMeshUpdating()) { navMesh = MeshUtils.UpdateMesh(surfaceData.navMeshData, surfaceImpl.GetNavMesh(), true, true); } int[] meshBoundaries = ReconstructionAbstractBehaviour.ReadMeshBoundaries(surfaceData.numBoundaryIndices, surfaceData.meshBoundaryArray); surfaceImpl.SetMesh(surfaceData.revision, mesh, navMesh, meshBoundaries); } RectangleData boundingBox = surfaceData.boundingBox; Rect boundingBox2 = new Rect(boundingBox.leftTopX, boundingBox.leftTopY, boundingBox.rightBottomX - boundingBox.leftTopX, boundingBox.rightBottomY - boundingBox.leftTopY); surfaceImpl.SetBoundingBox(boundingBox2); list2.Add(surfaceImpl); } else { Debug.LogError("Inconsistency: received updated Surface, but mesh revision is unchanged!"); } } int[] array = new int[this.mSurfaces.Count]; this.mSurfaces.Keys.CopyTo(array, 0); int[] array2 = array; for (int i = 0; i < array2.Length; i++) { int num = array2[i]; bool flag3 = false; for (int j = 0; j < smartTerrainRevisions.Length; j++) { if (smartTerrainRevisions[j].id == num) { flag3 = true; } } if (!flag3) { list3.Add(this.mSurfaces[num]); ((SurfaceImpl)this.mSurfaces[num]).DestroyMesh(); this.mSurfaces.Remove(num); } } this.UnregisterDeletedSurfaces(list3); foreach (Surface current in list3) { if (current.Parent != null) { ((SmartTerrainTrackableImpl)current.Parent).RemoveChild(current); } } foreach (Surface current2 in list) { if (current2.Parent != null) { ((SmartTerrainTrackableImpl)current2.Parent).AddChild(current2); } } this.NotifySurfaceEventHandlers(list, list2, list3); }
public VirtualButton CreateVirtualButton(string name, RectangleData area) { Debug.LogError("Virtual buttons are currently not supported for cloud reco targets."); return(null); }
public abstract bool SetArea(RectangleData area);