Ejemplo n.º 1
0
        public void EndOperation(UserOperation operation)
        {
            //stop operation

            var usedObjects = new List <CADObject>(operation.OwnerDocument.ObjectsDictionary.FinishAccessList());

            usedObjects.AddRange(operation.TemporaryObjectsDictionary.Values);
            TextBlock state = new TextBlock();

            foreach (var o in usedObjects)
            {
                var objBlock = state.AddChild(o.GetType().Name);
                o.Save(objBlock);
                bool existInNew = operation.OwnerDocument.ObjectsDictionary.ContainsValue(o);
                bool existInOld = _oldObjects.Contains(o);

                if (existInNew && existInOld)
                {
                    objBlock.SetAttribute("Status", ElemenetLifeStatus.Existed.ToString("G"));
                }
                else if (existInNew)
                {
                    objBlock.SetAttribute("Status", ElemenetLifeStatus.Created.ToString("G"));
                }
                else
                {
                    objBlock.SetAttribute("Status", ElemenetLifeStatus.Deleted.ToString("G"));
                }
            }

            operation.OwnerDocument.History.AddUndo(new HistoryControl.HistoryRecord(state, RecordType.OperationSuccededType));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Функция создания нового объекта в документе
        /// </summary>
        /// <param name="elemType">Тип элемента из перечисления <see cref="ElementTypes"/></param>
        /// <param name="id">ИД объекта, если загружается ранее созданный объект. Для выделения нового ИД надо ставить значение -1.</param>
        /// <returns>Возвращает созданный объект или null в случае неудачи</returns>
        internal CADObject CreateCADObject(ElementTypes elemType, int id, UserOperation operation)
        {
            CADObject o = null;

            switch (elemType)
            {
            case ElementTypes.Line:
                o = new Line();
                break;

            case ElementTypes.Arc:
                o = new Arc();
                break;

            case ElementTypes.Circle:
                o = new Circle();
                break;

            //case ElementTypes.Point:
            //    o = new Point();
            //    break;
            default:
                Log.Error("No objects!");
                break;
            }
            if (o != null)
            {
                o.LockOperation = operation;
                o.ElementType   = elemType;
                if (id == -1)
                {
                    o.UID = ++_elemIdCounter;
                }
                else
                {
                    o.UID = id;
                }
                //else
                //    TemporaryObjectsDictionary[o.UID] = o;
                o.Parent = this;
                if (operation != null)
                {
                    operation.TemporaryObjectsDictionary[o.UID] = o;
                }
                else
                {
                    PostCreateCADObject(o);
                }
            }
            return(o);
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Функция создания нового объекта в документе
 /// </summary>
 /// <param name="elemType">Тип элемента из перечисления <see cref="ElementTypes"/></param>
 /// <returns>Возвращает созданный объект или null в случае неудачи</returns>
 public CADObject CreateCADObject(ElementTypes elemType, UserOperation operation)
 {
     return(CreateCADObject(elemType, -1, operation));
 }