public override DataSetTrackableBehaviour CreateTrackable(TrackableSource trackableSource, GameObject gameObject) { TrackableSourceImpl impl = (TrackableSourceImpl)trackableSource; int capacity = 0x80; StringBuilder trackableName = new StringBuilder(capacity); IntPtr trackableData = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(SimpleTargetData))); int num2 = QCARWrapper.Instance.DataSetCreateTrackable(this.mDataSetPtr, impl.TrackableSourcePtr, trackableName, capacity, trackableData); SimpleTargetData data = (SimpleTargetData)Marshal.PtrToStructure(trackableData, typeof(SimpleTargetData)); Marshal.FreeHGlobal(trackableData); if (num2 == TypeMapping.GetTypeID(typeof(ImageTarget))) { ImageTarget trackable = new ImageTargetImpl(trackableName.ToString(), data.id, ImageTargetType.USER_DEFINED, this); this.mTrackablesDict[data.id] = trackable; Debug.Log(string.Format("Trackable created: {0}, {1}", num2, trackableName)); StateManagerImpl stateManager = (StateManagerImpl)TrackerManager.Instance.GetStateManager(); return(stateManager.FindOrCreateImageTargetBehaviourForTrackable(trackable, gameObject, this)); } Debug.LogError("DataSet.CreateTrackable returned unknown or incompatible trackable type!"); return(null); }
// Adds a single trackable from a source and a given gameobject to this dataset public override DataSetTrackableBehaviour CreateTrackable(TrackableSource trackableSource, GameObject gameObject) { // create a trackable in native from the trackable source handle: TrackableSourceImpl trackableSourceImpl = (TrackableSourceImpl)trackableSource; // QCAR support names up to 64 characters in length, but here we allocate // a slightly larger buffer: int nameLength = 128; System.Text.StringBuilder trackableName = new System.Text.StringBuilder(nameLength); IntPtr targetDataPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(SimpleTargetData))); TrackableType trackableType = (TrackableType)QCARWrapper.Instance.DataSetCreateTrackable(mDataSetPtr, trackableSourceImpl.TrackableSourcePtr, trackableName, nameLength, targetDataPtr); SimpleTargetData targetData = (SimpleTargetData) Marshal.PtrToStructure(targetDataPtr, typeof(SimpleTargetData)); Marshal.FreeHGlobal(targetDataPtr); // currently only supported for ImageTargets: if (trackableType == TrackableType.IMAGE_TARGET) { ImageTarget newImageTarget = new ImageTargetImpl(trackableName.ToString(), targetData.id, ImageTargetType.USER_DEFINED, this); // Add newly created Image Target to dictionary. mTrackablesDict[targetData.id] = newImageTarget; Debug.Log(string.Format("Trackable created: {0}, {1}", trackableType, trackableName)); // Find or create ImageTargetBehaviour for this ImageTarget: StateManagerImpl stateManager = (StateManagerImpl)TrackerManager.Instance.GetStateManager(); return(stateManager.FindOrCreateImageTargetBehaviourForTrackable(newImageTarget, gameObject, this)); } else { Debug.LogError("DataSet.CreateTrackable returned unknown or incompatible trackable type!"); return(null); } }