dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Новые команды для работы с полилинией

Новые команды для работы с полилинией

Версия для печати
 
Ответ
Опции темы Поиск в этой теме
Непрочитано 14.09.2006, 13:30 3 |
Новые команды для работы с полилинией
VVA
 
Инженер LISP
 
Минск
Регистрация: 11.05.2005
Сообщений: 6,699
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™

VVA вне форума Вставить имя

Данный набор программ является коллективным продуктом участников форумов autocad.ru и dwg.ru с моими доработками.
Захотелось собрать все программы для работы с полилиниями воедино и оформить как полагается.

=========== Доступные команды PLTOOLS=================
Редакция 17.06.2014
PL-JOIN -Объединение выбранных полилиний
PL-VFI -вставка вершин в выбранной полилинии в местах пересечения с
указанными полилиниями, линиями, дугами
PL-JOIN3D -Объединение 3D полилиний
PL-A2L -Замена линейного сегмента в полилинии дуговым сегментом.
PL-L2A -Замена дугового сегмента в полилинии линейным сегментом.
PL-DIV -Разбивает выбранный сегмент полилинии на указанное количество
сегментов или через указанное расстояние
PL-DIVAll -Разбивает все сегменты полилинии на указанное количество
сегментов или через указанное расстояние
PL-VxAdd -Добавляет новую вершину к полилинии
ENTREVS -Реверс объекта
ENTREV -Реверс объектов (множественный выбор)
PL-CW -Реверс выбранных полилиний по часовой стрелке
PL-CCW -Реверс выбранных полилиний против часовой стрелки
PL-VxRdc -Удаление вершин полилиний, которые лежат на одной прямой
PL-VxDel -Удаление выбранной вершины
pl-VxOpt -Удаление совпадающих вершин из полилинии
PL-NoArc -Аппроксимация дуговых сегментов полилинии
PL-Clone -Построение полилинии путем копирования ее сегментов
PL-VxMove -Перемещение вершин полилинии
PL-Vx1 -Изменение начала полилинии
ConvTo2d -Преобразование линейных объектов в 2D полилинии
ConvTo3d -Преобразование линейных объектов в 3D полилинии
MPL -Построение средней линии Более продвинутая версия Rollin_Ball.lsp Find MidBoundary between two polylines.
R3P -Прямоугольгик по 3-м точкам
PL-P90 -Рисование перпендикулярных друг к другу сегментов полилинии
PL-CSE -Объединение 2d полилиний по примитиву
PL-SgWidth -Изменить ширину сегмента полилинии

Реверс дуговых сегментов полилинии из #79
На дуговых сегментах полилинии тип линий может быть "вверх тормашками", причем реверс не помогает. Этот артефакт можно побороть, если в полилинии включить "генерацию типа линий".

Панели, лисп и инструкции здесь http://dwg.ru/dnl/607
Обсуждаем, критикуем, предлагаем

Миниатюры
Нажмите на изображение для увеличения
Название: plrevers.jpg
Просмотров: 6898
Размер:	30.3 Кб
ID:	21079  


Последний раз редактировалось VVA, 20.07.2015 в 19:42. Причина: Реверс дуговых сегментов полилинии
Просмотров: 252731
 
Непрочитано 21.01.2018, 17:13
#561
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 5,213


Цитата:
Сообщение от Boxa Посмотреть сообщение
"как то" можно, но сложно.
это из той же оперы, что блоки с несколькими параметрами видимости. Ну соберите отдельные участки-полилинии в группы, если так хочется иметь "один" объект.
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 14.04.2018, 07:27
#562
Cfytrr

Балка на балку, кирпич на кирпич...
 
Регистрация: 09.10.2007
Питер
Сообщений: 3,150
Отправить сообщение для Cfytrr с помощью Skype™


В Autocad 2019 en команда "R3P -Прямоугольник по 3-м точкам" перестала корректно работать. При вводе размеров прямоугольника по первому направлению строит правильную длину грани , а по второму строит грань произвольной длины (причем длина грани всегда разная)
__________________
...переменная FILEDIA создана для привлечения пользователей к форумам.
Cfytrr вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 14.04.2018, 20:13
#563
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,699
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Cfytrr, пока не смогу проверить, нет 2019 автокада
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 05.06.2018, 11:04
#564
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 420


