CADability dotNET

This is the older manual approach to get started with CADability. Consider to use the newer and much simpler start with "How to build your first application using CADability".

First Steps of Using CADability

  • To create your first application unsing CADability, you start with an empty Windows.Forms application and copy the following lines to your application. You also can start with the provided "myCADapp" application, which contains the following source code.

    There should be no problem to convert this sourcecode to any other .NET language.

  • You can also modify the menu or provide your own menu. If you only need a display and no interactions, you wont have to use the userinterface objects (e.g. toolbars, controlcenter) at all.

Example

CopyC#
/// Code


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using CADability;
using CADability.UserInterface;

namespace myCADapp
{
    /// <summary xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">
    /// This is a simple System.Windows.Forms.Form.
    /// </summary>
    public partial class MainForm : Form
    {
        private SingleDocumentFrame sdiFrame; // the hub for CADability
        private ControlCenter controlCenter; // the ControlCenter
        private Splitter propertySplitter; // a simple splitter to resize the ControlCenter
        private ToolBarDockContainer topToolBars; // a container for the top toolbars
        private ToolBarDockContainer leftToolBars; // a container for the left toolbars
        private MoveableToolBar[] allToolbars; // all toolbars in an array

        public MainForm()
        {
            InitializeComponent(); // required and generated by the designer but almost empty

            // 1. create the hub that pulls all the strings together
            sdiFrame = new SingleDocumentFrame();
            // 2. create the necessary controls
            controlCenter = new ControlCenter(sdiFrame);
            propertySplitter = new Splitter();
            topToolBars = new ToolBarDockContainer(sdiFrame);
            leftToolBars = new ToolBarDockContainer(sdiFrame);

            // place the controls in this form
            SuspendLayout();
            Controls.AddRange(new Control[] {sdiFrame.DisplayArea,leftToolBars,propertySplitter,
                controlCenter,topToolBars});

            this.Text = "myCADapp";
            // set the DockStyles. the order is important.
            controlCenter.Dock = System.Windows.Forms.DockStyle.Right;
            propertySplitter.Dock = System.Windows.Forms.DockStyle.Right;
            topToolBars.Dock = System.Windows.Forms.DockStyle.Top;
            leftToolBars.Dock = System.Windows.Forms.DockStyle.Left;
            sdiFrame.DisplayArea.Dock = System.Windows.Forms.DockStyle.Fill;

            this.ResumeLayout(false);

            // load some standard toolbars
            MoveableToolBar ToolBarFile = MoveableToolBar.CreateStandardToolBar("File", sdiFrame);
            MoveableToolBar ToolBarEdit = MoveableToolBar.CreateStandardToolBar("Edit", sdiFrame);
            MoveableToolBar ToolBarZoom = MoveableToolBar.CreateStandardToolBar("Zoom", sdiFrame);
            MoveableToolBar ToolBarConstruct = MoveableToolBar.CreateStandardToolBar("Construct", sdiFrame);
            MoveableToolBar ToolBarSnap = MoveableToolBar.CreateStandardToolBar("Snap", sdiFrame);
            // create your own toolbar as an example
            MoveableToolBar MyToolBar = MoveableToolBar.CreateCustomToolBar("MyToolBar", sdiFrame,
                new string[] {"MenuId.Object.Move","MenuId.Object.Rotate","MenuId.Object.Scale",
                    "MenuId.Object.Reflect","MenuId.Object.Snap"});
            // coollect all toolbars in an array
            allToolbars = new MoveableToolBar[] { ToolBarFile, ToolBarEdit, ToolBarZoom, ToolBarConstruct, ToolBarSnap, MyToolBar };
            // try to either restore the toolbar positions from the last session or to position them initially
            if (!sdiFrame.RestoreToolbarPosition(new ToolBarDockContainer[] { topToolBars, leftToolBars }, allToolbars))
            {
                topToolBars.AddToolBar(ToolBarFile);
                topToolBars.AddToolBar(ToolBarEdit);
                topToolBars.AddToolBar(ToolBarZoom);
                topToolBars.AddToolBar(ToolBarConstruct);
                topToolBars.AddToolBar(ToolBarSnap);
                topToolBars.AddToolBar(MyToolBar);
            }

            // load the standard menu and set it a s the main menu of this form
            this.Menu = MenuResource.LoadMenu("SDI Menu", sdiFrame);

            // display the context sensitive help control in the control center
            controlCenter.ShowHelpControl = true; 

            // register an event to handle menu commands
            sdiFrame.ProcessCommandEvent += new ProcessCommandDelegate(OnProcessCommand);
            // register an event to handle the display of the filename in the title bar
            sdiFrame.FileNameChangedEvent += new SingleDocumentFrame.FileNameChangedDelegate(OnFileNameChanged);

            // start with an empty project
            (sdiFrame as ICommandHandler).OnCommand("MenuId.File.New"); 

        }

        protected override void Dispose(bool disposing)
        {
            // save the toolbar position before this form is closed
            sdiFrame.SaveToolbarPosition(new ToolBarDockContainer[] { topToolBars, leftToolBars }, allToolbars);
            base.Dispose(disposing);
        }
        private void OnFileNameChanged(string NewProjectName)
        {
            // displays the file name of the current project in the title bar.
            this.Text = NewProjectName + " (myCADapp)";
        }
        private void OnProcessCommand(string MenuId, ref bool Processed)
        {
            // handle the menu "App.Exit", the only standerd menu item that isnt handle by CADability itself
            if (MenuId == "MenuId.App.Exit")
            {
                sdiFrame.SaveModifiedProject(this.Text);
                Application.Exit();
                Processed = true;
            }
        }
        protected override void OnClosing(CancelEventArgs e)
        {
            // ask the sdi frame to prompt the user for with file save dialog if the modifed flag is set
            sdiFrame.SaveModifiedProject(this.Text);
            base.OnClosing(e);
        }
    }
}