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);
    }
Пример #2
0
    // 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);
        }
    }