Доброе время суток!

Как можно при помощи этих команд обрабатывать сразу несколько полилиний, у которых вершины на определенном участке чертежа совпадают? Требуется выделить полилинии и добавить вершину к выбранному сегменту ВО ВСЕ полилинии.
Frigate вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 06.06.2018, 16:02
#565
wepp

Инжиниринг
 
Регистрация: 16.09.2011
Тюмень
Сообщений: 169


Цитата:
Сообщение от Frigate Посмотреть сообщение
Требуется выделить полилинии и добавить вершину к выбранному сегменту ВО ВСЕ полилинии.
Попробуйте BreakObjects. В точке, где требуется добавить вершину, проведите полилинию, потом разорвите всех объекты, пересекаемые ею, с помощью лиспа, а потом соедините.
wepp вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 06.06.2018, 16:40
#566
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 420


мне так сделать нельзя, т.к. хэндлы объектов поменяются. А они в данном случае очень важны(фактически каждая полилиния со своим хендлом определяет кабель с его трассой на плане. При изменениях в плане нужно немного откорректировать полилинии всех кабелей. Сейчас пользуюсь функцией добавить вершину в составе инструментария от VVA. Но даже для 10 линий это занимает много времени. А есть участки, где лежит 50 кабелей )))
Frigate вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 06.06.2018, 18:25
1 | #567
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,732


Цитата:
Сообщение от Frigate Посмотреть сообщение
Требуется выделить полилинии и добавить вершину к выбранному сегменту ВО ВСЕ полилинии.

Код:
[Выделить все]
 ;  Adding vertex to several plines at once 
  
