Beispiel #1
0
        /// <summary>
        /// Сделано временно для быстрого ввода данных о диаметрах с чертежей и вывод их в упорядоченную таблицу
        /// Здесь же добавлен объем бетона
        /// </summary>
        public static void MakeRebarString()
        {
            string heading  = "БЕТОН\tД40\tД36\tД32\tД28\tД25\tД20\tД16\tД12\tД10\tД8";
            var    dict     = new Dictionary <string, string>();
            var    splitted = heading.Split('\t');

            foreach (var s in splitted)
            {
                dict.Add(s, "");
            }

            var sset = Input.Objects("Выберите сначала объем бетона затем текстовые элементы ведомости расхода стали"); if (Input.StatusBad)
            {
                return;
            }
            string output = "";

            List <Entity> entities;
            var           strings  = new List <string>();
            string        concrete = "";

            using (var th = new TransactionHelper())
            {
                entities = th.ReadObjects(sset);
                concrete = Utilities.GetText(entities[0]);
                entities = entities.Skip(1).ToList();

                entities.Sort(Comparer <Entity> .Create(MyCompare));

                foreach (var ent in entities)
                {
                    string s = Utilities.GetText(ent);
                    if (String.IsNullOrEmpty(s))
                    {
                        continue;
                    }

                    strings.Add(s);
                }
            }
            for (int i = 1; i < strings.Count; i += 2)
            {
                var pair = DiameterPair(new Tuple <string, string>(strings[i - 1], strings[i]));
                dict[pair.Item1] = pair.Item2;
            }

            var match_number = new Regex(@"\d+\.\d+м");

            concrete      = match_number.Match(concrete.Replace(",", ".")).Value.Replace("м", "");
            dict["БЕТОН"] = concrete.Replace(".", ",");

            output = dict.Values.Aggregate((a, b) => a + '\t' + b);

            Clipboard.SetText(output);
        }
Beispiel #2
0
        public override void Execute()
        {
            base.Execute();
            Tweet("\nРежим ввода текстов: " + mode.ToString() + string.Format("\nВвод текста вида {0}<текст>{1}", str_before, str_after));

            var sset = Input.Objects("Выберите текстовые объекты или мультивыноски или ", keywords, new SelectionTextInputEventHandler(KeywordInput));

            if (Input.StatusBad)
            {
                return;
            }

            SelectionSet copyTo;

            if (mode == TextEditMode.Copy)
            {
                copyTo = Input.Objects("Выберите объекты, в которые будет произведено копирование текста"); if (Input.StatusBad)
                {
                    return;
                }


                using (TransactionHelper th = new TransactionHelper())
                {
                    selection         = th.ReadObjects(sset);
                    contentCollection = selection.Where(CheckIsItText).Select(e => ReadText(e)).ToArray();
                    if (contentCollection.Length == 0)
                    {
                        Tweet("Нет текстовых объектов в выборе.");
                        return;
                    }

                    foreach (var s in contentCollection)
                    {
                        Tweet(s);
                    }
                }
                var temp = sset;
                sset   = copyTo;
                copyTo = temp;
                //первый набор выбора станет источником данных. Второй набор выбора пойдет дальше как обрабатываемый
            }


            using (TransactionHelper th = new TransactionHelper())
            {
                selection = th.EditObjects(sset);


                if (mode == TextEditMode.Same)
                {
                    string txt = Input.Text("Ведите текст, одинаковый для всех объектов");
                    content = string.Concat(str_before, txt, str_after);
                }

                //for (int i = 0; i < selection.Count; i++)
                int i = 0, contentNumber = 0;

                //offtop
                //честно говоря, даже неожиданно просто это выглядит!
                //изначально было так (var o in selection.Where(o=>CheckIsItText(o)))
                //спасибо шд за подсказку

                foreach (var o in selection.Where(CheckIsItText))
                {
                    switch (mode)
                    {
                    case TextEditMode.Different:
                        string txt = Input.Text("Введите текст номер " + (i + 1));
                        content = string.Concat(str_before, txt, str_after);
                        break;

                    case TextEditMode.Replace:
                        string source = UT.GetText(o);
                        replace = FindNumber(source);
                        content = Input.Text("Введите текст номер " + (i + 1));
                        content = source.Replace(replace, content);
                        break;

                    case TextEditMode.XL:
                        content = ReadClipboard(UT.GetText(o));
                        if (content == "")
                        {
                            continue;
                        }
                        break;

                    case TextEditMode.Copy:
                        if (contentNumber >= contentCollection.Length)
                        {
                            contentNumber = 0;
                        }
                        content = contentCollection[contentNumber];
                        contentNumber++;

                        break;
                    }

                    ReplaceText(o);
                    i++;
                }

                var           blocks_with_attributes = selection.OfType <BlockReference>().Where(b => b.AttributeCollection.Count > 0).ToList();
                List <string> attribute_names = new List <string>();
                foreach (var b in blocks_with_attributes)
                {
                    var ac = b.AttributeCollection;
                    foreach (ObjectId attr_o in ac)
                    {
                        var attr = th.EditObject(attr_o) as AttributeReference;
                        if (!(attribute_names.Contains(attr.Tag)))
                        {
                            attribute_names.Add(attr.Tag);
                            Tweet("Добавили тэг " + attr.Tag);
                        }
                    }
                }
            }
        }