public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, IServiceProvider provider, object value) { editorService = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService; _rendererSetup = value as RendererSetup; _layer = context.Instance as V3DLayer; _listBox.Items.Clear(); if (_rendererSetup == null || _layer == null) return value; bool bHasNodeClass = !string.IsNullOrEmpty(_rendererSetup._rendererNodeClass) && _rendererSetup._rendererNodeClass != EditorManager.RendererNodeManager.DefaultRendererNodeClass; _clipboardVersion = EditorManager.Clipboard.DataObject as RendererSetup; if (bHasNodeClass) ITEM_COPY = _listBox.Items.Add("Copy"); if (_clipboardVersion != null) ITEM_PASTE = _listBox.Items.Add("Paste"); ITEM_LOAD = _listBox.Items.Add("Load from external file"); if (bHasNodeClass) { ITEM_SAVE = _listBox.Items.Add("Save to external file"); ITEM_EXPORT = _listBox.Items.Add("Export to engine file"); } editorService.DropDownControl(_listBox); return _rendererSetup; // might have changed }
/// <summary> /// Overridden NewScene function /// </summary> /// <param name="relFileName"></param> /// <param name="bPlainEmpty"></param> /// <returns></returns> public override bool NewScene(string relFileName, bool bPlainEmpty) { object[] parameters = { this, relFileName }; EditorScene editorScene = EditorManager.SceneFactory.CreateInstance(parameters) as EditorScene; if (editorScene == null) { EditorManager.ShowMessageBox("Scene must be derived from class 'EditorScene'", "Failed to create scene", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } EditorManager.ActiveView.SetCameraPosition(editorScene.Settings.CameraPosition); EditorManager.ActiveView.SetCameraRotation(editorScene.Settings.CameraAngles); _scene = editorScene; // save the scene (empty) such that all layers can be safely saved editorScene.SaveAs(relFileName); if (!bPlainEmpty) { V3DLayer MainLayer = new V3DLayer("Main layer"); editorScene.AddLayer(MainLayer, true, false); // mark the layer as dirty, to ensure that it will be saved now MainLayer.Dirty = true; } // this will fire an event that is often used to set things up, so only now the scene will be set up completely Scene = editorScene; // set it afterwards so the OnSceneChanged callback has the correct name // save the scene again, now with all layers, because NOW all scene elements will be really setup editorScene.SaveAs(relFileName); return true; }