(defun C:avsp (/ adoc endpar near newpt objs sf ss util)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object))
        util (vla-get-utility adoc)
  ) ;_ end of setq
  (setq ss (ssget))
  (setq objs (mapcar 'vlax-ename->vla-object
                     (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
             ) ;_ end of mapcar
  ) ;_ end of setq
  (setq newpt (getpoint "\nPick a new vertex location: "))
  (foreach obj objs
    (setq near (vlax-curve-getclosestpointto obj newpt))
    (if (> (length near) 2.0)
      (setq near (reverse (cdr (reverse near))))
    ) ;_ end of if
    (setq endpar (+ 1.0 (float (fix (vlax-curve-getparamatpoint obj near)))))
    (vlax-invoke obj 'Addvertex endpar (reverse (cdr (reverse newpt))))
    (vla-createtypedarray util 'sf vlax-vbdouble (car newpt) (cadr newpt))
    (setq sf (vlax-make-variant sf))
    (vla-put-coordinate obj (fix endpar) sf)
  ) ;_ end of foreach
  (princ)
) ;_ end of defun
Nike вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 08.06.2018, 10:41
#568
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 420


Nike,

благодарю!

Работает как надо.
Frigate вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 08.06.2018, 17:57
#569
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,732


Цитата:
Сообщение от Frigate Посмотреть сообщение
благодарю!

Работает как надо.
Не за что.

Не хватает только после создания вершин возможности их переноса в указываемую точку на чертеже так, как это реализовано в PL-VXADD.

Ув. VVA, поможете с этим?
Nike вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 16.06.2018, 00:10
1 | #570
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,699
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Nike Посмотреть сообщение
Ув. VVA, поможете с этим?
Без проблем. Нужно чтобы pltools были загружены (использую пару функций). Или "достать" их оттуда
Код:
[Выделить все]
 
 ;_  Adding vertex to several plines at once 
;_Need pltools fuctions lib:pline-get-verts and pl:subst-i
(defun C:avsp (/ adoc endpar near newpt newpt1 objs sf ss util vx lst)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object))
        util (vla-get-utility adoc)
  ) ;_ end of setq
  (setq ss (ssget))
  (setq objs (mapcar 'vlax-ename->vla-object
                     (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
             ) ;_ end of mapcar
  ) ;_ end of setq
  (setq newpt (getpoint "\nPick a new vertex location: "))
  (foreach obj objs
    (setq near (vlax-curve-getclosestpointto obj newpt))
    (if (> (length near) 2.0)
      (setq near (reverse (cdr (reverse near))))
    ) ;_ end of if
    (setq endpar (+ 1.0 (float (fix (vlax-curve-getparamatpoint obj near)))))
    (vlax-invoke obj 'Addvertex endpar (reverse (cdr (reverse newpt))))
    (vla-createtypedarray util 'sf vlax-vbdouble (car newpt) (cadr newpt))
    (setq sf (vlax-make-variant sf))
    (vla-put-coordinate obj (fix endpar) sf)
  ) ;_ end of foreach
   (if (setq newpt1 (getpoint newpt "\nPick a new vertex location <exit>: "))
     (progn
       (setq newpt1 (trans newpt1 1 0))
     (foreach obj objs
       (setq vx (lib:pline-get-verts obj)
             vx (pl:subst-i (fix (vlax-curve-getparamatpoint obj (vlax-curve-getclosestpointto obj(reverse (cdr (reverse newpt))))))
			  (reverse (cdr (reverse newpt1)))
			   vx)
             lst (apply 'append vx)
             )
       (vla-put-coordinates obj (vlax-make-variant (vlax-safearray-fill
             (vlax-make-safearray vlax-vbDouble (cons 0 (1- (length lst)))) lst)))
       )
     )
     )
  (princ)
) ;_ end of defun

__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 18.06.2018, 18:05
#571
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 420


Уважаемый VVA,

нужен совет по работе с полилиниями. У меня их сотни (каждая=1 кабель). но вершины лежат с большим разбросом. Есть ли возможность все вершины полилиний привести в указанную точку? Выделяем областью все вершины полилиний (и сами полилинии). Вершины внутри данной области нужно перенести в указанную точку.
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок.JPG
Просмотров: 38
Размер:	60.3 Кб
ID:	203657  
Frigate вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 18.06.2018, 23:31
#572
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 5,213


Цитата:
Сообщение от Frigate Посмотреть сообщение
Выделяем областью все вершины полилиний (и сами полилинии). Вершины внутри данной области нужно перенести в указанную точку.
Обычно один кабель рисуется нормально, а потом из-за погрешности привязки вершины полилиний других кабелей вокруг него. Поэтому логичнее привязываться к этому "опорному" кабелю. На .Net это элементарно делается:

Код:
[Выделить все]
 
        /// <summary>
        /// Элемент списка обрабатываемых полилиний
        /// </summary>
        private struct ItemPolylineInfo
        {
            /// <summary>
            /// Сама полилиния
            /// </summary>
            public Polyline PL;

            /// <summary>
            /// Базовый конструктор структуры
            /// </summary>
            /// <param name="aPL">Полилиния</param>
            public ItemPolylineInfo(Polyline aPL)
            {
                PL = aPL;
            }

            /// <summary>
            /// Получение индекса вершины, наиболее близкой к указанной пользователю точке
            /// </summary>
            /// <param name="aPoint">Указанная пользователем точка</param>
            /// <returns>Индекс ближайшей вершины (с нуля)</returns>
            public int GetNearestVertexIndex(Point3d aPoint)
            {
                int lCountVerts = PL.NumberOfVertices;
                double lMinDist = double.MaxValue;
                int lMinDistIndex = 0;
                for (int i = 0; i < lCountVerts; i++)
                {
                    double lDist = PL.GetPoint3dAt(i).DistanceTo(aPoint);
                    if (lMinDist > lDist)
                    {
                        lMinDistIndex = i;
                        lMinDist = lDist;
                    }
                }
                return lMinDistIndex;
            }

            /// <summary>
            /// Коррекция вершины полилинии, ближайшей к указанной
            /// </summary>
            /// <param name="aTransaction">Открытая транзакция</param>
            /// <param name="aBasedPoint">Базовая точка в WCS</param>
            /// <param name="aBasedPolyLineHandle">Хэндл опорной полилинии</param>
            public void CorrectVertex(Transaction aTransaction, Point3d aBasedPoint, 
                Handle aBasedPolyLineHandle)
            {
                // Пропускаем опорную полилинию
                if (PL.Handle.Equals(aBasedPolyLineHandle)) return;
                // Получаем объект полилинии в транзакции
                Polyline lTempPL = (Polyline)aTransaction.GetObject(PL.ObjectId, OpenMode.ForWrite);
                // И корректируем вершину
                int lIndexVert = GetNearestVertexIndex(aBasedPoint);
                Point3d lTransBasedPoint = aBasedPoint.TransformBy(
                    Matrix3d.WorldToPlane(lTempPL.Normal));
                lTempPL.SetPointAt(lIndexVert, new Point2d(lTransBasedPoint.X, lTransBasedPoint.Y));
            }
        }

        
        /// <summary>
        /// Команда приведений полилиний к одной вершине
        /// </summary>
        [CommandMethod("MVPLSSP", 
            CommandFlags.Modal | CommandFlags.NoBlockEditor | 
                CommandFlags.NoPaperSpace | CommandFlags.UsePickSet)]
        public static void MVPLSSP()
        {
            // Получаем текущий документ, его БД и окно редактора
            Document lAcadDoc = Application.DocumentManager.MdiActiveDocument;
            Database lAcadDb = lAcadDoc.Database;
            Editor lAcadEd = lAcadDoc.Editor;
            // Получаем набор выделенных полилиний
            PromptSelectionResult lPromptSR = lAcadEd.SelectImplied();
            if (lPromptSR != null)
            {
                if (lPromptSR.Status == PromptStatus.OK)
                {
                    SelectionSet lSelSet = lPromptSR.Value;
                    if (lSelSet.Count == 0)
                    {
                        lAcadEd.WriteMessage("\nВыберите полилинии перед запуском команды!");
                        return;
                    }
                    // Собираем информацию о выделенных полилиниях
                    List<ItemPolylineInfo> lListPLs = new List<ItemPolylineInfo>(lSelSet.Count);
                    using (Transaction lAcadTrans = lAcadDb.TransactionManager.StartTransaction())
                    {
                        foreach (ObjectId lObjId in lSelSet.GetObjectIds())
                        {
                            DBObject lAcadDBObj = lAcadTrans.GetObject(lObjId, OpenMode.ForRead);
                            Polyline lPL = lAcadDBObj as Polyline;
                            // Если объект является полилинией
                            if (lPL != null)
                            {
                                // И он не является замкнутым (замкнутый сам на себя кабель лишен смысла)
                                if (!lPL.Closed)
                                {
                                    // То добавляем полилинию в список
                                    lListPLs.Add(new ItemPolylineInfo(lPL));
                                }
                            }
                        }
                        lAcadTrans.Commit();
                    }
                    lListPLs.Capacity = lListPLs.Count;
                    // Если нет полилиний в предварительном наборе
                    if (lListPLs.Count == 0)
                    {
                        lAcadEd.WriteMessage("\nОтсутствуют незамкнутые полилинии в предварительном наборе!");
                        return;
                    }
                    // Удаляем предварительный выбор
                    lAcadEd.SetImpliedSelection(new ObjectId[0]);
                    // Запрашиваем опорную полилинию
                    PromptEntityOptions lPEO = new PromptEntityOptions(
                        "\nВыберите опорную полилинию по узлу привязки:");
                    lPEO.SetRejectMessage("\nНеобходимо выбирать полилинию!");
                    lPEO.AddAllowedClass(typeof(Polyline), true);
                    PromptEntityResult lPromptER = lAcadEd.GetEntity(lPEO);
                    // Если не было произведено выбора опорной полилинии
                    if (lPromptER.Status != PromptStatus.OK)
                    {
                        lAcadEd.WriteMessage("\nОтмена операции пользователем.");
                        return;
                    }
                    // Получаем опорную полилинию
                    Polyline lBasedPolyline = null;
                    using (Transaction lAcadTrans = lAcadDb.TransactionManager.StartTransaction())
                    {
                        lBasedPolyline = (Polyline)lAcadTrans.GetObject(
                            lPromptER.ObjectId, OpenMode.ForRead);
                        lAcadTrans.Commit();
                    }
                    // Если опорная полилиния замкнута
                    if (lBasedPolyline.Closed)
                    {
                        lAcadEd.WriteMessage("\nОпорная полилиния не должна быть замкнута!");
                        return;
                    }
                    // Создаем временный элемент с информацией об опорной полилинии
                    ItemPolylineInfo lBasedPolylineInfo = new ItemPolylineInfo(lBasedPolyline);
                    // И получаем координаты узла привязки для переноса других полилиний
                    Point3d lBasedPoint = lBasedPolyline.GetPoint3dAt(
                        lBasedPolylineInfo.GetNearestVertexIndex(lPromptER.PickedPoint));
                    // И подтягиваем полилинии, пропуская опорную
                    using (Transaction lAcadTrans = lAcadDb.TransactionManager.StartTransaction())
                    {
                        lListPLs.ForEach(delegate(ItemPolylineInfo aItem) {
                            aItem.CorrectVertex(lAcadTrans, lBasedPoint, lBasedPolyline.Handle); });
                        lAcadTrans.Commit();
                    }
                    // Вывод подтверждения
                    lAcadEd.WriteMessage("\nБыло обработано полилиний {0}", lListPLs.Count);
                    lListPLs.Clear();
                    return;
                }
            }
            // Нечего обрабатывать
            lAcadEd.WriteMessage("\nНе выделены полилинии для обработки!");
        }
т.е. выбираются сначала кабели-полилинии, затем запускается команда и указывается "опорная" полилиния-кабель близко к тому узлу, к которому надо подтянуть остальные. Код еще можно оптимизировать и уменьшать, но в целом рабочий.
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 19.06.2018, 08:53
#573
koMon


 
Регистрация: 26.09.2017
Сообщений: 163


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
На .Net это элементарно
вот это net-жданчик!-? а инструкция по эксплуатации?
koMon вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 19.06.2018, 09:43
#574
Setvar

Всего понемногу
 
Регистрация: 10.02.2007
Москва
Сообщений: 564


Цитата:
Сообщение от Frigate Посмотреть сообщение
Вершины внутри данной области нужно перенести в указанную точку.
Значит, должно получиться так:
Миниатюры
Нажмите на изображение для увеличения
Название: Вершины в точку.png
Просмотров: 36
Размер:	5.4 Кб
ID:	203676  
__________________
Установи FILEDIA в 1 и не парься.
Setvar вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 19.06.2018, 16:14
#575
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 5,213


Цитата:
Сообщение от Setvar Посмотреть сообщение
Значит, должно получиться так:
мой код так и делает - анализирует все полилинии, входящие в предварительный набор (замкнутые полилинии и прочее игнорируется), находит у каждой из них наиболее близкую к опорной точке вершину и подтягивает ее. А опорная точка выбирается в момент указания "идеально" нарисованного кабеля рядом с вершиной, автоматически тоже подтягиваясь к этой вершине "идеальной" полилинии.

Цитата:
Сообщение от koMon Посмотреть сообщение
вот это net-жданчик!-? а инструкция по эксплуатации?
1. Загрузили через NetLoad скомпилированную под вашу версию и разрядность акада сборку.
2. Выделили кабели-полилинии (можно вместе с "идеальной", можно без - все равно пропустит при обработке. Как и все остальное - что не относиться к полилиниям).
3. Запускается команда "MVPLSSP". Она просит выбрать "идеальную" полилинию рядом с той вершиной, куда нужно подтянуть остальные полилинии из набора.
p.s. Слои, где расположены полилинии, должны быть разблокированы.
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 22.06.2018, 10:51
1 | #576
koMon


 
Регистрация: 26.09.2017
Сообщений: 163


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
На .Net это элементарно
ну так-то оно и в лиспе не 100-умово)
без обвесов…
выбор вершин секрамкой. уточнение - выбираются конечно же полилинии.

Код:
[Выделить все]
 
(defun c:Move_Multiple_Vertex ()
	(setq selecting_plines t
		  plines_pickset (ssadd)
	)
	(while selecting_plines
		(setq crossing_point_1 (getpoint "\nУкажите первую точку секущей рамки")
			  initget_setting (initget 32)
			  crossing_point_2 (getcorner crossing_point_1 "\nУкажите вторую точку секущей рамки")
			  plines_pickset (ssget "_C" crossing_point_1 crossing_point_2 '((0 . "*POLYLINE")))
		)
		(if (< 0 (sslength plines_pickset)) (setq selecting_plines nil))
	)
	(sssetfirst nil plines_pickset)
	(setq point_of_interest (polar crossing_point_1 (angle crossing_point_1 crossing_point_2) (/ (distance crossing_point_1 crossing_point_2) 2.0))
		  move_vertex_to_Point (getpoint point_of_interest "\nУкажите точку для перемещения выбранных вершин: ")
	)
	(while (> (sslength plines_pickset) 0)
		(setq current_pline (vlax-ename->vla-object (ssname plines_pickset 0))
			  nearest_Point (vlax-curve-getClosestPointTo current_pline point_of_interest)
			  pline_parameter (atoi (rtos (vlax-curve-getParamAtPoint current_pline nearest_Point) 2 0))
			  coordinates_list (vlax-get current_pline 'coordinates)
			  points_list '()
		)
		(while (cddr coordinates_list)
	  		(setq points_list (cons (list (car coordinates_list) (cadr coordinates_list)) points_list)
	  			coordinates_list (cddr coordinates_list)
	  		)
        )
  		(setq points_list (reverse (cons (list (car coordinates_list) (cadr coordinates_list)) points_list))
  		      coordinates_list_modified '()
		)
  		(foreach pline_point (subst (list (car move_vertex_to_Point) (cadr move_vertex_to_Point)) (nth pline_parameter points_list) points_list)
		  	(setq coordinates_list_modified (append coordinates_list_modified pline_point))
		)
  		(vl-catch-all-apply 'vlax-put (list current_pline 'coordinates coordinates_list_modified))
		(setq plines_pickset (ssdel (ssname plines_pickset 0) plines_pickset))
	)
	(princ)
)

Последний раз редактировалось koMon, 22.06.2018 в 22:12.
koMon вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 22.06.2018, 11:14
#577
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 5,213


Цитата:
Сообщение от koMon Посмотреть сообщение
ну так-то оно и в лиспе не 100-умово)
без обвесов…
Кому просто что привычнее - у меня задачи в основном с диалогами и обработками массивов информации - как то в лисп бессмысленно изначально было "вгрызаться" глубоко)
А даю только коды - чтобы побороть предрассудки о том, что Net так зависим от версии акада и разработчика. Может хотя бы несколько человек еще попробуют собрать библиотеку из готового кода и осознают это..
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 22.06.2018, 11:23
#578
koMon


 
Регистрация: 26.09.2017
Сообщений: 163


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Кому просто что привычнее - у меня задачи в основном с диалогами и обработками массивов информации - как то в лисп бессмысленно изначально было "вгрызаться" глубоко)
А даю только коды - чтобы побороть предрассудки о том, что Net так зависим от версии акада и разработчика. Может хотя бы несколько человек еще попробуют собрать библиотеку из готового кода и осознают это..
я как-то к этому готовлюсь, но инструкция по эксплуатации оказалась скупой, как мужская слеза))) особенно мне понравилось по "скомпилировать") прозвучало так, как будто компилятор C# штатно встроен в автокад)
koMon вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 22.06.2018, 11:37
#579
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,732


