Команда "_TRIM" средствами NET (язык С#)
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Команда "_TRIM" средствами NET (язык С#)

Команда "_TRIM" средствами NET (язык С#)

Ответ
Поиск в этой теме
Непрочитано 29.01.2013, 15:37 #1
Команда "_TRIM" средствами NET (язык С#)
ghost
 
Регистрация: 19.12.2011
Сообщений: 35

Доброго времени суток!

Возникла такая проблема. Есть приложение под AutoCAD, оно рисует таблицы отрезками и прямоугольниками. Появилась надобность в объединении ячеек. В автокаде есть команда _TRIM которая позволяет обрезать линии. Можно ли эту команду использовать как-то из NET для обрезки нужных перегородок в таблице? Или может есть какие-то альтернативные решения!?
Заранее спасибо!
Просмотров: 3067
 
Непрочитано 29.01.2013, 15:47
#2
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


1. "Рисовать" таблицы отрезками и прямоугольниками, в то время как таблицы присутствуют в AutoCAD в виде полноценных объектов - это извращение.
2. Если уж очень хочется программно пользоваться командной строкой, то тынц.
3. Чтобы программно изменить длину отрезка, его вовсе не обязательно обрезать - длину можно изменить путём редактирования соответствующих свойств.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 29.01.2013 в 16:11.
hwd вне форума  
 
Непрочитано 29.01.2013, 16:13
#3
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от ghost Посмотреть сообщение
Есть приложение под AutoCAD, оно рисует таблицы отрезками и прямоугольниками... Или может есть какие-то альтернативные решения!?
ИХМО самое правильное решение - не использовать это чудо приложение - как бы хорошо оно не было, а тем более не пытатся дописать к нему костыли (которых в конечном итоге станет больше чем его самого). Если приложение действительно нужное - то его и нужно переписать в нормальном виде.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 29.01.2013, 18:50
#4
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Попробуй, проверял на линиях и прямых полилиниях
секущая кромка может быть произвольного типа

Код:
[Выделить все]
        [CommandMethod("Strim", CommandFlags.UsePickSet | CommandFlags.Redraw)]

        public void testTrimCommand()
        {
            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;

            Editor ed = doc.Editor;

            Database db = doc.Database;

            Matrix3d ucs = ed.CurrentUserCoordinateSystem;

            try
            {

                PromptEntityOptions peo = new PromptEntityOptions("\nSelect cutting Curve >>");

                peo.SetRejectMessage("\nObject elected is not a Curve!");

                peo.AddAllowedClass(typeof(Curve), false);

                PromptEntityResult per = ed.GetEntity(peo);

                if (per.Status != PromptStatus.OK)

                    return;

                ObjectId id1 = per.ObjectId;

                Point3d pickpt1 = per.PickedPoint.TransformBy(ucs);

                peo = new PromptEntityOptions("\nSelect Curve to trim >> ");

                peo.SetRejectMessage("\nObject elected is not a Curve!");

                peo.AddAllowedClass(typeof(Curve), false);

                per = ed.GetEntity(peo);

                if (per.Status != PromptStatus.OK)

                    return;

                ObjectId id2 = per.ObjectId;

                using (Transaction tr  = db.TransactionManager.StartTransaction())
                {

                    Curve curve1  = tr.GetObject(  id1, OpenMode.ForRead ) as Curve;

                    Curve curve2 = tr.GetObject(id2, OpenMode.ForWrite) as Curve;

                    Point3dCollection pts = new Point3dCollection();

                    curve1.IntersectWith(curve2, Intersect.OnBothOperands, pts, 0, 0);

                    if (pts.Count != 1)
                    {
                        ed.WriteMessage("\nNumber of intersection points are more than one, exit...\n");
                    }
                    Point3d insPt = pts[0].TransformBy(ucs);

                    Line line = curve2 as Line;
                    try
                    {
                        if (line != null)
                        {
                            if (insPt.DistanceTo(line.StartPoint) > insPt.DistanceTo(line.EndPoint))
                            {
                                line.EndPoint = insPt;
                            }
                            else
                            {
                                line.StartPoint = insPt;
                            }
                        }
                        else
                        {
                            Polyline pline= curve2 as Polyline;

                            if (pline != null)
                            {
                                
                                int num = pline.NumberOfVertices;
                               
                                if (insPt.DistanceTo(pline.StartPoint) > insPt.DistanceTo(pline.EndPoint))
                                {
                                    pline.SetPointAt(num-1, new Point2d(insPt.X,insPt.Y ));
                                }
                                else
                                {
                                    pline.SetPointAt(0, new Point2d(insPt.X, insPt.Y));
                                }

                            }
                        }
                    }
                    catch (Autodesk.AutoCAD.Runtime.Exception iex)
                    {

                        ed.WriteMessage("\n{0}\n",iex.Message);

                    }
                    tr.Commit();

                }

            }

            catch (System.Exception ex)
            {

                ed.WriteMessage("\n{0}\n",ex.Message);

            }

        }
Олег (jr.) вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Команда "_TRIM" средствами NET (язык С#)



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Печать из модели по выбору объекта zenon Программирование 192 04.05.2017 09:41
Преобразование полей в текст YuraVel AutoCAD 17 14.04.2015 14:30
ACAD-2002. Глюк начальной загрузки ЛИСП? ===AAA=== LISP 27 31.08.2005 07:58