Цитата:
Сообщение от koMon Посмотреть сообщение
ну так-то оно и в лиспе не 100-умово)
без обвесов…
выбор вершин секрамкой


Вопросик можно по этой же части?

А можно ли программно зацепить среднюю ручку сегмента полилинии для последующего его смещения, зная координату её расположения?
Другими словами программно перетащить сегмент, как если бы я это сделал за ручку..
Nike вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 22.06.2018, 11:38
#580
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 5,213


Offtop:
Цитата:
Сообщение от koMon Посмотреть сообщение
прозвучало так, как будто компилятор C# штатно встроен в автокад)
т.е. современный инженер, если не нашел встроенного готового решения, то вместо поиска в гугле по "Net AutoCAD скомпилировать" впадает в панику и ступор?) Компиляторов более чем, включая и бесплатных - причем с русским интерфейсом. Информация на русском уже тоже много лет не является тайной. В крайнем случае можно попросить сисадмина разобраться.


----- добавлено через ~2 мин. -----
Цитата:
Сообщение от Nike Посмотреть сообщение
А можно ли программно зацепить среднюю ручку сегмента полилинии для последующего его смещения, зная координату её расположения?
Зачем? Ручка для визуализации взаимодействия с пользователем - программно вершины смещайте.
Сергей812 вне форума вставить имя Обратить внимание модератора на это сообщение  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Новые команды для работы с полилинией

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Быстрый переход

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||