| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

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

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

Ответ
Поиск в этой теме
Непрочитано 14.09.2006, 13:30 4 | #1
Новые команды для работы с полилинией
VVA
 
Инженер LISP
 
Минск
Регистрация: 11.05.2005
Сообщений: 6,990

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

=========== Доступные команды PLTOOLS=================
Редакция 17.06.2014
PL-JOIN -Объединение выбранных полилиний
PL-VFI -вставка вершин в выбранной полилинии в местах пересечения с
указанными полилиниями, линиями, дугами
PL-JOIN3D -Объединение 3D полилиний
PL-L2A -Замена линейного сегмента в полилинии дуговым сегментом.
PL-A2L -Замена дугового сегмента в полилинии линейным сегментом.
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
Просмотров: 15297
Размер:	30.3 Кб
ID:	21079  


Последний раз редактировалось VVA, 08.09.2023 в 13:25. Причина: ссылка на иконки для темной темы
Просмотров: 367723
 
Непрочитано 14.09.2006, 13:42
#2
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Щас посмотрим.
Profan вне форума  
 
Непрочитано 14.09.2006, 14:13
#3
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Маленькое уточнение.
Можно было бы написать в благодарностях
Владимир Громов aka Profan.
Profan вне форума  
 
Автор темы   Непрочитано 14.09.2006, 14:22
#4
VVA

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


Не знал, исправлю.
VVA вне форума  
 
Непрочитано 14.09.2006, 14:53
#5
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Замечания к программам (командам).

"Добавить новую вершину в полилинию."
Не обрабатывается нажатие правой кнопки мыши. В программе предполагается, что новую вершину мы куда-то переместим мышью. но если нам не надо перемещать вершину, а подтвердить уже указанную точку, то напрашивается нажатие правой кнопки мыши и вот тут программа срывается. По-моему, kpblc дорабатывал эту программу.

"Удалить вершину полилинии".
Результат может оказаться непредсказуемым, если удаляется вершина между линейным и дуговым сегментами. В зависимости от направления полилинии вместе с вершиной удаляется или дуговой или линейный сегмент.

"Аппроксимация дуговых сегментов линейными".
В русской версии не работает контекстное меню.
Profan вне форума  
 
Непрочитано 14.09.2006, 14:59
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Дорабатывал, но не добил. Stretch все равно слетает черт-те куда. Там на оригинальном адресе, по-моему, Евгений Елпанов показывал обработку. Его вариант, насколько мне помнится, работал более устойчиво.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.09.2006, 16:22
#7
VVA

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


Цитата:
"Добавить новую вершину в полилинию."
Не обрабатывается нажатие правой кнопки мыши
"Аппроксимация дуговых сегментов линейными".
В русской версии не работает контекстное меню.
Исправлено грузить с VVA №1

Цитата:
"Удалить вершину полилинии".
Результат может оказаться непредсказуемым
По моему очевидно. Если до удаляемой вершины был дуговой сегмент, а после удаляемой линейный, то новый сохранит кривизну и наоборот.
Другое дело, что тот кто удаляет вершину должен отдавать себе отчет как направлена полилиния. Но как помочь ему в этом [sm2100] >kpblc В результате плотного общения с Лентяем, доработавшего код Евгения Елпанова, удалось добиться главного: избавиться от _break (полилинии не теряют ассоциативность). В этой версии вершины добавляются без _strech (там основная сложность была в пересчете bulge), что на мой взгляд более корректно.

Последний раз редактировалось VVA, 19.09.2015 в 20:42.
VVA вне форума  
 
Непрочитано 18.09.2006, 16:20
#8
Юрий Water Jet

Гидрорезка
 
Регистрация: 18.09.2006
г Владимир
Сообщений: 2


"Аппроксимация дуговых сегментов линейными".

Как сделать следующее:
Есть полилиния состоящая из нескольких прямых и дуг с разными радиусами до 500 мм и более 500 мм.
Надо аппроксимировать дуги с радиусом более 500 мм с отклонением 0.1 мм.
__________________
Гидро абразивная резка waterjet 4000 Атм
Юрий Water Jet вне форума  
 
Автор темы   Непрочитано 18.09.2006, 16:37
#9
VVA

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


Я бы сделал так:
1. _break в точке ->Выделить дуговые сегменты с радиусом более 500 мм в отдельные полилинии (вариант: скопировать полилинию и обрезать)
2. Аппроксимировать их с отклонением 0.1 (имеется ввиду предельное отклонение хорды, т.е. высота стрелки дуги)
3. PL-JOIN собрать все обратно в полилинию
4. При необходимости ENTREVS задать нужный порядок обхода
VVA вне форума  
 
Непрочитано 18.09.2006, 18:01
#10
Юрий Water Jet

Гидрорезка
 
Регистрация: 18.09.2006
г Владимир
Сообщений: 2


Так и делаю, но это очень долго. Уходят часы и дни на обработку нескольких полилиний.
Хотелось бы автоматически.
Задать радиус дуги болше которого полилиния должна обрабатываться и отклонение.
__________________
Гидро абразивная резка waterjet 4000 Атм
Юрий Water Jet вне форума  
 
Автор темы   Непрочитано 18.09.2006, 19:37
#11
VVA

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


>Юрий Water Jet Сделал, пробуй по ссылке с поста №1
VVA вне форума  
 
Непрочитано 19.09.2006, 08:20
#12
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Решил тоже добавить код в копилку...
Программа аппроксимирует дуговые сегменты полилинии по заданной высоте, т.е я использую подобный код для генерации векторной картинки полилинии в диалоговых окнах, задавая максимальную высоту в один пиксел.
Предложенная программа только пример, никакой оптимизации...
Я ее наспех выдернул из другого кода и слегка адаптировал для форума...

Код:
[Выделить все]
(defun c:lw-apr (/ A A1 E H I L LST P R)
  ;;  ElpanovEvgeniy, Russia, Moscow, 2006
  ;;  Example of creation of a polyline with the аррrоximаted arc segments
  ;; (c:lw-apr)
  (if (and (setq e (car (entsel)))
           (= (cdr (assoc 0 (entget e))) "LWPOLYLINE")
           (setq h (getdist "\nУкажите максимальную высоту аппроксимируемой дуги. "))
      ) ;_  and
    (progn
      (setq p   0
            lst (list (vlax-curve-getStartPoint e))
      ) ;_  setq
      (repeat (- (cdr (assoc 90 (entget e))) (abs (1- (cdr (assoc 70 (entget e))))))
        (if (setq r (vlax-curve-getSecondDeriv e p))
          (if (equal r '(0 0 0) 1e-8)
            (setq lst (cons (vlax-curve-getPointAtParam e p) lst)
                  p   (1+ p)
            ) ;_  setq
            (progn
              (setq r  (distance '(0 0) (vlax-curve-getFirstDeriv e p))
                    p  (1+ p)
                    i  (/ (- r h) r)
                    l  (* r (atan (sqrt (abs (- 1. (* i i)))) i) 2)
                    a1 (vlax-curve-getDistAtParam e p)
                    a  (vlax-curve-getDistAtParam e (1- p))
                    l  (/ (- a1 a) (1+ (fix (/ (- a1 a) l))))
              ) ;_  setq
              (while (and (< a a1) (not (equal a a1 1e-8)))
                (setq lst (cons (vlax-curve-getPointAtDist e a) lst)
                      a   (+ a l)
                ) ;_  setq
              ) ;_  while
            ) ;_  progn
          ) ;_  if
          (setq p (1+ p))
        ) ;_  if
      ) ;_  repeat
      (entmakex
        (append
          (list
            '(0 . "LWPOLYLINE")
            '(100 . "AcDbEntity")
            '(100 . "AcDbPolyline")
            (cons 90 (length lst))
            (assoc 70 (entget e))
          ) ;_  list
          (mapcar
            (function
              (lambda (x)
                (cons 10 x)
              ) ;_  lambda
            ) ;_  function
            lst
          ) ;_  mapcar
        ) ;_  append
      ) ;_  entmakex
    ) ;_  progn
  ) ;_  if
)
Елпанов Евгений вне форума  
 
Непрочитано 19.09.2006, 12:02
#13
ilka_t


 
Регистрация: 20.01.2004
Москва
Сообщений: 154


посмотрел понравилось, но я думаю что стоит добавит еще 1 команду
или чуть-чуть изменить существующую-

PL-DIV -Разбивает выбранный сегмент полилинии на указанное количество сегментов или через указанное расстояние


что бы можно было делить не только один сегмент но и всу полилинию вместе, с сохранением текущих вершин

А програмка супер

молодцы
ilka_t вне форума  
 
Автор темы   Непрочитано 20.09.2006, 19:22
#14
VVA

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


Добавлена новая команда
PL-DIVALL -Разбивает все сегменты полилинии на указанное количество сегментов или через указанное расстояние
VVA вне форума  
 
Непрочитано 21.09.2006, 09:38 Re: Новые команды для работы с полилинией
#15
Inner

Инженер-конструктор, магистр СПбГПУ.
 
Регистрация: 27.11.2005
Санкт-Петербург
Сообщений: 78
<phrase 1=


Цитата:
Сообщение от VVA

PL-JOIN -Объединение полилиний чохом
Мы на эту команду теперь дружно молимся двумя проектными отделами двух контор. Спасибо огромное. Высочайший респект.
__________________
Начинаю писать магистерскую диссертацию на тему нелинейных методов совместных расчетов оснований и фундаментов. Буду рад любой помощи со стороны профессионалов.
Inner вне форума  
 
Непрочитано 22.09.2006, 10:28
#16
Nike

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


Спасибо за замечательный набор программ!
Может быть уважаемым авторам не составит труда добавить программку, которая бы по одиночному клику на полилинии строила бы фаску и скругление смежных сегментов, ближайших к точке выбора.
Nike вне форума  
 
Непрочитано 22.09.2006, 10:37
#17
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Для Nike.
Аналогичная тема:
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=29880Df
Profan вне форума  
 
Непрочитано 22.09.2006, 12:01
#18
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825


А как сделать реверс дуговых сегментов?
Как ни крути тип линии в одну сторону направлен.
AutoCAD2007
[ATTACH]1158912159.gif[/ATTACH]
Krieger вне форума  
 
Непрочитано 22.09.2006, 12:03
#19
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Это не сделать, наколько я помню, вообще никак. Только если изготовить новый тип линии и его назначать на полилинию
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.09.2006, 00:44
#20
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Спасибо огромное всем программистам за огромный труд!
2VVA
Цитата:
(полилинии не теряют ассоциативность)
Если вас не затруднит разъясните пожалуйста что здесь имелось ввиду?
Sleekka вне форума  
 
Непрочитано 24.09.2006, 17:32
#21
AleX

CNC
 
Регистрация: 28.08.2003
Belarus
Сообщений: 47


Наверно более актуально преобразование SPLINE в 2D_POLYLINE.Как-то начинал, но результата так и нет.
AleX вне форума  
 
Автор темы   Непрочитано 25.09.2006, 10:08
#22
VVA

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


>Krieger №18 Версия Автокада тут ни при чем. Отрисуй две зеркальные дуги и увидишь, что типом линии они покрываются одинаково. Такое ощущение, что при встрече дуги (дугового сегмента) по алгоритму заново рассчитываются начало/конец дуги, причем справа-налево и против часовой. Мы у себя для этих целей имеем типы линий - перевертыши.
>AleXПочему именно в 2D_POLYLINE? Управляющие точки могум иметь различные координаты Z. Тут наверное только 3d polyline.
>Sleekka
Ассоциативновть полилинии, это когда она задает контур каким-либо другим примитивам. Я знаю два: штриховка и видовой экран. Причем ассоциативность штриховки иногда слетает. Т.к. в своей работе часто пользуюсь подрезанными видовыми экранами, то особо хочу подчеркнуть, что если в PL-VxAdd будет указан видовой экран, то он подрежется полилинией. Получается 2 в 1: подрезаем В.Э. и указываем новую конфигурацию, чем я особо доволен.
[ATTACH]1159164515.jpg[/ATTACH]
VVA вне форума  
 
Непрочитано 25.09.2006, 21:32
#23
AleX

CNC
 
Регистрация: 28.08.2003
Belarus
Сообщений: 47


>VVA
"Почему именно в 2D_POLYLINE? Управляющие точки могум иметь различные координаты Z. Тут наверное только 3d polyline."

По двум причинам:
1. в 2D_POLYLINE конечно же 2-х мерный SPLINE. Задачка уж больно интересная.
Преобразование в 2D_POLYLINE позволяет уменьшить количество точек ее определяющих, что может быть полезным, например при написании управляющих программ станков с ЧПУ. Что-то вроде имеющейся возможности определить элипс участками полилинии.
2. В 3d polyline полилинию через точки наверно банально и просто. Поискав по форумам можно найти почти готовые решения.
AleX вне форума  
 
Непрочитано 26.09.2006, 14:30
#24
luser


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


vva.
спасибо огромное за ваш труд, очень облгечает рутинные операции.
пожелание можна ли дополнить функциями копирования сегментов,
т.е по указанным пользователем сегментам pline создавался новый
объект-копия включающий в себя только указанные сегменты.
еще раз спасибо.
luser вне форума  
 
Автор темы   Непрочитано 26.09.2006, 15:42
#25
VVA

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


>AleX
Цитата:
Преобразование в 2D_POLYLINE позволяет уменьшить количество точек ее определяющих, что может быть полезным, например при написании управляющих программ станков с ЧПУ
Я не знаю другого математического решения кроме как апроксимация 2d/3d линейными сегментами заданной длины. Даже здесь это делают так (и за деньги).
Цитата:
Что-то вроде имеющейся возможности определить элипс участками полилинии.
А про системную переменную PELLIPSE знаешь?
Цитата:
В 3d polyline полилинию через точки наверно банально и просто
А зачем искать трудности? :wink:
>luser Сейсас готовится обновление с найденными багами KAI, попробую учесть и твое предложение.
VVA вне форума  
 
Непрочитано 26.09.2006, 15:50
#26
luser


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


VVA.
спасибо, ждем новых версий.
luser вне форума  
 
Непрочитано 28.09.2006, 23:21
#27
AleX

CNC
 
Регистрация: 28.08.2003
Belarus
Сообщений: 47


Цитата:
А про системную переменную PELLIPSE знаешь?
Обижаешь.
AleX вне форума  
 
Непрочитано 29.09.2006, 12:26
#28
ilka_t


 
Регистрация: 20.01.2004
Москва
Сообщений: 154


А можно сделать удаление совподающих вершин не толко для одной полилинии но и для группы, что бы не по одной выделять
ilka_t вне форума  
 
Автор темы   Непрочитано 29.09.2006, 16:10
#29
VVA

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


Выложены новые обновления от 29.09.2006
1. Добавлена новая команда
PL-CLONE - Из указанных пользователем сегментов полилинии создавается новая полилиния
2.В замене линейного сегмента в полилинии дуговым сегментом предусмотрена опция задания радиуса
радиус может быть положительным и отрицательным (влияет на
направление дуги)
3. PL-A2L и PL-L2A подружились с UCS
4. Удаление совпадающих вершин полилинии (PL-VxOpt) работает с группой объектов, а не по одной
VVA вне форума  
 
Непрочитано 11.10.2006, 13:31
#30
P_S


 
Регистрация: 09.10.2006
Санкт-Петербург
Сообщений: 99


Поскольку я только начинаю разбираться с LISPом и с программированием вообще, хочется что-то представить на суд знатоков и услышать критику, что так, что не так, и как можно лучше.
Прилагаю программку для редактирования положения вершин полилинии без того, чтобы таскать ручки.

(defun C:con_ed (/ object object2)
(defun obrabotka ()
(if (> vert_no1 vert_no2)
(while do_next
(if (setq
new_pt (getpoint
(vlax-safearray->list
(vlax-variant-value
(vlax-get-property
vname
'Coordinate
(if (= begin_vert 0)
0
(- begin_vert 1)
)
)
)
)
"\nСледующая вершина"
)
)
(progn
(setq
new_pos (vlax-safearray-fill
(vlax-make-safearray vlax-vbDouble '(0 . 1))
(vl-remove (last new_pt) new_pt)
)
)
(vla-put-Coordinate vname begin_vert new_pos)


(if (<= (+ 1 begin_vert) (vlax-curve-getEndParam vname))
(setq begin_vert (+ 1 begin_vert))
(progn (exit)
(princ)
)
)
)
(setq do_next nil)
)
)

(while do_next
(if (setq
new_pt (getpoint
(vlax-safearray->list
(vlax-variant-value
(vlax-get-property
vname
'Coordinate
begin_vert
)
)
)
"\nСледующая вершина"
)
)
(progn
(setq
new_pos (vlax-safearray-fill
(vlax-make-safearray vlax-vbDouble '(0 . 1))
(vl-remove (last new_pt) new_pt)
)
)
(vla-put-Coordinate vname (- begin_vert 1) new_pos)


(if (> begin_vert 1)
(setq begin_vert (- begin_vert 1))
(progn (exit)
(princ)
)
)
)
(setq do_next nil)
)
)
)
(princ)
)
;;Main function;;
(setq object (entsel
"\nЩелкните по той части полилинии, которую собираетесь редактировать"
)
name (car object)
place (cadr object)
prlst (entget name)
)
(if (equal (cdr (assoc 0 prlst)) "LWPOLYLINE")
(progn
(setq
vname (vlax-ename->vla-object (car object))
dist1 (vlax-curve-getDistAtPoint
vname
(vlax-curve-getClosestPointTo
vname
(cadr object)
)
)
object2 (entsel
"\nА теперь щелкните вблизи от той вершины, с которой собираетесь начать"
)
name2 (car object2)
place2 (cadr object2)
vname2 (vlax-ename->vla-object (car object2))
dist2 (vlax-curve-getDistAtPoint
vname2
(vlax-curve-getClosestPointTo
vname2
(cadr object2)
)
)
vert_no1 (vlax-curve-getParamAtDist vname dist1)
vert_no2 (vlax-curve-getParamAtDist vname dist2)
begin_vert (if (< (fix vert_no2) 0.5)
(fix vert_no2)
(+ (fix vert_no2) 1)
)
do_next T
)
(if (eq name name2)
(obrabotka)
(progn
(alert
"Очень странно!\nСначала был указан другой объект.\nНе желаете ли подумать,\nчто же вы хотите делать?"
)
(princ)
)
)
)
(progn
(alert "С выбранным объектом\nв такие игры не играют")
(princ)
)
)
)
P_S вне форума  
 
Непрочитано 11.10.2006, 14:02
#31
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


А это что такое:
Код:
[Выделить все]
Команда: CON_ED

Щелкните по той части полилинии, которую собираетесь редактировать
А теперь щелкните вблизи от той вершины, с которой собираетесь начать
Следующая вершина
Следующая вершина
Следующая вершина
Следующая вершина
Следующая вершина; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; предупреждение: раскрутка пропущена для неверное исключение

Команда:
Profan вне форума  
 
Автор темы   Непрочитано 11.10.2006, 17:24
#32
VVA

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


PL-VxMove - программа для редактирования вершин без таскания за ручки. Дополнительные ф-ции по ссылке с поста №1.
Будет включена в новое обновление. Интересуют замечания по интерфейсу.
Код:
[Выделить все]
(defun C:PL-VxMove ( / *error* next ent-pline pl Npt Ovx par vx lst)
(setq *error* pltool-err)
(setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)) next t)
(setvar "CMDECHO" 0)
(vla-startundomark *kpblc-activedoc*)
(while next
  (if (setq ent-pline (entsel "\nУкажите изменяемую вершину полилинии <выход>: "))
  (if (and (lib:Is-object-modifed (car ent-pline) nil)
        (member (vla-get-ObjectName (setq pl (vlax-ename->vla-object (car ent-pline))))
                '("AcDb2dPolyline" "AcDbPolyline" "AcDb3dPolyline")))
    (progn
      	(setq Npt (osnap (cadr ent-pline) "_nea")
	      Npt (trans Npt 1 0)
	     par (vlax-curve-getParamAtPoint pl Npt)
	     par (fix (+ 0.5 par)) ;_Ближайшая вершина
    	     par (if (and (eq (vla-get-closed pl) :vlax-true)
		    (= par (vlax-curve-getEndParam pl))) 0 par)
	      Ovx (trans (vlax-curve-getPointAtParam pl par) 0 1))
      (initget "X")
      (while (/= "X" (setq Npt (getpoint Ovx (strcat "\nНовое положение вершины " (itoa (1+ par)) "[выход(X)] <оставить>:"))))
	(if Npt (progn
	(setq Npt (trans Npt 1 (car ent-pline))
	      par (if (and (eq (vla-get-closed pl) :vlax-true)
		    (= par (vlax-curve-getEndParam pl))) 0 par)
	      vx (lib:pline-get-verts pl)
	      vx (subst-i par (if (= (vla-get-ObjectName pl) "AcDbPolyline")
				(list (car Npt)(cadr Npt))
				Npt) vx)
	      lst (apply 'append vx))	  
      (vla-put-coordinates pl (vlax-make-variant (vlax-safearray-fill
	(vlax-make-safearray vlax-vbDouble (cons 0 (1- (length lst)))) lst)))
	))
        (setq par (1+ par))
        (if (> par (vlax-curve-getEndParam pl))(setq par 0))
	(setq par (if (and (eq (vla-get-closed pl) :vlax-true)
		    (= par (vlax-curve-getEndParam pl))) 0 par))
	(setq Ovx (trans (vlax-curve-getPointAtParam pl par) 0 1))
	(initget "X")
	)
      )
    (princ "*** Объект на блокированном слое или не полилиния ***")
    )
    (setq next nil))
);_while
(princ))
Цитата:
Следующая вершина; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; предупреждение: раскрутка пропущена для неверное исключение
Нельзя в полилинии (LW) обновлять одну вершину. Надо обновлять все координаты.Вот здесь с этим боролись.

Последний раз редактировалось VVA, 19.09.2015 в 20:46.
VVA вне форума  
 
Непрочитано 12.10.2006, 01:00
#33
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


По интерфейсу:
не мешало бы добавить опции "вперед" и "назад" (или как в Pedit, Prev/Next), а уж если и Undo на неверно введенную точку!

Кстати, после выхода из программы по Esc надо жать 3 раза на U, чтобы отменить действие команда (при нормальном выходе все OK), далее листинг действий:

Command: PL-VXMOVE

Укажите изменяемую вершину полилинии <выход>:
Новое положение вершины 2[выход(X)] <оставить>:
Новое положение вершины 3[выход(X)] <оставить>:
Новое положение вершины 4[выход(X)] <оставить>:*Cancel*

Команда прервана пользователем
Command: u
PL-VXMOVE
Command: u
GROUP
Command: u
GROUP
Command:
KAI вне форума  
 
Непрочитано 12.10.2006, 08:34
#34
Игорь Богаченко

геодезист, генпланист
 
Регистрация: 26.09.2006
Калуш, Украина
Сообщений: 33
<phrase 1= Отправить сообщение для Игорь Богаченко с помощью Skype™


Прекрасный набор команд. Удобно оформлен. Хотя это не ново. В ToolPac это уже есть, да и не мешало бы посмотреть создателю, как реализовано это все в GeoniCS. Намного удобней.
Если возможно, то добавьте, пожалуйста, в функцию "добавления вершин в полилинию" возможность редактирования при включенных ручках, или подсвеченных вершин. А то добавляешь вершину, а рядом уже есть. Приходится корректировать.
Игорь Богаченко вне форума  
 
Непрочитано 12.10.2006, 08:52
#35
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Насчет Toolpac'a я не знаю, может, он и стал бесплатным, но за GeoniCS (при условии всех его плюсов и минусов) платить приличные суммы лично я не согласный.
И потом, как-то нелогично получается - Toolpac удобнее, Geonics вообще заоблачные высоты, и тут же "добавьте то-то и то-то"...
---
P.S. Обязательно прочтите мою подпись!
---
Добавлено:
В GeoniCS масса вещей (если вообще не все) сделаны на ObjARX, а там ничего не посмотришь, кроме как на междумордие да результаты работы. И потом пытаться сделать на лиспе то же самое. у меня лично подобные трюки прокатывают далеко не всегда
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.10.2006, 10:11
#36
Игорь Богаченко

геодезист, генпланист
 
Регистрация: 26.09.2006
Калуш, Украина
Сообщений: 33
<phrase 1= Отправить сообщение для Игорь Богаченко с помощью Skype™


Я совсем не хочу уменьшить значение твоей программы, но, некоторые моменты в Геониксе реализованы гораздо удобней. И если бы была возможность вытащить в Автокад из Геоникса набор команд по редактированию полилинии, то меня бы все устроило. Имелась в виду концепция решения.
Игорь Богаченко вне форума  
 
Непрочитано 12.10.2006, 13:05
#37
MIP

инженер
 
Регистрация: 13.12.2004
Минск
Сообщений: 496


>>Игорь Богаченко
Цитата:
Я совсем не хочу уменьшить значение твоей программы, но, некоторые моменты в Геониксе реализованы гораздо удобней. И если бы была возможность вытащить в Автокад из Геоникса набор команд по редактированию полилинии, то меня бы все устроило. Имелась в виду концепция решения.
В GeoniCS многие вещи сделаны удобно, но реализовать некоторые приятные возможности на лисп просто не возмжно, а вот извлечь ARX библиотеки, без помощи разработчика врядли получиться и насколько я его знаю они пока это делать не собираются. Написать аналог можно, но кто этим займеться?
Поэтому пользуемся тем что есть! И низкий поклон VVA за собраную до кучки информацию и всем авторам любезно предоставленных программ.
MIP вне форума  
 
Автор темы   Непрочитано 12.10.2006, 13:48
#38
VVA

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


Новый АВТОНОМНЫЙ вариант PL-VxMove с учетом замечаний KAI и Игорь Богаченко

Код:
[Выделить все]
(defun C:PL-VxMove ( / *error* next ent-pline pl Npt Ovx par vx lst undolst what str pdr nab)
  (defun DTR (a)(* pi (/ a 180.0)))
  (defun _vxgrdraw ( ptdraw color / ang pt11 pt12 pt21 pt22 len )
  (setq len (* 0.03 (getvar "VIEWSIZE"))
       ang 0
       pt11 (polar ptdraw (+ ang (dtr 225)) len)
       pt12 (polar ptdraw (+ ang (dtr 45)) len)
       pt21 (polar ptdraw (+ ang (dtr 315)) len)
       pt22 (polar ptdraw (+ ang (dtr 135)) len))
  (grvecs (list color pt11 pt12 pt21 pt22)))
(defun sbst-i (indel zn sps / buff i e1)
  (setq	i 0 buff nil) ;_ End of setq
  (foreach e1 sps (if (= i indel)
   (setq buff (append buff (list zn)))(setq buff (append buff (list e1))))
    (setq i (1+ i))) buff)
(defun *error* (msg)
  (princ "\nКоманда прервана пользователем")
  (while (> (getvar "CMDACTIVE") 0)(command))  
  (vla-endundomark *kpblc-activedoc*)
  (SSSETFIRST)(vl-cmdf "_.redrawall")(princ))
(defun Is-object-modifed (object param /) 
    (if (= (type object) 'ENAME)(setq object (vlax-ename->vla-object object)))
    (and (or param (setq param '"layer"))
      (vlax-property-available-p object param t)
         (vlax-property-available-p object "layer")
	 (eq (vla-get-Lock (vla-item (vla-get-Layers
	     (vla-get-activedocument(vlax-get-acad-object)))
             (vla-get-Layer object))) :vlax-false)))
(defun group-by-num (lst num / ls ret)
(if (= (rem (length lst) num ) 0)
 (progn (setq ls nil)(repeat (/ (length lst) num)
    (repeat num (setq ls (cons (car lst) ls) lst (cdr lst)))
  (setq ret (append ret (list (reverse ls))) ls nil)))) ret)
(defun pline-get-verts (pline_obj / verts)
      (setq verts (vlax-get pline_obj 'Coordinates)
      verts (cond((wcmatch (vlax-get pline_obj 'Objectname )
           "AcDb2dPolyline,AcDb3dPolyline")(group-by-num verts 3))
        ((eq (vlax-get pline_obj 'Objectname ) "AcDbPolyline")
         (group-by-num verts 2)) (T nil))))
(defun vecs_grdraw ( ptdraw ang color / pt1 pt2 )
  (setq pt1 (polar ptdraw (+ ang (dtr 135)) (* 0.05 (getvar "VIEWSIZE"))))
  (setq pt2 (polar ptdraw (+ ang (dtr 225)) (* 0.05 (getvar "VIEWSIZE"))))
  (grvecs (list color pt1 ptdraw ptdraw pt2)))
(setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)) next t)
(setvar "CMDECHO" 0)(vla-startundomark *kpblc-activedoc*)
(while next (SSSETFIRST)(vl-cmdf "_redrawall")
  (if (setq ent-pline (entsel "\nУкажите изменяемую вершину полилинии <выход>: "))
  (if (and (Is-object-modifed (car ent-pline) nil)
        (member (vla-get-ObjectName (setq pl (vlax-ename->vla-object (car ent-pline))))
                '("AcDb2dPolyline" "AcDbPolyline" "AcDb3dPolyline")))
    (progn (setq nab nil nab (ssadd))(ssadd (car ent-pline) nab)
      (SSSETFIRST nab nab)(setq nab nil)
      (setq Npt (osnap (cadr ent-pline) "_nea"))
      (setq  Npt (trans Npt 1 0)
	     par (vlax-curve-getParamAtPoint pl Npt)
	     pdr (+ 0.5 (fix par))  par (fix (+ 0.5 par)) ;_Ближайшая вершина
    	     par (if (and (eq (vla-get-closed pl) :vlax-true)
		    (= par (vlax-curve-getEndParam pl))) 0 par)
	      Ovx (trans (vlax-curve-getPointAtParam pl par) 0 1)
	      what 1+ str "следующая" undolst nil)
      (vecs_grdraw (setq Npt (trans (vlax-curve-getPointAtParam pl pdr) 0 1))
	 (angle Npt (trans (vlax-curve-getPointAtParam pl
	     (+ (vlax-curve-getParamAtPoint pl (trans Npt 1 (car ent-pline))) 1e-5))
	     (car ent-pline) 1)) 1)
      (_vxgrdraw Ovx -1)(initget "X N P U _X N P U")
      (while (/= "X" (setq Npt (getpoint Ovx
				(strcat "\nНовое положение вершины " (itoa (1+ (fix par)))
				        " [следующий(N)/предыдущий(P)/отмени(U)/выход(X)] <" str ">:"))))
	(cond
	  ((null Npt) nil)
	  ((= Npt "N")(setq what 1+ str "следующая"))
	  ((= Npt "P")(setq what 1- str "предыдущая"))
	  ((listp Npt)
	   (setq Npt (trans Npt 1 (car ent-pline))
	         par (if (and (eq (vla-get-closed pl) :vlax-true)
	               (= par (vlax-curve-getEndParam pl))) 0 par)
	      vx (pline-get-verts pl)
	 undolst (append (list(list par (apply 'append vx))) undolst)
	      vx (sbst-i par (if (= (vla-get-ObjectName pl) "AcDbPolyline")
		 (list (car Npt)(cadr Npt)) Npt) vx) lst (apply 'append vx))
	   (vla-put-coordinates pl (vlax-make-variant (vlax-safearray-fill
             (vlax-make-safearray vlax-vbDouble (cons 0 (1- (length lst)))) lst)))
	   (vl-cmdf "_redrawall")
	   (vecs_grdraw (setq Npt (trans (vlax-curve-getPointAtParam pl pdr) 0 1))
		(angle Npt (trans (vlax-curve-getPointAtParam pl
	           (+ (vlax-curve-getParamAtPoint pl (trans Npt 1 (car ent-pline))) 1e-5))
		(car ent-pline) 1)) 1))
	   ((= Npt "U")
	    (setq lst (car undolst) undolst (cdr undolst))
	    (if lst (progn
	      (setq par (car lst) lst (cadr lst))
	      (vla-put-coordinates pl (vlax-make-variant (vlax-safearray-fill
                (vlax-make-safearray vlax-vbDouble (cons 0 (1- (length lst)))) lst)))
		(setq Ovx (trans (vlax-curve-getPointAtParam pl par) 0 1))
		(vl-cmdf "_redrawall")
	      (vecs_grdraw (setq Npt (trans (vlax-curve-getPointAtParam pl pdr) 0 1))
		(angle Npt (trans (vlax-curve-getPointAtParam pl
	           (+ (vlax-curve-getParamAtPoint pl (trans Npt 1 (car ent-pline))) 1e-5))
		(car ent-pline) 1)) 1))
	      (alert "Нечего отменять"))) (t nil))
	(_vxgrdraw Ovx 0)(if (/= Npt "U")(setq par (what par)))
        (if (> par (vlax-curve-getEndParam pl))(setq par 0))
        (if (< par 0)(setq par (if (eq (vla-get-closed pl) :vlax-true)
            (1- (vlax-curve-getEndParam pl))(vlax-curve-getEndParam pl))))
	(setq par (if (and (eq (vla-get-closed pl) :vlax-true)
		    (= par (vlax-curve-getEndParam pl))) 0 par))
	(setq Ovx (trans (vlax-curve-getPointAtParam pl par) 0 1))
	(_vxgrdraw Ovx -1)(initget "X N P U _X N P U")))
    (princ "*** Объект на блокированном слое или не полилиния ***"))
    (setq next nil)));_while
(vl-cmdf "_redrawall")(vla-endundomark *kpblc-activedoc*)(princ))
При выборе полилинии она подсвечивается ручками и рисуется стрелка по направлению обхода. Возможность редактирования при включенных ручках - мне нравится. Будет включена во все команды по аналогу этой, то же и с undo.

Добавлено
Команда сделана автономной
VVA вне форума  
 
Непрочитано 12.10.2006, 14:05
#39
P_S


 
Регистрация: 09.10.2006
Санкт-Петербург
Сообщений: 99


VVA
Цитата:
Интересуют замечания по интерфейсу
.

Какие были мысли относительно этой команды: указывается направление редактирования, и резиновая нить цепляется за предыдущую вершину, обозначая положение линейного сегмента полилинии после изменения положения вершины. Таким образом, для пользователя процесс схож с вычерчиванием заново участка полилинии.
P_S вне форума  
 
Автор темы   Непрочитано 12.10.2006, 15:16
#40
VVA

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


>P_Sуказывается направление редактирования - пробуй послений вариант
Цитата:
резиновая нить цепляется за предыдущую вершину
- не введет ли это пользователя в заблуждение.
VVA вне форума  
 
Непрочитано 12.10.2006, 16:18
#41
Игорь Богаченко

геодезист, генпланист
 
Регистрация: 26.09.2006
Калуш, Украина
Сообщений: 33
<phrase 1= Отправить сообщение для Игорь Богаченко с помощью Skype™


Вроде бы все хорошо, но простите за назойливость, мне не нужно каждую вершину редактировать, а, переходя по полилинии корректировать некоторые из них, не выходя из команды.
Игорь Богаченко вне форума  
 
Непрочитано 12.10.2006, 16:21
#42
Игорь Богаченко

геодезист, генпланист
 
Регистрация: 26.09.2006
Калуш, Украина
Сообщений: 33
<phrase 1= Отправить сообщение для Игорь Богаченко с помощью Skype™


Не досмотрел. Так устроит. Большое спасибо.
Игорь Богаченко вне форума  
 
Непрочитано 12.10.2006, 16:25
#43
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Объясните, пожалуйста, а чем ручки-то плохи? Выделил полилинию и выбирай любую ручку, если нет ножки.
Profan вне форума  
 
Непрочитано 13.10.2006, 04:18
#44
Игорь Богаченко

геодезист, генпланист
 
Регистрация: 26.09.2006
Калуш, Украина
Сообщений: 33
<phrase 1= Отправить сообщение для Игорь Богаченко с помощью Skype™


Этот код не вставляет вершину, а смещает. Это не подходит.
Если применять резинувую нить, то для двух смежных вершин, а не для одной с направлением. И, желательна свобода перемещения по редактируемой полилинии, а не быть привязаным к определенному участку, и двигаться по линии к следующему участку редактирования.
Лучше просто подсветить редактируемую линию, и вставлять вершины в нужных местах.
Игорь Богаченко вне форума  
 
Непрочитано 13.10.2006, 05:49
#45
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Для VVA.
А это почему?
Код:
[Выделить все]
Команда: PL-VXMOVE

Укажите изменяемую вершину полилинии <выход>: ; ошибка: no function definition: 
LIB:IS-OBJECT-MODIFED

Команда:
Программа не может работать автономно?
Profan вне форума  
 
Автор темы   Непрочитано 13.10.2006, 09:15
#46
VVA

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


>Игорь Богаченко В № 38 писал
Цитата:
Возможность редактирования при включенных ручках - мне нравится. Будет включена во все команды по аналогу этой, то же и с undo.
PL-VxAdd с ручками уже готова, допишу отмену и выложу обновления. На этой (PL-VxMove) команде можно посмотреть как будет. Чуточку терпения.
Цитата:
Если применять резинувую нить, то для двух смежных вершин, а не для одной с направлением
В лиспе такое нельзя, по крайней мере я не знаю как.
Я тоже сомневаюсь в практической ценности PL-VxMove и согласен с Profan №43 Хотел написать на Profan №45
Цитата:
в №32 писал, здесь забыл Дополнительные ф-ции по ссылке с поста №1.
Но подправлю VVA №38, сделаю ф-цию автономной.
VVA вне форума  
 
Непрочитано 13.10.2006, 10:00
#47
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Еще про ручки (такие, знаете ли, миленькие нежные ручки).
Подумавши, свою фразу построил бы по другому:
Выделил полилинию и выбирай любую ручку, если нет ножки, или выбирай с Shift'ом несколько ручек, если тебя привлекает групповуха. :twisted:
Profan вне форума  
 
Непрочитано 16.11.2006, 14:58
#48
Neznayka


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


Спасибо за прогу, но почему не добавляется вершина в полилинии с глобальной шириной, пишет ничего типа не выбранно, очень редко проскакивает. и в 2007 не пашет эта команда, чего-тот не хватает
Neznayka вне форума  
 
Автор темы   Непрочитано 16.11.2006, 17:58
#49
VVA

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


Пользуясь случаем обновил программы. Исправленные ошибки:
- PL-CLONE, PL-VxRdc Неточночть работы в UCS
- Добавлена команда PL-VX1 - Изменение начала полилинии
- В команду PL-VxMove добавлена опция:
Для 3d полилиний добавляется запрос сохранения Z узла полилинии
- CVPOLY переведена в режим командной строки.
- Вместо нее добавлена PL-3d2d (проецирование 3d на текущую ПСК)
- Entrevs - для замкнутых полилиний вершина остается на месте
- Корректная обработка кривизны и ширины замыкающего сенмента полилинии в ENTREVS
Особо хочу поблагодарить KAI за дельные замечания и советы.

> Neznayka Все добавляется. Просто размер прицела выбора (PICKBOX) должен быть больше текущей толщины полилинии на экране.
Варианта 2:
1. Либо зумом отъедь от полилинии
2. Либо в командной строке PICKBOX и увеличь значение.

Только что проверил: работает в 2007 RUS. Там чистый Лисп. От версии не должно зависеть.
VVA вне форума  
 
Непрочитано 21.11.2006, 11:07
#50
Neznayka


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


> Neznayka Все добавляется. Просто размер прицела выбора (PICKBOX) должен быть больше текущей толщины полилинии на экране.
Варианта 2:
1. Либо зумом отъедь от полилинии
2. Либо в командной строке PICKBOX и увеличь значение.

Только что проверил: работает в 2007 RUS. Там чистый Лисп. От версии не должно зависеть.[/quote]

Все понял , спасибо, поставил новую версию и в 2007 заработало почему-то :roll:

еще нашёл замечательное применение :
все время мучился с отрисовкой забора на своих схемах, теперь полилинию можно разбить на нужной длины сегмент, назначить
глобальную ширину, и переменную FILLMODE обнулить - все. а то я раньше всякие (мультилинии), выдумывал

вот только акад при разбивки секунд на 15 призадумывается, и это при том , что комп далеко не слабый у меня
[ATTACH]1164096458.GIF[/ATTACH]


а может еще такую фишку с геоникса добавить, типа есть замкнутый контур (здание обведено с растра, например) внутренние углы стремятся к 90 градусам, но у них это не получается из-за того не пользовались ф8 . Так вот щелкнул по линии и она трансформировалась в фигуру с углами в 90 гр. , за основу берется самая длиная сторона
возможно ли такое ?
Neznayka вне форума  
 
Автор темы   Непрочитано 21.11.2006, 17:04
#51
VVA

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


>Neznayka Тебе поможет эта команда. Несмотря на то, что речь идет о шпалах, можешь рисовать и заборы

Код:
[Выделить все]
(Defun C:RW ( /  ang col dH DL DLN e1 H_put i nev Param pt0 pt11 pt21
		S_spal Vobj *error* adoc Flg CL)
(defun *error* (msg)(vla-endundomark adoc)(setq PICK1 nil)(setvar "CLAYER" CL))
(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark adoc)
;;;H_put - ширина пути
;;;S_spal - шаг шпал
;;;DL- на сколько шпалы выступают за путь с одной стороны
  (setq	H_put 3 ;_ширина пути 3 мм
	S_spal 6 ;_шаг шпал 6 мм
	DL 0.5  ;выступают на 0.05 мм
  ) ;_ End of setq
  (setq Flg t)
  (while Flg
    (initget "S")
    (setq e1 (entsel "\nВыберите ось путей [настройки S] <выход>: "))
    (cond
      ((= e1 "S")
       (princ "\nШирина пути в мм <")(princ H_put)(princ "> : ")
       (initget 6)(setq pt0 (getdist))
       (if pt0 (setq H_put pt0)) ;_ End of if
       (princ "\nШаг шпал в мм <")(princ S_spal)(princ "> : ")
       (initget 6)(setq pt0 (getdist))
       (if pt0 (setq S_spal pt0)) ;_ End of if
       (princ "\nВыступ шпал в мм <")(princ DL)(princ "> : ")
       (initget 5)(setq pt0 (getdist))
       (if pt0 (setq DL pt0)) ;_ End of if
      )
      ((null e1)(if (= (getvar "ERRNO") 52)(setq Flg nil e1 nil vobj nil)(princ " *мимо*")))
      (t
       (setq e1 (car e1) vobj (vlax-ename->vla-object e1))
       (cond
	 ((null(vlax-write-enabled-p vobj))(alert "На блокированном слое!"))
	 ((wcmatch (cdr(assoc 0 (entget e1))) "LINE,ARC,SPLINE,*POLYLINE,ELLIPSE,CIRCLE")(setq Flg nil))
	 (t (alert (strcat "Объект " (cdr(assoc 0 (entget e1)))
	    " не может быть осью пути\nОсь пути - полилиния, линия, дуга, сплайн, эллиптическая дуга, круг"))))))
  ) ;_while 
(if vobj (progn
  (setq dH (+ (* H_put 0.5) DL)  
       DLN (vlax-curve-getDistAtParam vobj (vlax-curve-getEndParam vobj))
        col (fix (/ dln s_spal 1.0))
        nev (- DLN (* col S_spal))
        nev (* nev 0.5))
  (setq	PICK1 nil PICK1 (ssadd)) ;_ end of setq
  (setq CL (getvar "CLAYER"))(setvar "CLAYER" (vla-get-Layer vobj))
  (setq i '-1)
  (repeat (+ col 1)
    (setq i (1+ i))
    (setq pt0 (vlax-curve-getPointAtDist vobj (+ (* S_spal i) nev)))
    (setq param (vlax-curve-getParamAtPoint vobj pt0))
    (setq ang (vlax-curve-getFirstDeriv vobj param))
    (setq pt11 (mapcar '+ pt0 ang))
    (setq ang (angle pt0 pt11))
    (setq ang (- ang (* PI 0.5)))
    (setq pt11 (polar pt0 ang dH))
    (setq pt21 (polar pt0 (+ ang PI) dH))
    (vla-AddLine (vla-ObjectIDToObject adoc (vla-get-OwnerID vobj))
      (vlax-3d-point pt11)(vlax-3d-point pt21))
    (ssadd (entlast) PICK1)
  ) ;_ End of repeat
  (vla-Offset vobj (* H_put 0.5))(ssadd (entlast) PICK1)(vla-Offset vobj (- 0 (* H_put 0.5)))(ssadd (entlast) PICK1)
  (setq pt0 (mapcar '(lambda (x)(vlax-get-property vobj x)) '(Linetype LineWeight Color Layer)))
  (setq pt11 (mapcar 'vlax-ename->vla-object(vl-remove-if 'listp (mapcar 'cadr (ssnamex PICK1)))))
  (mapcar '(lambda (vla)
	     (mapcar '(lambda (x y)(vlax-put-property vla x y))
		'(Linetype LineWeight Color Layer) pt0)) pt11)
  (setvar "CLAYER" CL)(command "_.-group" "_C" "*" "Трамвайные (ж.д.) пути" PICK1 "")
  (initget "Yes No")(if (= (getkword "\nУдалять ось путей? [Yes/No] <No> : ") "Yes")(vla-erase vobj))
    )
  )
(setq PICK1 nil)
(vla-endundomark adoc)
 (princ)
)
VVA вне форума  
 
Непрочитано 21.11.2006, 17:59
#52
Neznayka


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


интересно я это попробую , но для жд дороги , а заборы все-таки легче выше описанным, имхо
Neznayka вне форума  
 
Непрочитано 22.11.2006, 07:22
#53
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Совет программистам:

Для того, чтобы предотвратить ситуацию с неправильным указанием широкой (c физической шириной) полилинии, надо в функцию выбора примитива включать наподобие


Код:
[Выделить все]
 (setq om           (getvar "OSMODE")
          old_aperture (getvar "aperture")
 ) ;_ end of setq
 (setvar "OSMODE" 512)
 (setvar "aperture" (getvar "pickbox"))

;;..... здесь указание на примитив с обработкой правильности
(if (setq ent_selected
        (ru-get-entsel-by-type
                     msg
                     "Примитив недопустимого типа"
                     (list "LINE" "LWPOLYLINE")
                     t
                 ) 

        ) 
        (setq result (list (car ent_selected)
               (trans (osnap (trans (cadr ent_selected) 0 1) "_nea" 1 0)
                     ) 
        ) 
    )

;; Потом восстановление
(setvar "OSMODE" om)
(setvar "aperture" old_aperture)
Функция ru-get-entsel-by-type проверяет тип примитива, блокированность слоя и т.п. Не в ней дело (она вернет список как entsel), а в применении объектной привязки к полученной точке - функция osnap.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 22.11.2006, 13:25
#54
VVA

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


>ShaggyDoc Спасибо, использовал.
>Neznayka
Цитата:
а может еще такую фишку с геоникса добавить, типа есть замкнутый контур (здание обведено с растра, например) внутренние углы стремятся к 90 градусам, но у них это не получается из-за того не пользовались ф8 . Так вот щелкнул по линии и она трансформировалась в фигуру с углами в 90 гр. , за основу берется самая длиная сторона
возможно ли такое ?
Пробуй
Код:
[Выделить все]
;;;Команда выравнивает внутренние углы полилинии до 90 градусов
;;;За основу берется самая длинная сторона
;;;
(Defun C:p90 ( / Flg e1 vobj i ang *error* crs pt0 pt1 pt2 pt3 var adoc)
(defun *error* (msg)(vla-endundomark adoc))
(defun pline-get-verts (pline_obj / verts)(setq verts (vlax-get pline_obj 'Coordinates)
      verts (cond ((wcmatch (vlax-get pline_obj 'Objectname ) "AcDb2dPolyline,AcDb3dPolyline")
             (group-by-num verts 3))
             ((eq (vlax-get pline_obj 'Objectname )"AcDbPolyline")(group-by-num verts 2))(T nil))))
(defun group-by-num (lst num / ls ret)(if (= (rem (length lst) num ) 0)(progn
(setq ls nil)(repeat (/ (length lst) num)(repeat num (setq ls (cons (car lst) ls) lst (cdr lst)))
(setq ret (append ret (list (reverse ls))) ls nil)))) ret)
(vl-load-com)(setq adoc (vla-get-activedocument (vlax-get-acad-object)))(vla-startundomark adoc)
(setq Flg t)(while Flg (setq e1 (entsel "\nВыберите полилинию  <выход>: "))
    (cond ((null e1)(if (= (getvar "ERRNO") 52)(setq Flg nil e1 nil vobj nil)(princ " *мимо*")))
      (t (setq e1 (car e1) vobj (vlax-ename->vla-object e1))
       (cond ((null(vlax-write-enabled-p vobj))(alert "На блокированном слое!"))
	 ((wcmatch (cdr(assoc 0 (entget e1))) "*POLYLINE")(setq Flg nil))
	 (t (alert (strcat "Объект не полилиния"))))))) ;_while 
(if vobj (progn (setq crs (pline-get-verts vobj))(if (> (length crs) 2)(progn
(setq Pt1 nil pt2 nil ptS nil ptE nil var nil)(setq pt1 (car crs))
(mapcar'(lambda ( x )(if (or (null var)(< var (distance pt1 x)))
	   (setq var (distance pt1 x) ptS pt1 ptE x))(setq pt1 x))
 (cdr crs))(setq var nil i 0 lst crs)
(while i
  (if (and (equal (nth i crs) ptS 1e-6)(equal (nth (1+ i) crs) ptE 1e-6))
    (setq i nil)(setq var (append var (list (nth i crs))) i (1+ i) lst (cdr lst))))
(setq crs (append lst var))(setq ang (angle (car crs)(cadr crs)))
(setq lst (list (car crs)(cadr crs)) crs (cddr crs))
(foreach pt crs
  (setq pt1 (last lst)) (setq pt2 (polar pt ang 100))
  (setq pt3 (polar pt1 (+ ang (* 0.5 PI)) 100))(setq pt0 (inters pt pt2 pt1 pt3 nil))
  (setq lst (append lst (list pt0)))(setq ang (angle pt1 pt0)))
(setq crs (reverse lst))(setq ang (angle (car lst)(cadr lst)))
(if (or (equal (angle (car crs)(cadr crs)) ang 1e-6)
	(equal (angle (car crs)(cadr crs))(+ ang PI) 1e-6)
	(equal (angle (car crs)(cadr crs))(- ang PI) 1e-6))
  (progn (setq pt1 (car lst))(setq pt0 (car crs))
    (setq pt2 (polar pt0 ang 100))(setq pt3 (polar pt1 (+ ang (* 0.5 PI)) 100))
    (setq pt0 (inters pt0 pt2 pt1 pt3 nil))(setq lst (append (reverse(cdr crs))(list pt0)))
    (vla-put-Closed vobj :vlax-true))
  (progn (setq pt1 (car crs))(setq pt2 (cadr crs))
    (setq pt0 (inters (car lst)(cadr lst) pt1 pt2 nil))
    (if (and pt0 (equal (angle pt2 pt1)(angle pt2 pt0) 1e-6))
      (progn (setq pt1 (polar (car lst)(+ ang (* 0.5 PI)) 100))
	(setq pt0 (inters pt2 (polar pt2 ang 100)(car lst) pt1 nil))
	(setq crs (cddr crs))(setq crs (append (list pt0) crs))
	(setq lst (reverse crs))(vla-put-Closed vobj :vlax-true)))))
 (if (= (vla-get-ObjectName vobj) "AcDbPolyline")(setq lst (mapcar '(lambda (cr)(mapcar '+ cr '(0 0))) lst)))
  (setq crs (apply 'append lst))
  (setq var (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray
             vlax-vbDouble (cons 0 (1- (length crs)))) crs)))
(vla-put-Coordinates vobj var)))));_vobj
(vla-endundomark adoc)(princ))
(princ "\nНаберите в командной строке p90")

Последний раз редактировалось VVA, 19.09.2015 в 20:52.
VVA вне форума  
 
Непрочитано 22.11.2006, 14:13
#55
Lizzy

архитектор
 
Регистрация: 14.01.2006
Portugal, Sintra
Сообщений: 119


Извините, что вклиниваюсь в столь умную беседу со своей проблемой, в лиспах ничего не смыслю. Но вопрос касается свойств полилинии.

В одном файле после использования команды flatten objekts изменилось отбражение вновь проводимых полилиний. Толщина их стало отбражаться в абсолютных величинах, а не относительно экрана. мне удалось только выяснить, что это зависит от величин global width. Где можно это значение "обнулить"? Пока приходится делать это вручную в свойствах... :?:
__________________
жизнь-занятная штука...
Lizzy вне форума  
 
Непрочитано 22.11.2006, 14:46
#56
Neznayka


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


Вы кудесник, это так "окрасивит" мои чертежи,!!! прям сказка,

немогли бы вы на словах рассазать про алгоритм работы, это сравни уравновешивания теодолитного хода?
если Вас интересуют пожелания, то они такие:
некорректно работает с не замкнутой плинией (появляется короткий апендикс который совсем в другую сторону смотрит), и если можно ограничить выпрямляймые углы , скажем от 85 до 95 градусов, а то в зданиях бывают не только прямые углы, и еще чтоб скапом можно было контура обрабатывать, а не по одному.

ОГРОМНОЕ СПАСИБО
Neznayka вне форума  
 
Автор темы   Непрочитано 23.11.2006, 14:25
#57
VVA

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


>Lizzy Вручную в свойствах, только для всех полилиний сразу.
Выдели объекты, в окне свойств (там где Все) раскрой список, выбери полилинии. в поле Глобальная ширина вбей 0.
>Neznayka Пробуй. Про алгоритм чуть позже
Код:
[Выделить все]
;;;Команда выравнивает внутренние углы полилинии до 90+- допуск градусов
;;;За основу берется самая длинная сторона
;;;
(Defun C:p90 ( / Flg e1 i ang *error* crs pt0 pt1 pt2 pt3 var adoc dop1 dop2)
(defun *error* (msg)(princ msg)(vla-endundomark adoc))
(defun angw1w2 (Wekt1 Wekt2 $P000 / CosA)
(setq Wekt1 (mapcar '- Wekt1 $P000) Wekt2 (mapcar '- Wekt2 $P000) $P000 (mapcar '- $P000 $P000))
 (if (equal (setq CosA (/ (apply '+ (mapcar '* Wekt1 Wekt2))
  (distance $P000 Wekt1) (distance $P000 Wekt2))) -1.0 1e-6) Pi
  (if (equal CosA 0.0 1e-6) Pi2 (atan (sqrt (- 1 (* CosA CosA))) CosA))))
(defun pline-get-verts (pline_obj / verts)(setq verts (vlax-get pline_obj 'Coordinates)
      verts (cond ((wcmatch (vlax-get pline_obj 'Objectname ) "AcDb2dPolyline,AcDb3dPolyline")
             (group-by-num verts 3))
             ((eq (vlax-get pline_obj 'Objectname )"AcDbPolyline")(group-by-num verts 2))(T nil))))
(defun group-by-num (lst num / ls ret)(if (= (rem (length lst) num ) 0)(progn
(setq ls nil)(repeat (/ (length lst) num)(repeat num (setq ls (cons (car lst) ls) lst (cdr lst)))
(setq ret (append ret (list (reverse ls))) ls nil)))) ret)
(vl-load-com)(setq adoc (vla-get-activedocument (vlax-get-acad-object)))(vla-startundomark adoc)
(setq ang (getangle "\nДопуск в градусах для выравнивания до 90 <любой угол>: "))
(if ang (setq dop1 (- (* 0.5 PI) ang) dop2  (+ (* 0.5 PI) ang))
(setq dop1 nil dop2 nil))
(princ "\nВыберите полилинии ")(setq selset (ssget "_:L" '((0 . "*POLYLINE"))))
(if selset (progn (setq selset (mapcar 'vlax-ename->vla-object  (vl-remove-if 'listp
 (mapcar 'cadr (ssnamex selset)))))
 (mapcar '(lambda(vobj / ug ptS ptE)(setq crs (pline-get-verts vobj))
    (if	(> (length crs) 2)(progn (setq Pt1 nil pt2 nil ptS nil ptE nil var nil)
	(setq pt1 (car crs))(mapcar '(lambda (x)(if (or (null var) (< var (distance pt1 x)))
        (setq var (distance pt1 x) ptS pt1 ptE x))  (setq pt1 x))(cdr crs))(setq i 0 var 0)
	(while (and i (nth i crs))(if (and (equal (nth i crs) ptS 1e-6)
               (equal (nth (1+ i) crs) ptE 1e-6))(setq var (1+ i) i (+ (length crs) 1)))
	    (setq i (1+ i)))
	(if (> var (* 0.5 (length crs)))(setq crs (reverse crs) i ptS ptS ptE ptE i))
	(setq var nil i 0 lst crs)
	(while (and i (nth i crs))
	  (if (and (equal (nth i crs) ptS 1e-6)(equal (nth (1+ i) crs) ptE 1e-6))
	    (setq i nil)(setq var (append var (list (nth i crs)))
		  i   (1+ i) lst (cdr lst))))
	(setq crs (append lst var))(setq ang (angle (car crs) (cadr crs)))
	(setq lst (list (car crs) (cadr crs)) crs (cddr crs))
	(foreach pt crs (setq pt1 (last lst))
	  (setq pt2 (polar pt ang 100))(setq pt3 (polar pt1 (+ ang (* 0.5 PI)) 100))
	  (setq ug (angw1w2 pt (cadr (reverse lst)) pt1))
	  (if (or (null dop1)(and (> ug dop1)(< ug dop2)))
	    (setq pt0 (inters pt pt2 pt1 pt3 nil))(setq pt0 pt))
	  (setq lst (append lst (list pt0)))(setq ang (angle pt1 pt0)))
	(setq crs (reverse lst))(setq ang (angle (car lst) (cadr lst)))
	(if (or	(equal (angle (car crs) (cadr crs)) ang 1e-6)
		(equal (angle (car crs) (cadr crs)) (+ ang PI) 1e-6)
		(equal (angle (car crs) (cadr crs)) (- ang PI) 1e-6))
	  (progn (setq pt1 (car lst))(setq pt0 (car crs))(setq pt2 (polar pt0 ang 100))
		 (setq pt3 (polar pt1 (+ ang (* 0.5 PI)) 100))(setq pt0 (inters pt0 pt2 pt1 pt3 nil))
		 (setq lst (append (reverse (cdr crs)) (list pt0)))
		 (vla-put-Closed vobj :vlax-true))
	  (progn (setq pt1 (car crs))(setq pt2 (cadr crs))
	    (setq pt0 (inters (car lst) (cadr lst) pt1 pt2 nil))
	    (if	(and pt0 (equal (angle pt2 pt1) (angle pt2 pt0) 1e-6))
	      (progn (setq pt1 (polar (car lst) (+ ang (* 0.5 PI)) 100))
		     (setq pt0 (inters pt2 (polar pt2 ang 100) (car lst) pt1 nil))
		     (setq crs (cddr crs))(setq crs (append (list pt0) crs))
		     (setq lst (reverse crs))(vla-put-Closed vobj :vlax-true)))))
	(if (= (vla-get-ObjectName vobj) "AcDbPolyline")
	  (setq lst (mapcar '(lambda (cr) (mapcar '+ cr '(0 0))) lst)))
	(setq crs (apply 'append lst))(setq var (vlax-make-variant (vlax-safearray-fill
        (vlax-make-safearray vlax-vbDouble (cons 0 (1- (length crs)))) crs)))
	(vla-put-Coordinates vobj var)))) selset))) ;_selset
(vla-endundomark adoc)(princ))(princ "\nНаберите в командной строке p90")
Если в ответ на запрос
Цитата:
Допуск в градусах для выравнивания до 90 <любой угол>:
ввести 5, то будут обрабатываться углы 85-95 градусов

Последний раз редактировалось VVA, 19.09.2015 в 20:55.
VVA вне форума  
 
Непрочитано 24.11.2006, 13:41
#58
Кочетков Андрей

Java/Kotlin backend
 
Регистрация: 03.02.2006
Сообщений: 5,735


Комментарий к программе PL-VxRdc (прополка полилинии):

работаю с lwpolyline
она имеет свойство Замкнута

программа выдает ошибку
Код:
[Выделить все]
Command: PL-VxRdc
25 found

Command:
Введите max отклонение от прямой (H) [угловой допуск A/отклонение H] <0.15>:
ERRNO # 0: Automation Error. Invalid index

Command: *Cancel*
Снимаю атрибут Замкнута.
Программа работает корректно.
Кочетков Андрей вне форума  
 
Автор темы   Непрочитано 24.11.2006, 14:32
#59
VVA

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


Спасибо проверю
VVA вне форума  
 
Автор темы   Непрочитано 24.11.2006, 16:30
#60
VVA

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


>Кочетков Андрей Исправил. Выложил в download
VVA вне форума  
 
Непрочитано 24.11.2006, 17:23
#61
Кочетков Андрей

Java/Kotlin backend
 
Регистрация: 03.02.2006
Сообщений: 5,735


Спасибо
Кочетков Андрей вне форума  
 
Непрочитано 27.11.2006, 14:36
#62
Neznayka


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


Спасибо, но есть еще вопросы
а нельзя ли сделать так чтоб угол не вводить каждый раз. Типа как в акаде рисование окружности - старое значение по умолчанию
Neznayka вне форума  
 
Автор темы   Непрочитано 27.11.2006, 15:54
#63
VVA

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


Код:
[Выделить все]
;;;Команда выравнивает внутренние углы полилинии до 90+- допуск градусов 
;;;За основу берется самая длинная сторона 
;;;http://forum.dwg.ru/showthread.php?p=104952#post104952
(Defun C:p90 ( / Flg e1 i ang *error* crs pt0 pt1 pt2 pt3 var adoc dop1 dop2) 
(defun *error* (msg)(princ msg)(vla-endundomark adoc)) 
(defun angw1w2 (Wekt1 Wekt2 $P000 / CosA) 
(setq Wekt1 (mapcar '- Wekt1 $P000) Wekt2 (mapcar '- Wekt2 $P000) $P000 (mapcar '- $P000 $P000)) 
 (if (equal (setq CosA (/ (apply '+ (mapcar '* Wekt1 Wekt2)) 
  (distance $P000 Wekt1) (distance $P000 Wekt2))) -1.0 1e-6) Pi 
  (if (equal CosA 0.0 1e-6) Pi2 (atan (sqrt (- 1 (* CosA CosA))) CosA)))) 
(defun pline-get-verts (pline_obj / verts)(setq verts (vlax-get pline_obj 'Coordinates) 
      verts (cond ((wcmatch (vlax-get pline_obj 'Objectname ) "AcDb2dPolyline,AcDb3dPolyline") 
             (group-by-num verts 3)) 
             ((eq (vlax-get pline_obj 'Objectname )"AcDbPolyline")(group-by-num verts 2))(T nil)))) 
(defun group-by-num (lst num / ls ret)(if (= (rem (length lst) num ) 0)(progn 
(setq ls nil)(repeat (/ (length lst) num)(repeat num (setq ls (cons (car lst) ls) lst (cdr lst))) 
(setq ret (append ret (list (reverse ls))) ls nil)))) ret) 
(vl-load-com)(setq adoc (vla-get-activedocument (vlax-get-acad-object)))(vla-startundomark adoc)
(setq ang *P90-ANG*)(princ"\nДопуск в градусах для выравнивания до 90 [Любой] <")(initget "Любой Any _Any Any")
(princ (if ang (/ (* ang 180.0) pi) "любой угол"))(princ">: ")(setq ang (getangle))
(if (= ang "Any")(setq ang nil *P90-ANG* nil))(if ang (setq *P90-ANG* ang))
(if ang (setq dop1 (- (* 0.5 PI) ang) dop2  (+ (* 0.5 PI) ang)) 
(setq dop1 nil dop2 nil))(VL-PROPAGATE '*P90-ANG*) 
(princ "\nВыберите полилинии ")(setq selset (ssget "_:L" '((0 . "*POLYLINE")))) 
(if selset (progn (setq selset (mapcar 'vlax-ename->vla-object  (vl-remove-if 'listp 
 (mapcar 'cadr (ssnamex selset))))) 
 (mapcar '(lambda(vobj / ug ptS ptE)(setq crs (pline-get-verts vobj)) 
    (if   (> (length crs) 2)(progn (setq Pt1 nil pt2 nil ptS nil ptE nil var nil) 
   (setq pt1 (car crs))(mapcar '(lambda (x)(if (or (null var) (< var (distance pt1 x))) 
        (setq var (distance pt1 x) ptS pt1 ptE x))  (setq pt1 x))(cdr crs))(setq i 0 var 0) 
   (while (and i (nth i crs))(if (and (equal (nth i crs) ptS 1e-6) 
               (equal (nth (1+ i) crs) ptE 1e-6))(setq var (1+ i) i (+ (length crs) 1))) 
       (setq i (1+ i))) 
   (if (> var (* 0.5 (length crs)))(setq crs (reverse crs) i ptS ptS ptE ptE i)) 
   (setq var nil i 0 lst crs) 
   (while (and i (nth i crs)) 
     (if (and (equal (nth i crs) ptS 1e-6)(equal (nth (1+ i) crs) ptE 1e-6)) 
       (setq i nil)(setq var (append var (list (nth i crs))) 
        i   (1+ i) lst (cdr lst)))) 
   (setq crs (append lst var))(setq ang (angle (car crs) (cadr crs))) 
   (setq lst (list (car crs) (cadr crs)) crs (cddr crs)) 
   (foreach pt crs (setq pt1 (last lst)) 
     (setq pt2 (polar pt ang 100))(setq pt3 (polar pt1 (+ ang (* 0.5 PI)) 100)) 
     (setq ug (angw1w2 pt (cadr (reverse lst)) pt1)) 
     (if (or (null dop1)(and (> ug dop1)(< ug dop2))) 
       (setq pt0 (inters pt pt2 pt1 pt3 nil))(setq pt0 pt)) 
     (setq lst (append lst (list pt0)))(setq ang (angle pt1 pt0))) 
   (setq crs (reverse lst))(setq ang (angle (car lst) (cadr lst))) 
   (if (or   (equal (angle (car crs) (cadr crs)) ang 1e-6) 
      (equal (angle (car crs) (cadr crs)) (+ ang PI) 1e-6) 
      (equal (angle (car crs) (cadr crs)) (- ang PI) 1e-6)) 
     (progn (setq pt1 (car lst))(setq pt0 (car crs))(setq pt2 (polar pt0 ang 100)) 
       (setq pt3 (polar pt1 (+ ang (* 0.5 PI)) 100))(setq pt0 (inters pt0 pt2 pt1 pt3 nil)) 
       (setq lst (append (reverse (cdr crs)) (list pt0))) 
       (vla-put-Closed vobj :vlax-true)) 
     (progn (setq pt1 (car crs))(setq pt2 (cadr crs)) 
       (setq pt0 (inters (car lst) (cadr lst) pt1 pt2 nil)) 
       (if   (and pt0 (equal (angle pt2 pt1) (angle pt2 pt0) 1e-6)) 
         (progn (setq pt1 (polar (car lst) (+ ang (* 0.5 PI)) 100)) 
           (setq pt0 (inters pt2 (polar pt2 ang 100) (car lst) pt1 nil)) 
           (setq crs (cddr crs))(setq crs (append (list pt0) crs)) 
           (setq lst (reverse crs))(vla-put-Closed vobj :vlax-true))))) 
   (if (= (vla-get-ObjectName vobj) "AcDbPolyline") 
     (setq lst (mapcar '(lambda (cr) (mapcar '+ cr '(0 0))) lst))) 
   (setq crs (apply 'append lst))(setq var (vlax-make-variant (vlax-safearray-fill 
        (vlax-make-safearray vlax-vbDouble (cons 0 (1- (length crs)))) crs))) 
   (vla-put-Coordinates vobj var)))) selset))) ;_selset 
(vla-endundomark adoc)(princ))(princ "\nНаберите в командной строке p90")
Значение сохраняется в текущем сеансе редактирования

Последний раз редактировалось VVA, 19.09.2015 в 21:00.
VVA вне форума  
 
Непрочитано 18.12.2006, 11:49
#64
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Выражаю особую благодарность VVA за программу "Прополка полиинии". Очень пригодилась для значительного уменьшения количества вершин полилиний после выполнения таких преобразований: CDR->DWG->WMF->DWG.
Profan вне форума  
 
Непрочитано 18.12.2006, 13:22
#65
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Для VVA.
В вашей функции PL-L2A есть запрос:
Код:
[Выделить все]
Выберите нужный дуговой сегмент в полилинии [отмени U/радиус R/выход X] <выход>:
Наверное, надо слово "дуговой" заменить на "линейный"?
Profan вне форума  
 
Автор темы   Непрочитано 14.03.2007, 10:46
#66
VVA

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


>Profan Спасибо, Владимир. Как-то пропустил твой пост, только сейчас заметил. Заменил. Исправления от 14.03.2007
Помимо этого добавлено:
ConvTo2d -Преобразование линейных объектов в 2D полилинии
ConvTo3d -Преобразование линейных объектов в 3D полилинии
MPL -Построение средней линии
R3P -Прямоугольгик по 3-м точкам
PL-JOIN -Объединение полилиний чохом (если есть 3d полилинии, то объединяет и их тоже, но не с 2d, а между собой)
PL-JOIN3D -Объединение 3D полилиний (Отрезки + 3d полилинии)
Исправлены мелкие и не очень (спасибо KAI) глюки.
VVA вне форума  
 
Непрочитано 15.03.2007, 01:03
#67
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


Цитата:
Исправлены мелкие и не очень (спасибо KAI) глюки.
Правда еще более маленькие появились, но это мелочи.
Даже мне, зунуде, кажется, что уже все в норме. Есть конечно мелкие огрехи, кое в чем с автором я не согласен, но на то и АВТОР! Ему видней.
А в целом комплекс ОЧЕНЬ хороший! Рекомендую!
Огромное спасибо VVA!
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
 
Непрочитано 15.03.2007, 06:35
#68
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Для VVA.
Вот ЗДЕСЬ есть еще программа Евгения Елпанова "Изменение начальной и конечной ширины произвольного сегмента полилинии". Вы не хотите включить ее или ваш аналог в пакет PLTOOLS?
Правильно вы сделали, что сгруппировали кнопки.
Profan вне форума  
 
Автор темы   Непрочитано 18.04.2007, 18:25
#69
VVA

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


Поступают просьбы добавить команду, чтоб выбирать надо было бы только один объект, а команда объединяла все примыкающие объекты (линии, полилинии, дуги...) в полилинию.
Выкладываю на тестирование и для предложений/замечаний.
Алгорити взят у ChainSelect Fatty
Код:
[Выделить все]
;;* Утилита объединения набора линий в полилинию*
;;------------------------------------------------
;;Алгорити взят у ChainSelect Fatty
;;http://www.cadforyou.spb.ru/index.php?current_section=section_programs_page
;;Доработан до понимания ARC,PLINE,LINE
;;Для выполнения необходимо указать только точку
;; pt - точка в мировой системе координат !!!
;;    - или имя (ENAME VLA-OBJECT) начального примитива
;; fuzz - точность
;;Возвращает список vla объектов
(defun ChainSelectFromAny ( pt fuzz / chain_list couple ept line_list ln loop pda spt ss ln1 cycl)
(vl-load-com)
(cond ((= (type pt) 'ENAME)
       (setq ln (vlax-ename->vla-object pt)
             pt nil
             )
       )
      ((= (type pt) 'VLA-OBJECT)(setq ln pt pt nil))
      (t nil))
(if (setq ss (ssget "_I")
          ss nil
          ss (ssget "_X" '((0 . "ARC,LINE,*POLYLINE")))
    ) ;_ end of setq
  (progn
    (if pt
      (progn
        (setq ln1 (vla-addLine
                    (if (and (zerop (vla-get-activespace (vla-get-activedocument (vlax-get-acad-object))))
                             (= :vlax-false (vla-get-mspace (vla-get-activedocument (vlax-get-acad-object))))
                             ) ;_ end of and
                      (vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object)))
                      (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
               (vlax-3d-point pt)
               (vlax-3d-point (mapcar '- pt '(1 1 0)))))
        (setq ln ln1)))
     (setq spt (vlax-curve-getStartPoint ln)
           ept (vlax-curve-getEndPoint ln))
    (setq line_list  (mapcar 'vlax-ename->vla-object
                             (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
                     ) ;_ end of mapcar
          chain_list nil
          chain_list (cons ln chain_list)
    ) ;_ end of setq
    (setq line_list (vl-remove-if
                      '(lambda (x)
                         (eq "AcDb3dPolyline" (vla-get-objectname x))
                       ) ;_ end of lambda
                      line_list
                    ) ;_ end of vl-remove-if
    ) ;_ end of setq
    (setq loop t cycl 0)
    (while loop
     (while
        (setq couple
               (vl-remove-if-not
                 (function (lambda (x)
                             ;; значение допуска 0.01 можно изменить по ситуации
                             ;; в зависимости от единиц черчения : 
                             (or (equal (vlax-curve-getStartPoint x)
                                        (vlax-curve-getStartPoint ln)
                                        fuzz      ;<--- допуск 
                                 ) ;_ end of equal
                                 (equal (vlax-curve-getStartPoint x)
                                        (vlax-curve-getEndPoint ln)
                                        fuzz     ;<--- допуск 
                                 ) ;_ end of equal
                                 (equal (vlax-curve-getEndPoint x)
                                        (vlax-curve-getStartPoint ln)
                                        fuzz     ;<--- допуск 
                                 ) ;_ end of equal
                                 (equal (vlax-curve-getEndPoint x)
                                        (vlax-curve-getEndPoint ln)
                                        fuzz     ;<--- допуск 
                                 ) ;_ end of equal
                             ) ;_ end of or
                           ) ;_ end of lambda
                 ) ;_ end of function
                 line_list
               ) ;_ end of vl-remove-if-not
        ) ;_ end of setq
       (grtext -1 (strcat "Обработка. Цикл - " (itoa (setq cycl (1+ cycl)))))
         (if couple
           (progn
             (setq chain_list (append couple chain_list))
             (setq line_list (vl-remove ln line_list))
             (setq ln (car chain_list))
           ) ;_ end of progn
           (setq line_list (cdr line_list))
         ) ;_ end of if
      ) ;_ end of while
      (setq loop nil)
    ) ;_ end of while
  ) ;_ end of progn
) ;_ end of if
  (setq chain_list (vl-remove ln1 chain_list))
  (if (= (type ln1) 'VLA-OBJECT)(vl-catch-all-apply 'vla-erase (list ln1)))
  (vl-cmdf "_.redraw")
  chain_list
)


;;;-----------------------------------------------------------------------------------
;;;-----------------------------------------------------------------------------------
;;;  KB:mark
;;;* Mark data base to allow KB:catch.
;;;*http://www.theswamp.org/index.php?topic=15863.0
(defun mip:mark (/ val)
   (setq val (getvar "cmdecho"))
   (setvar "cmdecho" 0)
   (if (setq *mip:mark (entlast))
      nil
      (progn (entmake '((0 . "point") (10 0.0 0.0 0.0)))
             (setq *mip:mark (entlast))
             (entdel *mip:mark)
      )
   )
   (setvar "cmdecho" val)
   (princ)
)
;;;-----------------------------------------------------------------------------------
;;;-----------------------------------------------------------------------------------
;;;  KB:catch
;;;* returns selection set of entities since last KB:mark.
;;;*
(defun mip:get-last-ss (/ ss tmp)
   (if *mip:mark
      (progn (setq ss (ssadd))
             (while (setq *mip:mark (entnext *mip:mark)) (ssadd *mip:mark ss))
             (command "._select" ss "")
             (setq tmp ss)
      )
      (alert "*mip:mark not set. \n run (mip:mark) before mip:get-last-ss.")
   )
)
;;;------------------------------------------------------------------
;;;------------------------------------------------------------------



(defun C:CSS ( / ss pda en fuzz)
 (vl-load-com)
 (if (and (setq en (car(entsel "\nВыбрать первую или последнюю линию в цепи :")))
          (wcmatch (cdr(assoc 0 (entget en))) "ARC,LINE,*POLYLINE"))
 (progn
 (if (null (setq fuzz (getdist "\nЗначение допуска < 0.01 >: ")))
   (setq fuzz 0.01))
 (setq ss (ssadd))
 (foreach item (setq lst (ChainSelectFromAny en (+ fuzz 1e-6)))
      (ssadd (vlax-vla-object->ename item) ss)
    )
  (mip:mark)
  (vl-catch-all-apply '(lambda()
    (setq pda (getvar "peditaccept"))
    (setvar "peditaccept" 1)
    (command "_pedit" "_M" ss "" "_j" "_j" "_b" fuzz "")
    (setvar "peditaccept" pda))
    )
   (setq lst (vl-remove-if 'vlax-erased-p lst))
  (if (setq ss nil ss (mip:get-last-ss))
    (progn
      (if lst
        (foreach item lst (ssadd (vlax-vla-object->ename item) ss)))
      (sssetfirst ss ss)))

  (setq ss nil)
  )
   )
  (princ)
  )
(defun C:CSP ( / ss pt1 pda lst fuzz)
 (vl-load-com)  
 (initget 1)
 (setq pt1 (getpoint "\nТочка начала объединения:"))
  (if (null (setq fuzz (getdist "\nЗначение допуска < 0.01 >: ")))
   (setq fuzz 0.01))
 
 (setq ss (ssadd))
 (foreach item (setq lst (ChainSelectFromAny (trans pt1 1 0)(+ fuzz 1e-6)))
      (ssadd (vlax-vla-object->ename item) ss)
    )
  (mip:mark)
  (vl-catch-all-apply '(lambda()
    (setq pda (getvar "peditaccept"))
    (setvar "peditaccept" 1)
    (command "_pedit" "_M" ss "" "_j" "_j" "_b" fuzz "")
    (setvar "peditaccept" pda))
    )
  (setq lst (vl-remove-if 'vlax-erased-p lst))
  (if (setq ss nil ss (mip:get-last-ss))
    (progn
      (if lst
        (foreach item lst (ssadd (vlax-vla-object->ename item) ss)))
      (sssetfirst ss ss)))
;;;  (setq ln (entlast))
;;;  (if (and (wcmatch (cdr(assoc 0 (entget ln))) "*POLYLINE")
;;;           (not(lwcl ln)))
;;;           (plineLW-reverse ln))
  (setq ss nil)
  (princ)
  )

(princ "\nНаберите CSP или CSS в командной строке")
Две команды
CSS - объединение путем выбора притива
CSP - объединение путем указания точки
VVA вне форума  
 
Непрочитано 19.04.2007, 03:15
#70
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


>> VVA
Очень интересно! Но:

0. Мур-мур от команд надо-бы отключить.

1. CSS. В одном из моих отладочных чертежей вылезла следующая ошибка (правда там объекты отрисованы в разных UCS и ужасная мешанина из объектов):

Command: CSS
Выбрать первую или последнюю линию в цепи :
Значение допуска < 0.01 >:
; error: bad argument value: AcDbCurve 2130505112

2. CSS. 3DPoly следует исключать из набора, иначе получается следующая картина:

---3DPoly в конце цепочки------------

Command: css
Выбрать первую или последнюю линию в цепи :
Значение допуска < 0.01 >:
_.redraw
Command: _pedit Select polyline or [Multiple]: _M
Select objects: 9 found

Select objects:
Enter an option [Close/Open/Join/Width/Fit/Spline/Decurve/Ltype gen/Undo]: _j
Join Type = Both (Extend or Add)
Enter fuzz distance or [Jointype] <0.010>: _j
Enter join type [Extend/Add/Both] <Both>: _b
Join Type = Both (Extend or Add)
Enter fuzz distance or [Jointype] <0.010>: 0.010000000000000
8 segments added to polyline

Enter an option [Close/Open/Join/Width/Fit/Spline/Decurve/Ltype gen/Undo]:
Command: ._select
Select objects: 0 found
Select objects:

---3DPoly в начале----------------------

Command: CSS
Выбрать первую или последнюю линию в цепи :
Значение допуска < 0.01 >:
_.redraw
Command: _pedit Select polyline or [Multiple]: _M
Select objects: 10 found

Select objects:
Enter an option [Close/Open/Spline curve/Decurve/Undo]: _j
Invalid option keyword.

Enter an option [Close/Open/Spline curve/Decurve/Undo]: ._select
Invalid option keyword.
; error: Function cancelled

Enter an option [Close/Open/Spline curve/Decurve/Undo]:

3. CSP. Похоже точку надо указывать точно на узле объекта?

4. Для PEDITACCEPT лучше применять конструкцию:
(if (getvar "PEDITACCEPT");для 2006>>
(progn
(setq pda (getvar "PEDITACCEPT"))
(setvar "PEDITACCEPT" 1)
)
)
Вдруг прогу запустят в acad 2005?

5. CSS. Кроме 3DPoly, думаю следует проверять еще и линии (они должны лежать в одной плоскости), а то получается, что грипсы загораются на всей цепочке, но это только видимость! Если последняя линия не в плоскости полилинии.

6. На мой взгляд, fuzz по умолчанию лучше бы сделать 0.0, будем приучать пользователей к точности.
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
 
Автор темы   Непрочитано 19.04.2007, 11:50
#71
VVA

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


> 0. Мур-мур от команд надо-бы отключить
Извини, не понял о чем речь
>1. CSS. В одном из моих отладочных чертежей вылезла следующая >ошибка (правда там объекты отрисованы в разных UCS и ужасная >мешанина из объектов):
Попробуй проверить этот чертеж _audit или _recover. Это помогло на том глючном файле, который ты присылал раньше.
>2. CSS. 3DPoly следует исключать из набора, иначе получается >следующая картина:
Пришли файл, т.к. 3dpoly исключаю
Код:
[Выделить все]
(setq line_list (vl-remove-if
                      '(lambda (x)
                         (eq "AcDb3dPolyline" (vla-get-objectname x))
                       ) ;_ end of lambda
                      line_list
                    ) ;_ end of vl-remove-if
    ) ;_ end of setq
>3. CSP. Похоже точку надо указывать точно на узле объекта?
Да
>4. Для PEDITACCEPT лучше применять конструкцию:
PEDITACCEPT появилась с 2004 Автокада. Не знаю, есть ли смысл ввводить проверку?

>5. CSS. Кроме 3DPoly, думаю следует проверять еще и линии (они >должны лежать в одной плоскости), а то получается, что грипсы >загораются на всей цепочке, но это только видимость! Если >последняя линия не в плоскости полилинии.
Здесь принцип такой: строится список объектов с совпадающими началом/концом и отдается на откуп _PEDIT _M. А уж сколь там контуров построит PEDIT одному Autodesk'у известно. Грипсами подсвечивается все, что получилось (или осталось). Это могут быть и несколько контуров, или (и) не объединенные LINE. Почему проскальзывают 3dpoly пока не понятно?

>6. На мой взгляд, fuzz по умолчанию лучше бы сделать 0.0, будем >приучать пользователей к точности.
Это правильно.

Еще терзают смутные сомнения в необходимости CSP.
VVA вне форума  
 
Автор темы   Непрочитано 19.04.2007, 11:51
#72
VVA

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


> 0. Мур-мур от команд надо-бы отключить
Имеется ввиду CMDECHO?
VVA вне форума  
 
Непрочитано 20.04.2007, 04:11
#73
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


>> VVA

>0. Именно CMDECHO.

>1. CSS. В одном из моих отладочных чертежей вылезла ошибка...

Audit and Recover не помогло.

>2. CSS. 3DPoly следует исключать из набора...

Если 3DPoly в конце - все OK.
А вот если в начале, то ....

>4. Для PEDITACCEPT

Отнюдь не все перешли еще на 2004>>

>5. CSS. Линии не в плоскости.

Может лучше подсветить грипсы для итоговой полилинии, а не для набора, передаваемого в PEdit?

> Еще терзают смутные сомнения в необходимости CSP.

Наверное, это не нужно, что-то никак не могу придумать в каких ситуациях это будет полезно.

И еще заметил. Если выбирать дугу, расположенную в середине цепочки, то CSS вроде логично объединяет дугу с последующими объектами (предыдущие не объединяются, предыдущий объект линия).
Но если выбрать линию (дугу) в середине цепочки, то объединяются выбранный объект и последующие и почему-то один предыдущий линия (или дуга при выборе дуги).
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
 
Автор темы   Непрочитано 20.04.2007, 16:55
#74
VVA

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


Вот новый вариант
Код:
[Выделить все]
;;* Утилита объединения набора линий в полилинию*
;;------------------------------------------------
;;Алгорити взят у ChainSelect Fatty
;;http://www.cadforyou.spb.ru/index.php?current_section=section_programs_page
;;Доработан до понимания ARC,PLINE,LINE
;;Для выполнения необходимо указать только точку
;; pt - точка в мировой системе координат !!!
;;    - или имя (ENAME VLA-OBJECT) начального примитива
;; fuzz - точность
;;Возвращает список vla объектов
(defun ChainSelectFromAny ( pt fuzz / chain_list couple ept line_list ln loop pda spt ss ln1 cycl)
(vl-load-com)
(cond ((= (type pt) 'ENAME)
       (setq ln (vlax-ename->vla-object pt)
             pt nil))
      ((= (type pt) 'VLA-OBJECT)(setq ln pt pt nil))
      (t nil))
(if (setq ss (ssget "_I") ss nil
          ss (ssget "_X" '((0 . "ARC,LINE,*POLYLINE")))) ;_ end of setq
  (progn
    (if pt (progn
      (setq ln1 (vla-addLine
            (if (and (zerop (vla-get-activespace (vla-get-activedocument (vlax-get-acad-object))))
                     (= :vlax-false (vla-get-mspace (vla-get-activedocument (vlax-get-acad-object))))) ;_ end of and
                      (vla-get-paperspace (vla-get-activedocument (vlax-get-acad-object)))
                      (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
               (vlax-3d-point pt)(vlax-3d-point (mapcar '- pt '(1 1 0)))))
        (setq ln ln1)))
     (setq spt (vlax-curve-getStartPoint ln)  ept (vlax-curve-getEndPoint ln))
    (setq line_list  (mapcar 'vlax-ename->vla-object
                             (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
                     ) ;_ end of mapcar
          chain_list nil
          chain_list (cons ln chain_list)) ;_ end of setq
    (setq line_list (vl-remove-if
                      '(lambda (x)(eq "AcDb3dPolyline" (vla-get-objectname x)))
                      line_list)) ;_ end of setq
    (setq loop t cycl 0)
    (while loop
     (while
        (setq couple
               (vl-remove-if-not
                 (function (lambda (x)
                             ;; значение допуска 0.01 можно изменить по ситуации
                             ;; в зависимости от единиц черчения : 
                             (or (equal (vlax-curve-getStartPoint x)
                                        (vlax-curve-getStartPoint ln)
                                        fuzz      ;<--- допуск 
                                 ) ;_ end of equal
                                 (equal (vlax-curve-getStartPoint x)
                                        (vlax-curve-getEndPoint ln)
                                        fuzz     ;<--- допуск 
                                 ) ;_ end of equal
                                 (equal (vlax-curve-getEndPoint x)
                                        (vlax-curve-getStartPoint ln)
                                        fuzz     ;<--- допуск 
                                 ) ;_ end of equal
                                 (equal (vlax-curve-getEndPoint x)
                                        (vlax-curve-getEndPoint ln)
                                        fuzz     ;<--- допуск 
                                 ) ;_ end of equal
                             ) ;_ end of or
                           ) ;_ end of lambda
                 ) ;_ end of function
                 line_list
               ) ;_ end of vl-remove-if-not
        ) ;_ end of setq
       (grtext -1 (strcat "Обработка. Цикл - " (itoa (setq cycl (1+ cycl)))))
         (if couple (progn
             (setq chain_list (append couple chain_list))
             (setq line_list (vl-remove ln line_list))
             (setq ln (car chain_list))) ;_ end of progn
           (setq line_list (cdr line_list))) ;_ end of if
      ) ;_ end of while
      (setq loop nil)
    ) ;_ end of while
  ) ;_ end of progn
) ;_ end of if
  (setq chain_list (vl-remove ln1 chain_list))
  (if (= (type ln1) 'VLA-OBJECT)(vl-catch-all-apply 'vla-erase (list ln1)))
  (vl-cmdf "_.redraw") chain_list)

;;;* Mark data base to allow KB:catch.
;;;* http://www.theswamp.org/index.php?topic=15863.0
(defun mip:mark (/ val)
 (setq val (getvar "cmdecho"))(setvar "cmdecho" 0)
   (if (setq *mip:mark (entlast)) nil
      (progn (entmake '((0 . "point") (10 0.0 0.0 0.0)))
             (setq *mip:mark (entlast))
             (entdel *mip:mark)))
   (setvar "cmdecho" val)(princ))
;;;* returns selection set of entities since last KB:mark.
(defun mip:get-last-ss (/ ss tmp val)
(setq val (getvar "cmdecho"))(setvar "cmdecho" 0)
(if *mip:mark (progn (setq ss (ssadd))
 (while (setq *mip:mark (entnext *mip:mark))(ssadd *mip:mark ss))
 (command "._select" ss "")(setq tmp ss ss nil));_progn
 (alert "*mip:mark not set. \n run (mip:mark) before mip:get-last-ss."));_if
 (setvar "cmdecho" val) tmp)
(defun C:CSS ( / ss pda en fuzz val)
 (vl-load-com)(setq val (getvar "cmdecho"))(setvar "cmdecho" 0)
 (if (and (setq en (car(entsel "\nВыбрать первую или последнюю линию в цепи :")))
          (wcmatch (cdr(assoc 0 (entget en))) "ARC,LINE,*POLYLINE")
          (setq en (vlax-ename->vla-object en))
          (/= "AcDb3dPolyline" (vla-get-objectname en))
          )
 (progn
 (if (null (setq fuzz (getdist "\nЗначение допуска < 0 >: ")))(setq fuzz 0))
 (setq ss (ssadd))
 (foreach item (setq lst (ChainSelectFromAny en (+ fuzz 1e-6)))
      (ssadd (vlax-vla-object->ename item) ss))
  (mip:mark)
  (vl-catch-all-apply '(lambda()
  (if (setq pda (getvar "PEDITACCEPT"))(progn
    (setq pda (getvar "peditaccept"))
    (setvar "peditaccept" 1)
    (command "_pedit" "_M" ss "" "_j" "_j" "_b" fuzz "")
    (setvar "peditaccept" pda))
    (command "_pedit" "_M" ss "" "_Y" "_j" "_j" "_b" fuzz ""))))
   (setq lst (vl-remove-if 'vlax-erased-p lst))
  (if (setq ss nil ss (mip:get-last-ss))(progn
      (if lst (foreach item lst (ssadd (vlax-vla-object->ename item) ss)))
      (setq fuzz 0)
      (while (setq en (ssname ss fuzz))
        (if (/= (cdr(assoc 0 (entget en))) "LWPOLYLINE")
          (ssdel en ss)
          (setq fuzz (1+ fuzz))))
      (sssetfirst ss ss)))
  (setq ss nil)
  )
   (princ "\nНеобходимо выбрать ОТРЕЗОК, ДУГУ, или Полилинию")
   )
(setvar "cmdecho" val)(princ)
)
(princ "\nНаберите CSS в командной строке")
VVA вне форума  
 
Непрочитано 21.04.2007, 02:21
#75
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


>> VVA
Может это старческое брюзжание, но:

1. Болезнь отмены работы программы так и не преодолена, для отмены нужно 2 раза посылать команду U (это касается и программ комплекса pltools).
2. Все-таки логичнее будет, если пользователь выбирает объект вблизи будущего начала полилинии и к нему добавляются только объекты, примыкающие к концу этого объекта! Сейчас же, похоже, объединение выполняется в зависимости от направления исходных объектов, причем объединение происходит в режиме: все в одном направлении + один объект в противоположном.
3. Перед началом работы программы следует сбросить грипсы. Если после CSS снова ее запускаем (грипсы на предыдущей не сброшены), то после указания нового объекта для объединения получаем ошибку:

Command: CSS
Выбрать первую или последнюю линию в цепи :
Значение допуска < 0 >:

Invalid option keyword.

Invalid option keyword.
; error: Function cancelled

Enter an option [Close/Join/Width/Edit vertex/Fit/Spline/Decurve/Ltype
gen/Undo]:

А в целом, можно уже помещать ее в PLTolls.
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
 
Непрочитано 26.04.2007, 13:28
#76
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Для VVA.
Панель "Толщины полилиний" лучше назвать "Ширина новой полилинии". А в программе не мешало бы учесть "DIMSCALE".
Profan вне форума  
 
Автор темы   Непрочитано 26.04.2007, 16:21
#77
VVA

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


Цитата:
А в программе не мешало бы учесть "DIMSCALE"
С этого места поподробнее. На что может влиять DimScale?
VVA вне форума  
 
Непрочитано 26.04.2007, 16:34
#78
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Да вот, например. Архитекторы чертят план в масштабе 1:1, а выводить на печать будут из модели в масштабе 1:100. Все размерные величины (и тексты) соответственно увеличены в 100 раз. Для этого задается переменная "DIMSCALE" равная 100. В этих условиях ширина полилинии должна быть, для примера, не 0.5, а 50. Поэтому я и предположил, что, если "DIMSCALE" > 1, то и ширину полилинии надо устанавливать равной, скажем, 0.5 x (getvar "DIMSCALE"). Возможно, это спорный момент.
Profan вне форума  
 
Автор темы   Непрочитано 07.05.2007, 10:27
#79
VVA

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


> Krieger №18
Цитата:
А как сделать реверс дуговых сегментов?
Как ни крути тип линии в одну сторону направлен.
AutoCAD2007
> Кулик Алексей aka kpblc №19
Цитата:
Это не сделать, наколько я помню, вообще никак. Только если изготовить новый тип линии и его назначать на полилинию
Может уже давно всем это известно, но для себя открыл недавно.
На дуговых сегментах полилинии тип линий может быть "вверх тормашками", причем реверс не помогает. Этот артефакт можно побороть, если в полилинии включить "генерацию типа линий".

Последний раз редактировалось VVA, 19.09.2015 в 22:56.
VVA вне форума  
 
Непрочитано 07.05.2007, 10:43
#80
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Вах-вах-вах! Позор на мою дурную голову! Я этого не знал! Вай-вай-вай!
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.05.2007, 01:16
#81
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


А я посыплю голову пеплом!
p.s. А что уже начали проектировать газопроводы по дугам! Как я отстал!
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
 
Автор темы   Непрочитано 08.05.2007, 10:23
#82
VVA

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


>KAI это для наглядности. А так см. Krieger №18 (сварной шов).
Хотя с приходом пластика не удивлюсь, если в проекте будет написано "Трубу согнуть по месту"
VVA вне форума  
 
Автор темы   Непрочитано 12.12.2007, 17:09
#83
VVA

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


>Profan # 76,78
По поводу учета толщины полилинии и DIMSCALE все решается через меню. Добавил панель "Ширина полилинии*Dimscale". Выложил в download. Обновление от 12.12.2007. Ссылка в 1 посте
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 13.11.2009 в 20:23. Причина: орфография
VVA вне форума  
 
Непрочитано 12.12.2007, 18:41
#84
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Хорошо.
Profan вне форума  
 
Непрочитано 27.12.2007, 21:00
#85
plugins


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


В файле новом файле dnl607.rar загружаемом со страницы http://dwg.ru/dnl/607 обновлены только history.txt, pltools.mnu и pltools.mns.
Все остальные файлы к сожалению от 13,03,2007
plugins вне форума  
 
Автор темы   Непрочитано 28.12.2007, 11:11
#86
VVA

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


Да, пока так и есть. См. #83. Планирую обновления выложить после праздников. Основные отличия - переработаны алгоритмы оптимизации (прополки) полилинии + прополка (PL-VxRdc) восстанавливает дуговые сегменты. В данный момент переписываю алгоритм PL-DIV. Если успею, добавлю новую команду переноса сегмента полилинии по вертикали (а может и по горизонтали) с учем разных вертикальных и горизонтальных масштабов. Написал по заказу дорожников, для работы с профилями
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 28.12.2007, 15:17
#87
plugins


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


Спасибо Вам огромное. Ваши программы увеличивают возможности автокада в несколько раз. Раньше пользовался ToolPack, теперь уже почти год Вашим пакетом. Работает отлично, без каких либо глюков и ошибок. Единственно где были проблемы, так это в программе VxRdc (с дугами, а также очень медленно работает при количестве точек порядка 7000). Проблему с дугами решил для себя заменив фрагмент:

if (or (and (vlax-method-applicable-p pl 'Getbulge)
(zerop (vla-GetBulge pl (1- n))))
(not (vlax-method-applicable-p pl 'Getbulge))
(and (vlax-method-applicable-p pl 'Getbulge)
(not (zerop (vla-GetBulge pl (1- n))))
pang
))

На

if (zerop (vla-GetBulge pl (1- n)))

Очень рад что после праздников может быть будет оптимизация.

Последний раз редактировалось plugins, 28.12.2007 в 15:43.
plugins вне форума  
 
Автор темы   Непрочитано 24.01.2008, 18:54
#88
VVA

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


Ну вот, свершилось. Выложил новую версию (обновление от 24.01.2008).
Кратко что нового:
Новые команды
PL-CSE -Объединение 2d полилиний по примитиву
PL-SgWidth -Изменить ширину сегмента полилинии

Переписан алгоритм PL-DIV и PL-DIVALL (теперь все делается геометрически)
Переписана и оптимизирована PL-VxRdc (теперь восстанавливает и дуговые сегменты)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 25.01.2008, 09:39
#89
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Для VVA.
При выполнении команды PL-JOIN получил сообщение:
Код:
[Выделить все]
 
ERRNO # 0: no function definition: LIB:SELSET-TO-VLALIST
Хотел объединить 3 отрезка в полилинию. Не получилось. _PEDIT объединяет нормально.
Profan вне форума  
 
Автор темы   Непрочитано 25.01.2008, 14:08
#90
VVA

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


Спасибо Владимир, Александр (KAI) мне уже сообщил. Обновил сборку (от 25.01.2008). Найденные Александром отсальные глюки (в основном при работе с тяжелыми [2d] полилиниями) устраню на досуге. Постараюсь не добавить новых.
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 25.01.2008 в 14:38. Причина: Склероз и невнимательность
VVA вне форума  
 
Непрочитано 30.01.2008, 16:46
#91
rus22


 
Регистрация: 30.07.2007
Беларусь
Сообщений: 101


(Продублировал с доунлоада)

А есть ли там функция объеденить в полилинию все отрезки на прямой? Или надо добавить?
Например делаем сечение втулки, кольца, итд, чтобы сделать разрез нужно линии объеденить, joynt конечно помогает но было бы проще одним щелчком или с промежуточным подтверждением, чтобы убедиться что не захвачены линии не входящие в этот объект

Загрузил прогу подключил, а то о чем писал один пост назад (объединение нескольких отрезков на одной прямой в одну сплошную полилинию у меня не получилось, команда (привожу дословно) ОБЪЕДИНИТЬ ВЫБРАННОЕ В 2d ПОЛИЛИНИИ , всего лишь ПРЕОБРАЗОВЫВАЕТ их, но НЕОБЪЕДИНЯЕТ!

Никаких ошибок не сообщает. АКАД2007русифицированный(неРУС)
rus22 вне форума  
 
Автор темы   Непрочитано 30.01.2008, 17:07
#92
VVA

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


Выложи сюда фрагмент чертежа.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 30.01.2008, 23:57
#93
rus22


 
Регистрация: 30.07.2007
Беларусь
Сообщений: 101


Выкладываю
ACAD2007 (русификация)
Кстати стоит SPDS4 на всякий случай...
Вложения
Тип файла: dwg
DWG 2004
Пример PLTOOLS.dwg (47.9 Кб, 3533 просмотров)
rus22 вне форума  
 
Непрочитано 31.01.2008, 09:04
#94
Valery Brelovsky

Инженер дорожник
 
Регистрация: 22.10.2007
Израиль
Сообщений: 1,859


Для объединения в полилинию пользуюсь макросом. Данный макрос позволяет не вязку линий, в данном случае 10 в плане. Само собой, что линии на разных уровнях и с разными координатами по Z начала и конца линии, а также 3D линии.

^C^C(progn(setq ssnab (ssget "_I"))(while (not ssnab)(setq ssnab (ssget)))(command "_pedit" "_Multiple" ssnab "" "_Y" "_Join" 10.00 ""));
Valery Brelovsky вне форума  
 
Непрочитано 31.01.2008, 09:18
#95
Valery Brelovsky

Инженер дорожник
 
Регистрация: 22.10.2007
Израиль
Сообщений: 1,859


Цитата:
Сообщение от rus22 Посмотреть сообщение
Выкладываю
ACAD2007 (русификация)
Кстати стоит SPDS4 на всякий случай...
Посмотрел и ваш пример. Если речь идёт о трёх отрезках так между концами отрезков почти 500 мм. Концы отрезков должны совпадать тогда они объедятся через редактирование полилилнии объединить. Команда _join она продлевает и объединяет если отрезки лежат на одной прямой.
Valery Brelovsky вне форума  
 
Автор темы   Непрочитано 31.01.2008, 09:35
#96
VVA

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


>rus22 Можешь воспользаваться макросом #94. В pltools есть справке, а в енй написано
Цитата:
При объединени полилиний значение допуска (fuzz distance) принимается равным 0!.
В твоем случае невязку нужно задавать где-то 500 единиц.
Кстати твой отрезки прекрасно объединила новая команда PL-CSE с значением допуска 500
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 01.02.2008, 06:05
#97
rus22


 
Регистрация: 30.07.2007
Беларусь
Сообщений: 101


Блин сообщение с благодарностью куда-то делось

Спасибо за разъяснение ещё раз
эти функции казались очевидными (объединение строк) в необходимости однако с наскоку не получилось, поэтому может в хелп стоит добавить пару строк, да и вообще комментировать в каких случаях большинство участвовавших каким-либо образом в разработке этого хорошего набора его применяют
rus22 вне форума  
 
Непрочитано 01.02.2008, 06:06
#98
rus22


 
Регистрация: 30.07.2007
Беларусь
Сообщений: 101


>>>>очевидными (объединение строк)

Пардон ошибся - линий с разрывами на одной прямой
rus22 вне форума  
 
Непрочитано 01.02.2008, 17:13
#99
Владимир.

Проектирую
 
Регистрация: 10.01.2005
Сообщений: 3,735


Цитата:
Сообщение от KAI Посмотреть сообщение
А что уже начали проектировать газопроводы по дугам!
Всю жизнь был "радиус естественного изгиба" у подземных трубопроводов
Владимир. вне форума  
 
Непрочитано 13.03.2008, 21:48
#100
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


VVA, Только что узнал что PLtools это твоих рук творение. Я без нее давно AutoCAD не представляю. Спасибо большое.
Есть кое что в PLtools, что мне хотелось бы слегка подкорректировать. Когда добавляешь вершину в полилинию почему-то работает только привязка nearest, тогда как очень бывает нужно чтобы работали и другие привязки. Извиняюсь если этот вопрос уже обсуждали. Форум весь я не читал.
Red Nova вне форума  
 
Автор темы   Непрочитано 14.03.2008, 09:21
#101
VVA

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


Это связано с тем, что за один раз указывается точка и по этой точке выбирается полилиния. Привязки действуют, но только временные. Нажми Shift+ правый клик и выбери нужную.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 14.03.2008, 10:59
#102
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Есть идея новой команды. Часто бывает нужно удалить один из сегментов полилинии, нажал на сегмент и он удален. Может такое уже было, но я не встречал.
Red Nova вне форума  
 
Непрочитано 14.03.2008, 11:01
#103
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


_.break, что ли?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.03.2008, 11:33
#104
VVA

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


>Red Nova И что остается потом?
Если 2 полилинии, то _.break
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 14.03.2008, 11:44
#105
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,824
<phrase 1=


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
_.break, что ли?
похоже, но наверно хочется чтоб простым указаниием мышкой, что-то вроде этого
Нажмите на изображение для увеличения
Название: sdfsdfsd.jpg
Просмотров: 380
Размер:	16.6 Кб
ID:	4277
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 14.03.2008, 11:49
#106
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от zenon Посмотреть сообщение
похоже, но наверно хочется чтоб простым указаниием мышкой, что-то вроде этого
Вложение 4277
команда trim из экспрессов, делает все именно так...
Елпанов Евгений вне форума  
 
Непрочитано 14.03.2008, 12:19
#107
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,824
<phrase 1=


Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
команда trim из экспрессов, делает все именно так...
Угу, вот только еще удаляет то что не надо удалять, да и 2 клика нужно
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 14.03.2008, 12:26
#108
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


zenon, Во во, именно так.
Елпанов Евгений, Енто где, я не нашел в express такого
Red Nova вне форума  
 
Непрочитано 14.03.2008, 14:16
#109
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Red Nova Посмотреть сообщение
zenon, Во во, именно так.
Елпанов Евгений, Енто где, я не нашел в express такого
Пример:
Изображения
Тип файла: gif 01_028.gif (78.5 Кб, 931 просмотров)
Елпанов Евгений вне форума  
 
Непрочитано 14.03.2008, 14:22
#110
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,824
<phrase 1=


3 клика, нужен 1
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 14.03.2008, 15:16
#111
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Елпанов Евгений, А если линии разных полилиний пересекаются? Trim не всегда то.
Red Nova вне форума  
 
Непрочитано 15.03.2008, 00:22
#112
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Ну если сильно хочется одним кликом, попробуйте:
Код:
[Выделить все]
(defun c:mod-break (/ *error* adoc ent pt_near pt_prev pt_next param)
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (if
    (and
      (not (vl-catch-all-error-p
             (vl-catch-all-apply
               '(lambda () (setq ent (entsel "\nУкажите полилинию <Отмена> : ")))
               ) ;_ end of vl-catch-all-apply
             ) ;_ end of vl-catch-all-error-p
           ) ;_ end of not
      (= (cdr (assoc 0 (entget (car ent)))) "LWPOLYLINE")
      ) ;_ end of and
     (progn
       (setq pt_near (cadr ent)
             ent     (vlax-ename->vla-object (car ent))
             pt_near (vlax-curve-getclosestpointto ent pt_near)
             pt_prev (vlax-curve-getpointatparam
                       ent
                       (setq param (fix (vlax-curve-getparamatpoint ent pt_near)))
                       ) ;_ end of vlax-curve-getPointAtParam
             pt_next (vlax-curve-getpointatparam ent (1+ param))
             ) ;_ end of setq
       (command "_.break"
                "_none"
                (vlax-vla-object->ename ent)
                "_none"
                pt_prev
                "_none"
                pt_next
                ) ;_ end of command
       ) ;_ end of progn
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Код особо не гонял, предупреждаю сразу.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.03.2008, 09:47
#113
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Когда kpblc вылезает с entsel'ом с последующим vl-ename->vla-jbject'ом, у меня начинается изжога с скердцебиением. А потому - мои бесценные два цента.
Код:
[Выделить все]
(defun c:mod-break (/ *error* adoc util ent pt asp param par_end pts add)
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object))
        util (vla-get-utility adoc))
  (vla-startundomark adoc)
  (if (not (vl-catch-all-error-p (vl-catch-all-apply
               '(lambda () (vla-getEntity util 'ent 'pt "\nУкажите полилинию <Отмена> : ")))));not
     (progn
       (setq asp (vla-ObjectIDToObject adoc (vla-get-OwnerID ent))
             pt (vlax-curve-getclosestpointto ent (vlax-safearray->list pt)))             
       (vla-InitializeUserInput util 128 "Начало Конец")
       (setq kw (vla-getKeyword util "Отрезать [Начало/Конец] <Конец>: "))
       (if (= kw "") (set kw "Конец")) 
       (if (= kw "Конец") (setq param 0 par_end (vlax-curve-getparamatpoint ent pt))
         (setq param (1+ (fix (vlax-curve-getparamatpoint ent pt)))
               par_end (vlax-curve-getendparam ent)));if
       (while (<= param par_end)
         (setq pts (append pts (vlax-curve-getpointatparam ent param))
               param (1+ param)));while
       (if (= (vla-get-objectname ent) "AcDbPolyline")
         (setq pts (vl-remove-if '(lambda (x) (= x 0.0)) pts)
               add vla-addLightWeightPolyline)
         (setq add vla-addPolyline));if
       (add asp (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble (cons 0 (1- (length pts)))) pts)))
       (vla-delete ent)) ;_ end of progn
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Программа работает вперед и назад, kpblc'овские фрагменты оставилены без изменения.
Лентяй вне форума  
 
Непрочитано 15.03.2008, 11:18
#114
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Получил такое сообщение:
Код:
[Выделить все]
 
Команда: MOD-BREAK
Укажите полилинию <Отмена> :
Команда: Отрезать [Начало/Конец] <Конец>: Н
Команда: Ошибка Automation. Недопустимый аргумент coordinates в Coordinates 
property
Команда:
AutoCAD 2006 РУС.
Программа Алексея работает нормально.
Profan вне форума  
 
Непрочитано 15.03.2008, 11:57
#115
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Лентяй, ну побереги уж себя, нам и так без тебя скучно
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.03.2008, 18:31
#116
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Кулик Алексей aka kpblc, Работает, спасибо.


Лентяй,
Код:
[Выделить все]
Command:
MOD-BREAK
Укажите полилинию <Отмена> :
Command: Отрезать [Начало/Конец] <Конец>: Н

Command: bad argument type: symbolp ""
Command:
Command:
MOD-BREAK
Укажите полилинию <Отмена> :
Command: Отрезать [Начало/Конец] <Конец>: К

Command: bad argument type: symbolp ""
Command:
Вот что пишет у меня при использовании твоего варианта. Задумка для меня осталась тайной.
Red Nova вне форума  
 
Непрочитано 16.03.2008, 04:28
#117
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Profan, я по скудости личного кошелька пользуюсь все еще AutoCAD-2005, поскольку на работе мне АвтоКад не положен. А посему. активно пользуюсь удобства ради одним собственноручно открытым багом - заменой имени функции именем переменной. В данном случае, например,
Код:
[Выделить все]
(setq add vla-addLightWeightPolyline)
и
Код:
[Выделить все]
(setq add vla-addPolyline)
Иногда это позволяет сэкономить довольно длинные идентичные куски кода. Видимо, в версиях выше 2005-й этот фокус уже не проходит. Сочувствую всем от этого бага излеченным. В качестве утешения примите "правильный" код.
Код:
[Выделить все]
 (defun c:mod-break (/ *error* adoc util ent pt asp param par_end pts)
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object))
        util (vla-get-utility adoc))
  (vla-startundomark adoc)
  (if (not (vl-catch-all-error-p (vl-catch-all-apply
               '(lambda () (vla-getEntity util 'ent 'pt "\nУкажите полилинию <Отмена> : ")))));not
     (progn
       (setq asp (vla-ObjectIDToObject adoc (vla-get-OwnerID ent))
             pt (vlax-curve-getclosestpointto ent (vlax-safearray->list pt)))             
       (vla-InitializeUserInput util 128 "Начало Конец")
       (setq kw (vla-getKeyword util "Отрезать [Начало/Конец] <Конец>: "))
       (if (= kw "") (set kw "Конец")) 
       (if (= kw "Конец") (setq param 0 par_end (vlax-curve-getparamatpoint ent pt))
         (setq param (1+ (fix (vlax-curve-getparamatpoint ent pt)))
               par_end (vlax-curve-getendparam ent)));if
       (while (<= param par_end)
         (setq pts (append pts (vlax-curve-getpointatparam ent param))
               param (1+ param)));while
       (if (= (vla-get-objectname ent) "AcDbPolyline")
         (progn (setq pts (vl-remove-if '(lambda (x) (= x 0.0)) pts))
           (vla-addLightWeightPolyline asp
             (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble
                                                       (cons 0 (1- (length pts)))) pts))));progn
         (vla-addPolyline asp
             (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble
                                                       (cons 0 (1- (length pts)))) pts))));if
       (vla-delete ent)) ;_ end of progn
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun

Последний раз редактировалось Лентяй, 16.03.2008 в 04:37.
Лентяй вне форума  
 
Непрочитано 16.03.2008, 04:48
#118
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Лентяй, мой личный кошелек тоже скуден, поэтому дома я работаю на чем попало, хоть на 2009. На работе мне продукт положен, однако, из-за скудости кошелька руководителя конторы приходится тоже работать на чем попало, хоть на 2009. Но это временное явление. Стремясь стать независимым служащим, я уже приобрел две коробки с Windows XP HE.

Последний раз редактировалось Profan, 16.03.2008 в 04:56.
Profan вне форума  
 
Непрочитано 25.03.2008, 17:34
#119
Cfytrr

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


Приветствую вас, а можно сделать так чтоб после запуска команда PL-CSE с допуском например 3.5, при повторном запуске сохраняла ранее введенное значение допуска <3.5>, а не сбрасывала его на <0>?
И незнаю, насколько это возможно, сделать алгоритм соединения зависимым не только от "допуска", но и от min величины "угла" примыкания соединительного отрезка.
[IMG]http://img522.**********.us/img522/6158/sdgn4.th.jpg[/IMG]
Cfytrr вне форума  
 
Автор темы   Непрочитано 25.03.2008, 17:44
#120
VVA

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


Про запоминание значения не проблема, а про "угол" надо подумать. Вся проблема в алгоритме.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 28.03.2008, 11:06
#121
VVA

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


По просьбе отсюда
Утилита объединения набора линий в полилинию
Должна выбирать все (сначала и с конца) найденные примитивы в цепочку
см. #140
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 03.04.2008 в 10:38.
VVA вне форума  
 
Непрочитано 28.03.2008, 11:32
#122
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 151


У меня в AutoCAD 2005 (и в 2008) всё равно не хочет объединять все сегменты, даже если первый или последний выбрать! То часть сегментов определит, то только слева направо от выделенного. Ну а Bricscad вообще отказался работать =)

Последний раз редактировалось Tonic, 28.03.2008 в 12:31.
Tonic вне форума  
 
Автор темы   Непрочитано 28.03.2008, 13:16
#123
VVA

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


Изменил код в #121 Пробуй снова. BricsCad не поддерживает Visual LISP
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 28.03.2008, 13:22
#124
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Цитата:
Сообщение от VVA Посмотреть сообщение
Изменил код в #121 Пробуй снова. BricsCad не поддерживает Visual LISP
Не совсем так. 8-ка ActiveX уже поддерживает. Правда, не в полном объеме, там надо практически построчно проходить выполнение.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.03.2008, 14:11
#125
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 151


Заработало! Спасибо!
Tonic вне форума  
 
Непрочитано 28.03.2008, 19:36
#126
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


VVA, Мне просто стало интересно, ты время от времени пополняешь PLTools такими лиспами, как на #121, или нет? Если да, то мне давно пора сделать апгрейт.
Red Nova вне форума  
 
Непрочитано 31.03.2008, 02:04
#127
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


Запускаем:
Command: css

Выбрать линию в цепи :
Значение допуска < 0.01 >:
_.redraw
Command: _pedit Select polyline or [Multiple]: _M
Select objects: 10 found

Select objects:
Enter an option [Close/Open/Join/Width/Fit/Spline/Decurve/Ltype gen/Undo]: _j
Join Type = Both (Extend or Add)
Enter fuzz distance or [Jointype] <0.010>: _j
Enter join type [Extend/Add/Both] <Both>: _b
Join Type = Both (Extend or Add)
Enter fuzz distance or [Jointype] <0.010>: 0.010000000000000
9 segments added to polyline

Enter an option [Close/Open/Join/Width/Fit/Spline/Decurve/Ltype gen/Undo]:
Command: ._select
Select objects: 1 found

Select objects:
Command:


Мур-мур бы убрать...
И в добавок. Гораздо интереснее было бы соединять в полилинию только те объекты, которые ближе к выбранному концу объекта, а с другого конца объекта их игнорировать.
Или может быть оформить это опциями (All по умолчанию, Next - только ближайшие к концу).
И по окончанию работы программы - статистику (сколько объединено объектов).
p.s. В PL-CSE (pltools) то же было бы неплохо "загрипсовать объект".
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
 
Непрочитано 31.03.2008, 10:56
#128
bonnata


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


Спасибо авторам за ОЧЕНЬ нужные программы!
А возможно ли такое? Сгруппировать полилинию с пересекающими ее объектами (отрезками, блоками). при этом разворачивая углы полилинии на 180 (очень бы помогло для построения развернутого плана трубопроводов).
bonnata вне форума  
 
Автор темы   Непрочитано 31.03.2008, 15:06
#129
VVA

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


В №121 обновил команду CSS. По моему получилось неплохо. Можно рассатривать как кандидат на замену PL-CSE.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 31.03.2008, 16:35
#130
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 151


Bricscad то вылетает, то зависает =)
Tonic вне форума  
 
Автор темы   Непрочитано 31.03.2008, 18:49
#131
VVA

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


>Tonic см. #124. Я пока ориетнируюсь на Автокад.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 01.04.2008, 01:42
#132
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


>>VVA
А где _VXGRDRAW?

Выбрать линию в цепи :; error: no function definition: _VXGRDRAW

Добавьте, пожалуйста!
p.s. Опции устраивают.
p.p.s. А когда будет обновление сборки pltools. Народ любит обновления любимых программ.
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
 
Автор темы   Непрочитано 01.04.2008, 10:11
#133
VVA

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


_vxgrdraw mip_grdraw добавил в #121. Если устраивают опции, их содержание и вид, то обновлю функционал PL-CSE.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 01.04.2008, 16:47
#134
Cfytrr

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


Цитата:
Сообщение от VVA Посмотреть сообщение
команду CSS... Можно рассатривать как кандидат на замену PL-CSE.
Лично меня PL-CSE устраивает больше.
1. CSS прекращает соединять элементы в цепочку после соединения "разрыва".
2. В CSS очень муторно высматривать куда ткнуть мышой чтоб угадать ближайшую вершину в отрезке, в PL-CSE просто указываешь первый и все.
Cfytrr вне форума  
 
Непрочитано 02.04.2008, 02:13
#135
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


>> VVA (не сочтите занудой, но...)
Теперь потерялась функция pl(двоеточие)DTR
(извини, вставил сам для просмотра)
1. По умолчанию лучше дать опцию "Обе"
2. Строить цепочку от ближайшей точки [Ближайшая/Противоположная/Обе] <Ближайшая>: - здесь чуть-чуть не по русски. Может так:
Соединять от ближайшей точки [Ближайшей/Противоположной/Все]
3. Застарелая проблема. Пока 2 раза не нажмешь U - действие команды не отменится.
4. Строить цепочку от ближайшей точки [Ближайшая/Противоположная/Обе]
<Ближайшая>:
Нажимае Esc, далее:
*Cancel*
; error: Function cancelled
Это уже лишнее, пользователь и так ее явно прервал.
5. Выбрать линию в цепи :
Строить цепочку от ближайшей точки [Ближайшая/Противоположная/Обе] <Ближайшая>: G
Invalid option keyword. (Но тем не менее все идет далее...)
Значение допуска < 0.01 >:
6. Значение допуска лучше задать 0.0 (будем приучать пользователей к точности).
7. Рисуем несколько линий, у одних задаем в общем узле отметку Z отличную от 0. Запускаем программу по опции "Обе". Грипсы по всей цепочке линий (пользователь думает, что соединено!), но соединяет, естественно только линии с Z=0.
8. И наконец, было бы неплохо, если последняя опция, выбранная пользователем, сохраналась, например, он выбрал "Ближайшая", вот и пусть при повторном запуске программы ему и была предложена эта опция.
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
 
Непрочитано 02.04.2008, 22:02
#136
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


VVA, По поводу #121. У меня не работает.
Запускаю команду CSS

Цитата:
Command: css

Выбрать линию в цепи :; error: no function definition: PLTR

Command:
А как должно в правильном варианте быть?
Я путаю что должна делать CSS, а что DTR.
При команде DTR

Цитата:
Command: dtr

DS> Pick Starting Point:
DS> Angle/Close/Flip/Intersect/Left/Right/North/South/East/West <Distance>:

Command:
Я не могу понять что там к чему.

Как я понял основная задумка в том, чтобы нажав скажем на линию, все объекты которые концами образуют с ней цепочку соединялись. Я правильно понял? У меня так не выходит.
Red Nova вне форума  
 
Непрочитано 02.04.2008, 22:05
#137
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Написал и обнаружил что PL : DTR отображается как PLTR. Забавно
Red Nova вне форума  
 
Автор темы   Непрочитано 03.04.2008, 09:27
#138
VVA

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


> Red Nova Я добавил эти ф-ции в #121. А вообще они все есть в pltools, поэтому достаточно вызвать любую команду pltools, а затем CSS. У меня все грузится автоматом, поэтому кое-какие библиотечные ф-ции вечно забываю.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 03.04.2008, 09:53
#139
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


VVA, Ты меня только запутал.
Цитата:
А вообще они все есть в pltools, поэтому достаточно вызвать любую команду pltools, а затем CSS.
Что конкретно есть в pltools.
Что должна делать команда CSS? У меня pltools есть, вызываю любую команду потом CSS, и нечего

Цитата:
Command: PL-VxAdd

Укажите точку разрыва [отмени U/выход X] <выход> : css

Point or option keyword required.
А как соеденить находящиеся в цепочке объекты я так и не понял.
Red Nova вне форума  
 
Автор темы   Непрочитано 03.04.2008, 10:37
#140
VVA

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


Новая версия CSS. С учетом замечаний KAI кроме №7 и Red NOva #145
Код:
[Выделить все]
;;* Утилита объединения набора линий в полилинию*
;;* Должно выбирать все (сначала и с конца) найденные примитивы в цепочку)
;;------------------------------------------------
;;Алгорити взят у ChainSelect Fatty
;;http://www.cadforyou.spb.ru/index.php?current_section=section_programs_page
;;Доработан до понимания ARC,PLINE,LINE
;;Для выполнения необходимо указать только точку
;; pt - Список точек для выбранных примитивов в МСК !!!
;; fuzz - точность
;;Возвращает список vla объектов
(defun ChainSelectFromAny1 ( pt obj fuzz / chain_list couple line_lst ln ss cycl line_list )
(vl-load-com)
(if (setq ss (ssget "_I")
          ss nil
          ss (ssget "_X" '((0 . "ARC,LINE,*POLYLINE")))
    ) ;_ end of setq
  (progn
    (setq line_lst  (mapcar 'vlax-ename->vla-object
                             (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
                     ) ;_ end of mapcar
          chain_list nil
          chain_list (list obj)
    ) ;_ end of setq
    (setq line_lst (vl-remove-if
                      '(lambda (x)
                         (eq "AcDb3dPolyline" (vla-get-objectname x))
                       ) ;_ end of lambda
                      line_lst
                    ) ;_ end of vl-remove-if
    ) ;_ end of setq
     (setq line_lst (vl-remove obj line_lst))
    (setq cycl 0 line_list line_lst)
    (foreach pt_Pattern pt
     (while
        (setq couple
               (vl-remove-if-not
                 (function (lambda (x)
                             ;; значение допуска 0.01 можно изменить по ситуации
                             ;; в зависимости от единиц черчения : 
                             (or (equal (vlax-curve-getStartPoint x)
                                        pt_Pattern
                                        fuzz      ;<--- допуск 
                                 ) ;_ end of equal
                                 (equal (vlax-curve-getEndPoint x)
                                        pt_Pattern
                                        fuzz     ;<--- допуск 
                                 ) ;_ end of equal
                             ) ;_ end of or
                           ) ;_ end of lambda
                 ) ;_ end of function
                 line_list
               ) ;_ end of vl-remove-if-not
        ) ;_ end of setq
       (grtext -1 (strcat "Обработка. Цикл - " (itoa (setq cycl (1+ cycl)))))
       (if couple
           (progn
             (setq chain_list (cons (car couple) chain_list))
             (setq ln (car chain_list))
             (setq line_list (vl-remove ln line_list))
             (setq pt_Pattern (if (equal pt_Pattern (vlax-curve-getStartPoint ln) 1e-6)
                                (vlax-curve-getEndPoint ln)
                                (vlax-curve-getStartPoint ln)
                                )
                   )
           ) ;_ end of progn
         ) ;_ end of if
      )
   )
  ) ;_ end of progn
) ;_ end of if
chain_list
)
;;;Ф-ция переводит градусы в радианы
;;;( pl:DTR a)
(defun pl:DTR (a)(* pi (/ a 180.0)))
;;;---------------------------------------------
;;;Ф-ция переводит радианы в градусы
;;;( R2D a)
(defun pl:RTD (a)(/ (* a 180.0) pi))
(defun mip_grdraw ( ptdraw ang color / pt1 pt2 )
  (setq pt1 (polar ptdraw (+ ang (pl:DTR 135)) (* 0.05 (getvar "VIEWSIZE"))))
  (setq pt2 (polar ptdraw (+ ang (pl:DTR 225)) (* 0.05 (getvar "VIEWSIZE"))))
  (grvecs (list color pt1 ptdraw ptdraw pt2))
  )
(defun _vxgrdraw ( ptdraw color / ang pt11 pt12 pt21 pt22 len )
  (setq len (* 0.03 (getvar "VIEWSIZE"))
       ang 0
       pt11 (polar ptdraw (+ ang (pl:DTR 225)) len)
       pt12 (polar ptdraw (+ ang (pl:DTR 45)) len)
       pt21 (polar ptdraw (+ ang (pl:DTR 315)) len)
       pt22 (polar ptdraw (+ ang (pl:DTR 135)) len))
  (grvecs (list color pt11 pt12 pt21 pt22))
  )
;;;-----------------------------------------------------------------------------------
;;;-----------------------------------------------------------------------------------
;;;  KB:mark
;;;* Mark data base to allow KB:catch.
;;;*http://www.theswamp.org/index.php?topic=15863.0
(defun mip:mark (/ val)
   (setq val (getvar "cmdecho"))
   (setvar "cmdecho" 0)
   (if (setq *mip:mark (entlast))
      nil
      (progn (entmake '((0 . "point") (10 0.0 0.0 0.0)))
             (setq *mip:mark (entlast))
             (entdel *mip:mark)
      )
   )
   (setvar "cmdecho" val)
   (princ)
)
;;;-----------------------------------------------------------------------------------
;;;-----------------------------------------------------------------------------------
;;;  KB:catch
;;;* returns selection set of entities since last KB:mark.
;;;*
(defun mip:get-last-ss (/ ss tmp)
   (if *mip:mark
      (progn (setq ss (ssadd))
             (while (setq *mip:mark (entnext *mip:mark)) (ssadd *mip:mark ss))
             (command "._select" ss "")
             (setq tmp ss)
      )
      (alert "*mip:mark not set. \n run (mip:mark) before mip:get-last-ss.")
   )
)
;;;------------------------------------------------------------------
;;;------------------------------------------------------------------
 
(defun C:CSS ( / ss en fuzz obj pt pt1 len dst ptother what lst *error*)
 (vl-load-com)
 (defun *error* (msg)(princ msg)
   (vla-EndUndoMark(vla-get-ActiveDocument (vlax-get-acad-object)))(princ))
 (vla-StartUndoMark(vla-get-ActiveDocument (vlax-get-acad-object))) 
 (setvar "cmdecho" 0) 
 (if (and (setq en (entsel "\nВыбрать линию в цепи :"))
          (wcmatch (cdr(assoc 0 (entget (car en)))) "ARC,LINE,*POLYLINE")
          (setq obj (vlax-ename->vla-object (car en)))
          (cond ((=(vla-get-ObjectName obj) "AcDb3dPolyline")
                 (princ "\n3d Полилиния. ") nil)
                ((and (=(vla-get-ObjectName obj) "AcDbLine")
                      (not(equal (last(cdr(assoc 10 (entget(car en)))))
                             (last(cdr(assoc 11 (entget(car en)))))
                             1e-9
                             )
                          )
                      )
                 (princ "\nОтрезок. Разные координаты Z. ") nil)
                ((and (=(vla-get-ObjectName obj) "AcDb2dPolyline")
                     (member (vla-get-Type obj) '(1 2 3)))
                 (princ "\n2d сглаженная полилиния. ") nil)
                (t t)
                )
          )
 (progn
 (setq pt1 (trans (cadr en) 1 0))  
 (setq pt1 (vlax-curve-getclosestpointto obj pt1))
 (setq len (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj)))
 (setq dst (vlax-curve-getDistAtPoint obj pt1))
 (if (<= dst (- len dst))
   (setq pt (vlax-curve-getStartPoint obj) ptother (vlax-curve-getEndPoint obj))
   (setq pt (vlax-curve-getEndPoint obj) ptother (vlax-curve-getStartPoint obj))
   )
  (_vxgrdraw (trans pt 0 1) -1)
(mip_grdraw (trans pt1 0 1)
  (angle (trans pt1 0 1)(trans pt 0 1)) 1)
 (initget "Ближайшая Противоположная Обе Nearest Opposite Both _Nearest Opposite Both Nearest Opposite Both")
 (princ "\nСтроить цепочку от ближайшей точки [Ближайшая/Противоположная/Обе] <Обе>:")
 (setq what (getkword))
 (cond ((= what "Opposite")
        (setq pt (list ptother))
        (vl-cmdf "_.redrawall")
        (_vxgrdraw (trans ptother 0 1) -1)
        (mip_grdraw (trans pt1 0 1)
  (angle (trans pt1 0 1)(trans ptother 0 1)) 1)
        )
       ((= what "Nearest") (setq pt (list pt)))
       (t (setq pt (list pt ptother)))
       )
 
 (if (null *FUZZ*)(setq *FUZZ* 0.0))
 (princ "\nЗначение допуска < ")(princ *FUZZ*)(princ " >: ")
 (if (null (setq fuzz  (getdist)))
   (setq fuzz *FUZZ*))
 (setq *FUZZ* fuzz)
 (vl-cmdf "_.redrawall")
 (setq ss nil ss (ssadd (car en)))
       
 (setq lst (ChainSelectFromAny1 pt obj (+ fuzz 1e-6)))
 (foreach item lst
      (ssadd (vlax-vla-object->ename item) ss)
    )
  (mip:mark)
  (vl-catch-all-apply '(lambda()
    (setq pda (getvar "peditaccept"))
    (setvar "peditaccept" 1)
    (command "_pedit" "_M" ss "" "_j" "_j" "_b" fuzz "")
    (setvar "peditaccept" pda))
    )
   (setq lst (vl-remove-if 'vlax-erased-p lst))
  (if (setq ss nil ss (mip:get-last-ss))
    (progn
      (if lst
        (foreach item lst (ssadd (vlax-vla-object->ename item) ss)))
      (sssetfirst ss ss)))
  (setq ss nil)
  )
   (princ " Невожможно преобразовать в полилинию")
   )
 (vla-EndUndoMark(vla-get-ActiveDocument(vlax-get-acad-object)))
  (princ)
  )
(princ "\nНаберите CSS в командной строке")
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 09.04.2008 в 13:48. Причина: Новая версия
VVA вне форума  
 
Непрочитано 03.04.2008, 10:47
#141
nastasja

инженер
 
Регистрация: 03.04.2008
СПб
Сообщений: 45
<phrase 1=



Мне нужно преобразовать полилинию в дуговой сегмент. ПРоги я отсюда скачала, сделала, как написано в сопроводиловке txt, но что значит "активировать панель" я не поняла. Раньше я программированием и 3D не занималась, но теперь диплом делаю, так что приходится осваивать..
nastasja вне форума  
 
Непрочитано 03.04.2008, 20:36
#142
Cfytrr

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


VVA, у меня по прежнему после соединения разрыва между отрезками #140 останавливатся и остальные отрезки не соединят
AutoCad 2005, 2009

Последний раз редактировалось Cfytrr, 03.04.2008 в 23:11.
Cfytrr вне форума  
 
Автор темы   Непрочитано 04.04.2008, 09:50
#143
VVA

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


>nastasja "активировать панель" - значит сделать панельку с кнопками видимой.
Цитата:
Мне нужно преобразовать полилинию в дуговой сегмент
требует дополнительного разъяснения. Что-то мне подсважывает, что для твоих задач _pedit'a за глаза хватит
>Cfytrr Кинь примерчик на почту.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 07.04.2008, 14:56
#144
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


VVA лисп с #140 работает нормально. Спасибо.

P.S. Отлично придумано с допуском
Red Nova вне форума  
 
Непрочитано 07.04.2008, 15:30
#145
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


VVA, Есть пожелание по поводу CSS. Обычно когда соединяют объект к другому, то свойства первого передаются второму. Только что пробовал соединить дугу к полилиние (первый объект - дуга). Так в этом случае соединенная полилиния принимает свойства второго объекта. Лучше бы было если бы тут все было как в обычном join.
Red Nova вне форума  
 
Автор темы   Непрочитано 09.04.2008, 13:51
#146
VVA

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


Здесь обсуждаются предложения. Это не значит что я немедленно брошусь все исправлять/дописывать. У меня тоже есть работа. Предложения берутся на заметку и исправляются/доделываются в следующей версии. Если это действительно очень важно, то обновил код в #140 с учетом твоих пожеланий и замечаний KAI #135, кроме №7
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 09.04.2008, 16:06
#147
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Не стреляй, здаюсь. Просто думал ты не счел это важным, раз не ответил.
Удалил постыдное сообщение, раз оно тебя так разозлило.
Лисп опробовал, все работает.
Большое спасибо.

Последний раз редактировалось Red Nova, 10.04.2008 в 12:34.
Red Nova вне форума  
 
Непрочитано 04.06.2008, 09:51
#148
Nikolays

INJENER
 
Регистрация: 03.05.2007
Kazakhstan
Сообщений: 161


да эти PLTOOLS,у меня 2006 КАД,эти все функции у меня работали в один прекрасный момент перестали работать,из за чего не пойму
Nikolays вне форума  
 
Автор темы   Непрочитано 04.06.2008, 10:17
#149
VVA

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


Nikolays,
1. Что выдает при попытке вызвать команду?
2. Попробуй в командной строке набрать _appload и загрузить pltools.fas из папки PLTOOLS, потом вызвать какую-либо команду
3. Тоже самое по п.2, только загрузи файл pltools.lsp из подпапки LISP папки PLTOOLS
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 05.06.2008, 09:14
#150
Nikolays

INJENER
 
Регистрация: 03.05.2007
Kazakhstan
Сообщений: 161


это всё я сделал,но при выполнении команд выдаёт сообщение:ERRNO # 0: no function definition: nil,Выберите Полилинию, Сплайн или Отрезок для реверса <хватит>:ERRNO # 2: no
function definition: VLAX-ENAME->VLA-OBJECT,*error* functionAutoCAD variable setting rejected: "CMDECHO" nil
Nikolays вне форума  
 
Автор темы   Непрочитано 05.06.2008, 09:58
#151
VVA

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


В PLTOOLS (vl-load-com) грузится автоматом при загрузке файла.
Nikolays,
1. Скопируй или набери в командной строке (vl-load-com)
2. Затем (vlax-get-acad-object)
Должно возвращать что-то типа #<VLA-OBJECT IAcadApplication 00c2eb8c>
А у тебя что пишет?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 06.06.2008, 12:09
#152
Nikolays

INJENER
 
Регистрация: 03.05.2007
Kazakhstan
Сообщений: 161


при запуске команды"vl-load-com"выдаёт сообщение:Команда: vl-load-com
Unknown command "VL-LOAD-COM". Press F1 for help
при запуске команды"vlax-get-acad-object":выдаёт сообщение:Unknown command "VLAX-GET-ACAD-OBJECT". Press F1 for help.
Nikolays вне форума  
 
Непрочитано 06.06.2008, 12:58
#153
Nikolays

INJENER
 
Регистрация: 03.05.2007
Kazakhstan
Сообщений: 161


при копировании и вставке (vlax-get-acad-object)
выдаёт:
#<VLA-OBJECT IAcadApplication 00c2db8c>
Nikolays вне форума  
 
Автор темы   Непрочитано 06.06.2008, 13:49
#154
VVA

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


Что еще могу посоветовать:
1. Попробуй скачай последнюю версию
2. Создай новую учетную запись и попробуй в ней
3. попробуй pltools на другой машине
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 06.06.2008, 18:42
#155
Nikolays

INJENER
 
Регистрация: 03.05.2007
Kazakhstan
Сообщений: 161


У меня последняя версия pltools,на других машинах работает без проблем,да и на этой машине работали все команды,а потом перестали
Nikolays вне форума  
 
Непрочитано 07.06.2008, 02:44
#156
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


Цитата:
Сообщение от Nikolays Посмотреть сообщение
У меня последняя версия pltools,на других машинах работает без проблем,да и на этой машине работали все команды,а потом перестали
Мистика, однако!
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
 
Непрочитано 07.06.2008, 10:03
#157
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


VVA,
Цитата:
Попробуй скачай последнюю версию
Кстати, а где ее качать?
__________________
Блог
Red Nova вне форума  
 
Автор темы   Непрочитано 09.06.2008, 10:03
#158
VVA

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


Red Nova, см. пост #1
Nikolays, Еще пара советов в порядке предпостения:
1. Попробуй на своей машине завести новую учетную запись и попробывать там pltools (рекомендация #154 №2)
2. Попробывать удалить Автокад и поставить снова.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 09.06.2008, 10:05
#159
VVA

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


Offtop: Теперь 1-й пост прикрепляется вверху каждой страницы. Удобно
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 12.06.2008, 08:55
#160
Nikolays

INJENER
 
Регистрация: 03.05.2007
Kazakhstan
Сообщений: 161


с новой учётной записью Pltools тоже не работает
Nikolays вне форума  
 
Автор темы   Непрочитано 12.06.2008, 10:21
#161
VVA

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


А п.2 из #158 ?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 16.06.2008, 08:47
#162
Димас

джедай
 
Регистрация: 31.01.2005
Магадан
Сообщений: 460
<phrase 1=


а такое добавить не хотите?
бывает нужно провести часть полилинии по уже существующему контуру/контурам
хотелось бы нечто очень юзер-френдли - рисую полилинию стандартной командой, нужно провести по существующему контуру, запускаю команду, тыкаю начальную точку, тыкаю конечную, продолжаю рисовать полилинию.
Будете такое добавлять?)
Димас вне форума  
 
Непрочитано 17.06.2008, 08:40
#163
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


>> VVA
Подумал-подумал, посоветовался с гл.геологом, и решил: действительно, будет полезно иметь в PLTOOLS такую штуку.
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
 
Непрочитано 17.06.2008, 09:17
#164
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


Забыл ТУ:
Координаты начала новой полилинии по первой точке исходной полилинии (координаты в UCS).
Далее точки новой полилинии должны идти в плоскости UCS, естественно, что если прежняя полилиния не находится в этой плоскости, то ее точки должны проецироваться на плоскость UCS.
Для нас дуги на исходной полилинии можно игнорировать, но лучше их сохранять, мало-ли кому это важно.
Начало не мешало-бы пометить крестиком.
Привязка при указании 1-й и 2-й точки на исходноий полилинии по умолчанию - END, но возможны и другие, выбираемые пользователем (NEA, MID и др.)
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
 
Автор темы   Непрочитано 17.06.2008, 17:25
#165
VVA

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


Димас, KAI, Вычлинить из готовой полилинии набор сегментов не проблема. По принципу PL-CLONE, только там выделяешь сегменты, а здесь начало и конец. Я пока не знаю как "скрестить" стандартную команду рисования полилинии, возможность добавления некоторого количеста вершин и затем опять продолжения рисования полилинии ?
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 22.06.2008 в 11:04. Причина: Орфография
VVA вне форума  
 
Непрочитано 18.06.2008, 04:35
#166
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


>>VVA
А если немного упростить вышесказанное (кстати, на это и указывал Димас):
1. Начинаем на исходной полилинии.
2. Задаем 2-ю точку на исходной полилинии.
3. Дальнейшее указание точек новой полилинии (опции команды PLINE не нужны, показ новой виртуальной полилинии весьма приветствуется), то есть только прямые сегменты для новой полилинии , + опция 'Замкнуть'.
4. При отказе от новой точки или по Close отрисовывается новая полилиния (сначала от 1-й до 2-й точки исходной, а затем, по заданным пользователем точкам). Можно по Esc (+ опция Exit) сделать так, чтобы новая полилиния не отрисовывалась.
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
 
Непрочитано 22.06.2008, 02:24
#167
MIP

инженер
 
Регистрация: 13.12.2004
Минск
Сообщений: 496


VVA сейчас в отпуске отвечу за него.
1. Мое мнение всунуть эту возможность в именно в стандартную команду отрисовки полилинии не получется, я видел как это работает в другой программе, там собственная команда создания полилиний (контуров) с возможностью трассировки по другому контуру.
2. Скорее всего прийдется писать заменитель стандартной команды. Выглядеть он будет примерно так:
- Будут запрашиватся точки вершин будущей полилинии, с опциями полилинии, но в место полилинии создавть временную геометрию (отрезки, дуги) с включением их в набор
- Будет опция трассировки по существующему контуру, т.е. от точки начала трассировки по контуру до точки конца трассировки по контуру
- В случае замкнутого контура дополнительно прийдется задать сторону по которой пройдет трассировка, создается временное построение трассировки по контуру включаемое в набор
- далее продолжаем ввод координат вершин полилинии с опциями полилинии или трассировку по другому контуру, опять же со временными построениями с включениями в набор.
- по окончанию построений все объединяется в одну полилинию.
В качетсве настроек цвет временных построений и толщина (вес) линий для визуального наблюдения.
Сложности будут при переходе трассировки с одного контура на другой в точке их пересечения (может быть точкой пересечения множества контуров), возможно дополнительно прийдется указать тот контур по которому будет осуществлятся трассирование далее. Кроме того возможно понадобится трассировка по контуру блока, сплайна и т.п.
Но в общем цель ясна, покожу VVA на примерах.
Кто хочет или знает как лучше дополняйте.
MIP вне форума  
 
Непрочитано 15.08.2008, 13:28
#168
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


В выложенном архиве нет такого файла:
pltools.cui -- меню для подгрузки в AutoCAD с 2006 включительно
Do$ вне форума  
 
Автор темы   Непрочитано 18.08.2008, 19:55
#169
VVA

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


Do$, Спасибо, выйду из отпуска - исправлю. А пока можно делать так, как написано в readme.txt:
Цитата:
========= Как пользоваться =========
1. Поместите файлы в папку, прописанную в путе доступа к вспомогательным файлам
(Сервис->Настройка->Файлы->Путь доступа к вспомогательным файлам)
2. командой _menuload подгрузить файл pltools.mnu, активизировать панель pltools
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 21.08.2008, 20:03
#170
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Цитата:
>VVA
Я пока не знаю как "скрестить" стандартную команду рисования полилинии, возможность добавления некоторого количеста вершин и затем опять продолжения рисования полилинии ?
>MIP
Мое мнение всунуть эту возможность в именно в стандартную команду отрисовки полилинии не получется
Собственно это решается (использование стандартной команды "_pline") с помощью простейшей конструкции
Код:
[Выделить все]
 
(command "_pline")
(apply 'command lst)
А язык LISP позволяет создать практически любые списки...
Пример ниже показывает, что это возможно. Акцентирую внимание - это пример, а не готовая функция, т.к. в нем пока не решен вопрос, какую часть полилинии брать если точка выбрана в пересечении сегментов полилинии, ну и не стал заморачиваться с выбором первой точки - новая полилиния строиться от начала и до точки указанной пользователем с продолжением рисования...
Код:
[Выделить все]
(defun c:test (/ test test1 sys_var pl lst)
  (defun test1 (str)
    (if str
      (cons (car str) (test1 (cdr str)))
      (test (cdr lst) "_a")
    ) ;_ end of if
  ) ;_ end of defun
  (defun test (lst l-or-a)
    (cond
      ((null lst) nil)
      ((listp (car lst))
       (cons (car lst) (test (cdr lst) l-or-a))
      )
      ((and (= (car lst) 0.0) (= l-or-a "_l"))
       (test (cdr lst) l-or-a)
      )
      ((and (= (car lst) 0.0) (/= l-or-a "_l"))
       (cons "_l" (test (cdr lst) "_l"))
      )
      ((and (/= (car lst) 0.0) (= l-or-a "_l"))
       (cons "_a"
      (test1 (list "_a" (/ (* 180 4.0 (atan (car lst))) pi)))
       ) ;_ end of cons
      )
      (t (test1 (list "_a" (/ (* 180 4.0 (atan (car lst))) pi))))
    ) ;_ end of cond
  ) ;_ end of defun
  (setq sys_var (mapcar 'getvar '("cmdecho" "cecolor")))
  (setvar 'cmdecho 0)
  (setvar 'cecolor "1")
  (setq pl (car (entsel "\nВыберите pline: ")))
  (if (and pl
    (setq pl (vlax-ename->vla-object pl))
    (= (vla-get-ObjectName pl) "AcDbPolyline")
      ) ;_ end of and
    (vl-catch-all-apply
      (function
 (lambda ()
   (command "_pline")
   (apply 'command
   (test
     ((lambda (p)
        (repeat (+ 2 (fix p))
   (setq lst
          (cons
     (list
       (vlax-curve-getpointatparam pl p)
       (cond
         ((equal (type p) 'REAL)
          (setq temp
          ((lambda (x)
      (/ (sin x) (cos x))
           ) ;_ end of lambda
            (* (rem p 1)
        (atan (vla-getbulge
         pl
         (fix p)
       ) ;_ end of vla-getbulge
        ) ;_ end of atan
            ) ;_ end of *
          )
          ) ;_ end of setq
          0.0
         )
         ((and temp
        (not (equal (vla-getbulge pl p) 0.0))
          ) ;_ end of and
          ((lambda (x) (setq temp nil) x) temp)
         )
         (t (setq temp nil) (vla-getbulge pl p))
       ) ;_ end of cond
     ) ;_ end of list
     lst
          ) ;_ end of cons
   ) ;_ end of setq
   (if (equal (type p) 'REAL)
     (setq p (fix p))
     (setq p (1- p))
   ) ;_ end of if
        ) ;_ end of repeat
        (setq lst (vl-remove nil (apply 'append lst)))
      ) ;_ end of lambda
       (vlax-curve-getparamatpoint
         pl
         (getpoint "\nТочка на полилинии: ")
       ) ;_ end of vlax-curve-getparamatpoint
     )
     "_l"
   ) ;_ end of test
   ) ;_ end of apply
 ) ;_ end of lambda
      ) ;_ end of function
    ) ;_ end of vl-catch-all-apply
    (princ
      "\nВыбранный объект не полилиния или не выбран вообще..."
    ) ;_ end of princ
  ) ;_ end of if
  (mapcar 'setvar '("cmdecho" "cecolor") sys_var)
  (princ)
) ;_ end of defun
CB вне форума  
 
Непрочитано 01.09.2008, 10:58
#171
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Решил внести в PLTOOLS и свой вклад...
Прошу потестировать программу, сделанную по мотивам #162 :
Код:
[Выделить все]
(defun c:test (/ test sys_var pl)
  (defun test (lst l-or-a temp)
    (cond
      ((null lst) nil)
      (temp
       (if (equal (car temp) "")
  (test lst l-or-a (cdr temp))
  (cons (car temp) (test lst l-or-a (cdr temp)))
       ) ;_ end of if
      ) ;_ end of temp
      ((null (caddr lst))
       (if (equal l-or-a "_l")
  (list (car lst))
  (list (car lst) "_l")
       ) ;_ end of if
      )
      ((equal (cadr lst) 0.0)
       (if (equal l-or-a "_a")
  (test (cddr lst) "_l" (list (car lst) "_l"))
  (cons (car lst) (test (cddr lst) l-or-a temp))
       ) ;_ end of if
      )
      (t
       (test
  (cddr lst)
  "_a"
  (list
    (car lst)
    (if (equal l-or-a "_a")
      ""
      "_a"
    ) ;_ end of if
    "_s"
    (trans
      (vlax-curve-getpointatparam
        pl
        (/
   (+ (vlax-curve-getparamatpoint
        pl
        (trans (caddr lst) 1 0)
      ) ;_ end of vlax-curve-getparamatpoint
      (vlax-curve-getparamatpoint pl (trans (car lst) 1 0))
   ) ;_ end of -
   2.
        ) ;_ end of /
      ) ;_ end of vlax-curve-getpointatparam
      0
      1
    ) ;_ end of trans
  ) ;_ end of list
       ) ;_ end of test
      ) ;_ end of t
    ) ;_ end of cond
  ) ;_ end of defun
  (setq sys_var (mapcar 'getvar '("cmdecho" "cecolor")))
  (setvar 'cmdecho 0)
  (setvar 'cecolor "1")
  (setq pl (car (entsel "\nВыберите pline: ")))
  (if (and pl
    (setq pl (vlax-ename->vla-object pl))
    (= (vla-get-ObjectName pl) "AcDbPolyline")
      ) ;_ end of and
    (vl-catch-all-apply
      (function
 (lambda ()
   (vl-cmdf "_pline")
   (apply 'vl-cmdf
   (test
     (apply
       '(lambda (p1 p2)
   ((lambda (lst)
      (if (apply '< (list p1 p2))
        lst
        (mapcar '(lambda (y)
     (if (numberp y)
       (- y)
       y
     ) ;_ end of if
          ) ;_ end of lambda
         ((lambda (x)
     (cdr (reverse x))
          ) ;_ end of lambda
           lst
         )
        ) ;_ end of mapcar
      ) ;_ end of if
    ) ;_ end of lambda
     ((lambda (param act n / lst)
        (while (<= n param)
          (setq lst
          (append
     lst
     (cons (trans
      (vlax-curve-getpointatparam
        pl
        (if ((eval act) n param)
          param
          n
        ) ;_ end of if
      ) ;_ end of vlax-curve-getpointatparam
      0
      1
           ) ;_ end of trans
           (list (vla-getbulge pl n))
     ) ;_ end of cons
          ) ;_ end of append
          ) ;_ end of setq
          (setq param (max p1 p2)
         act   '>=
          ) ;_ end of setq
          (if (and (equal n (fix param))
     (not (equal n param))
       ) ;_ end of and
     (setq n param)
     (setq n (1+ n))
          ) ;_ end of if
        ) ;_ end of while
        lst
      ) ;_ end of lambda
       (min p1 p2)
       '<
       (fix (min p1 p2))
     )
   )
        ) ;_ end of lambda
       (mapcar
         '(lambda (x / pt p)
     (setq pt (trans (getpoint x) 1 0))
     (while (not (setq p
          (vlax-curve-getparamatpoint
            pl
            pt
          ) ;_ end of vlax-curve-getparamatpoint
          ) ;_ end of setq
     ) ;_ end of not
       (setq pt
       (trans
         (getpoint
           "\rТочка не на полилинии. Повторите выбор: "
         ) ;_ end of getpoint
         1
         0
       ) ;_ end of trans
       ) ;_ end of setq
     ) ;_ end of while
     p
   ) ;_ end of lambda
         (list
    "\nПервая точка на полилинии: "
    "\nВторая точка на полилинии: "
         ) ;_ end of list
       ) ;_ end of mapcar
     ) ;_ end of apply
     "_l"
     nil
   ) ;_ end of test
   ) ;_ end of apply
 ) ;_ end of lambda
      ) ;_ end of function
    ) ;_ end of vl-catch-all-apply
    (princ
      "\nВыбранный объект не полилиния или не выбран вообще..."
    ) ;_ end of princ
  ) ;_ end of if
  (mapcar 'setvar '("cmdecho" "cecolor") sys_var)
  (princ)
) ;_ end of defun
PS: Наверняка надо что-то делать с толщиной создаваемой полилинии, т.е. чтобы она повторяла толщины исходной...

Последний раз редактировалось CB, 01.09.2008 в 16:00. Причина: Теперь можно работать и в UCS, а не только в WCS...
CB вне форума  
 
Автор темы   Непрочитано 01.09.2008, 11:36
#172
VVA

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


Это мой тестовый чертеж для pltools. Прислал в свое время KAI. Ругается на синюю полилинию, что точка не на ней.
Вложения
Тип файла: dwg
DWG 2004
test KAI.dwg (190.7 Кб, 3546 просмотров)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 01.09.2008 в 16:08.
VVA вне форума  
 
Непрочитано 01.09.2008, 16:05
#173
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


>VVA
Исправлено в #171 - забыл про trans...
CB вне форума  
 
Непрочитано 04.12.2008, 10:19
#174
Cfytrr

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


сегодня заметил что в 2009 Акаде x64 не работают команды:
PL-VxAdd, ConvTo3d,
пишет:
; warning: unwind skipped on unknown exception.
Остальные команды вроде работают... На 32 битной версии все работает нормально
Cfytrr вне форума  
 
Автор темы   Непрочитано 04.12.2008, 12:48
#175
VVA

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


К сожалению пока не на чем проверить, но возьму на заметку.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 05.12.2008, 02:30
#176
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


>> VVA
А помнится, кто-то обещал "намедни" выложить обновленный pltools с исправленными багами и дополнениями?
Переписку напомнить?
Народ ждет давно. Это семейство программ им очень нравится.
p.s. А командировки только в Москву? А в Магадан? Готов поделиться комнатой и даже сдать в аренду Мурзика (для сугрева и сняния напряжения).
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
 
Непрочитано 15.12.2008, 20:41
#177
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для Red Nova с помощью Skype™


Про PL-VxAdd
Единственное что мне в этой команде раньше казалось неправильным было то что привязка во время работы команды отключалась, по моему это создает лишнее неудобство, но со временем, освоив азы лиспа, я это у себя подправил, поменяв в коде строку с osmode на ("osmode" 16383), чего всем и рекомендую, в таком случае будут включены все привязки. Ну или можно вообще не трогать привязки, и удалить соответствующие строки из кода. Хотелось бы чтобы код изначально был таким.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 13.03.2009, 14:07
#178
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


2VVA
Посмотри пожалуйста в команде PL-VxAdd - какая-то ошибка bad argument type: listp #<variant 8197 ...>
2) а нельзя ли добавить в команде PL-Div обработчик ошибок, а то привязки при отмене по Esc не восстанавливаются.
Sleekka вне форума  
 
Автор темы   Непрочитано 13.03.2009, 15:10
#179
VVA

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


Sleekka, Ты файлик покажи (или пришли на почту) где эта ошибка появляется.
2. Помсмотрю
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 13.03.2009, 15:29
#180
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


А не извиняюсь - это я чего-то накосячил =) пятницца

Последний раз редактировалось Sleekka, 13.03.2009 в 15:41.
Sleekka вне форума  
 
Непрочитано 17.03.2009, 15:37
#181
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


VVA, а вот скажи, 3D полилинию в сплайн переделывать надо? В смысле с радиусами в вершинах? Я тут сплайны расковырял и в принципе уже могу и дуги и прямолинейные участки делать через entmake сплайнами. Погрешность очень не велика и ее можно сокращать увеличением количества точек на дугах. Вот сижу и ломаю голову, надо это, или не надо.
Supermax вне форума  
 
Непрочитано 17.03.2009, 15:51
#182
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Вообще-то конвертация полилинии в сплайн решает задачу сглаживания, но сколько я не глядел как отцы подходят к этой задаче, они получают точки как для сплайна а потом по ним все равно полилиния делается видимо обосновано простотой примитивов.
Sleekka вне форума  
 
Автор темы   Непрочитано 17.03.2009, 17:58
#183
VVA

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


Supermax, Это у народа нужно спрашивать. Но раз ты расковырял сплайн, то может будет интересна еще и задача апроксимации сплайна полилинией с дуговыми сегментами.
Sleekka, Да, сплайн "тяжелый" для Автокада примитив.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.03.2009, 18:06
#184
Cfytrr

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


Извиняюсь, но можно ли подправить работу в AutoCad 2009 64х(описанние в #174)
__________________
...переменная FILEDIA создана для привлечения пользователей к форумам.
Cfytrr вне форума  
 
Автор темы   Непрочитано 17.03.2009, 19:28
#185
VVA

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


Cfytrr, Скоро на работе поставят поставят Висту 64 для ананализа работоспособности наших программ по ней. Тогда посмотрю в чем там дело.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 18.03.2009, 10:39
#186
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


VVA, перевести сплайн в 3D полилинию можно, поскольку имея представление как строится сплайн Автокадом, можно высчитать ряд точек и провести но ним 3D полилинию, но вот имея ряд точек, определить нужна ли там дуга или нет? - Так можно на каждые три точки, которые не лежат на одной прямой дуги лепить.
Короче, с дугами затык.
Потом, сплайн очень коварная штука. В любой момент может выскочить "холмик", который можно описать только очень большим количеством точек, а все остальное может быть просто прямой.

Но, мне кажеться, я где-то уже видел такую прогу.
Supermax вне форума  
 
Непрочитано 29.03.2009, 21:06
#187
Денис Флюстиков


 
Регистрация: 20.07.2005
СПб
Сообщений: 89


VVA,

Программа получения полилиний с дуговыми сегментами при выборе сплайнов или эллипсов. Правда, особо не гонял.
Вложения
Тип файла: rar To_pline_Den.rar (4.6 Кб, 141 просмотров)
Денис Флюстиков вне форума  
 
Автор темы   Непрочитано 29.03.2009, 22:04
#188
VVA

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


Денис Флюстиков, Спасибо, посмотрю.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 30.03.2009, 12:34
#189
Денис Флюстиков


 
Регистрация: 20.07.2005
СПб
Сообщений: 89


VVA,
Тестирование программы из поста #187, показало, что для более корректной работы необходимо заменить строчку:
z6 (sin (- (angle (nth (1- z3) z2)(nth z3 z2))
на:
z6 (sin (- (angle (nth (cadr z4) z2)(nth z3 z2))
Денис Флюстиков вне форума  
 
Непрочитано 31.03.2009, 23:46
#190
Neznayka


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


Сложный прямоугольник
Может это под автокад возможно заточить:
« При создании объекта способом "Сложный прямоугольник" вначале вводятся две точки - самая длинная боковая сторона создаваемого объекта, а затем - остальные вершины прямоугольника (через одну). Точки указываются на экране курсором и вводятся нажатием левой кнопки мыши. Промежуточные точки создаются автоматически на пересечении прямой, параллельной первой линии (и проходящей через текущую точку) и перпендикуляра к первой линии, проходящего через предыдущую точку. Таким образом, перпендикулярность всех граней создаваемого объекта (в том числе и последней, замыкающей) отслеживается автоматически.»
Я так и не понял, как замыкать этот прямоугольник, вероятно после клика №4 должен следовать правый клик, который задаёт удаление грани «А» от первоначальной грани
Миниатюры
Нажмите на изображение для увеличения
Название: сложный_прямо.gif
Просмотров: 140
Размер:	3.0 Кб
ID:	18163  
Neznayka вне форума  
 
Автор темы   Непрочитано 01.04.2009, 10:19
#191
VVA

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


Neznayka,
Цитата:
вероятно после клика №4 должен следовать правый клик, который задаёт удаление грани «А» от первоначальной грани
По мне так не хватает точки 5 на перечении линии А и перпендикуляра к 1. Можно сделать как в команде Облако (_revcloud)ю Там команда завершается, кодга мышкой придешь в исходную точку. А здесь отслеживать , что при указании точки (в данном случае 5) перпендикуляр от нее попадает в точку 1 с некоторым допуском.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 01.04.2009, 12:51
#192
Neznayka


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


C точкой 5 имхо плохо, т.к точности не будет (ну если только объектное отслеживание включить).
По принципу "облака" то же хорошо, но будет лишний клик (по т.1) и точка 5 будет "плавать", т.е. её привязкой точно не посадишь, ведь точка 5 все равно будет на перпендикуляре к стороне 1-2. Я чётко излагаю или надо детальный чертеж в районе т.5.
Надо реализовать вариант незамкнутости, и что делать с методом т.5 если надо чтоб продолжить полилинию за грань 1-5, т.е полигон будет с самопересечением (это для тех кто не только домики рисует)
И самый главный вопрос: ВОЗЬМЁТЕСЬ за это?
Neznayka вне форума  
 
Непрочитано 01.04.2009, 14:06
#193
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Хороший набор команд. но ENTREVS теряет расширенные данные полилинии, это сложно поправить?
zamtmn вне форума  
 
Автор темы   Непрочитано 01.04.2009, 15:24
#194
VVA

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


zamtmn, Уже исправил. Постараюсь на днях выложить новую версию.
Neznayka, Буду думать
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 02.04.2009, 15:55
#195
VVA

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


Neznayka, В качестве первого приближения
Код:
[Выделить все]
;_Dificult RECtangle
(defun C:DREC ( / *error* ss BasePt1 BasePt2 tmp  ang0 ang90 CurrentPt LastPt U_M usr_list eLast)
  (vl-load-com)
  (defun *error* (msg / )
    (while (> (getvar "CMDACTIVE") 0)(command))
    (mapcar '(lambda (x) (setvar (car x) (cdr x))) usr_list)
    (princ msg)
    (if elast
    (progn
      (setq ss nil ss (ssadd))
      (while (setq eLast (entnext eLast)) (ssadd eLast ss))
      (if (= (sslength ss) 0);_ Пустой набор
	(setq ss nil)
	)
      )
    )
  (if ss (command "_.ERASE" ss ""))
     (vla-EndUndoMark
      (vla-get-activedocument (vlax-get-acad-object))
    )
    (princ)
    )
  (setq usr_list (mapcar '(lambda (x) (cons x (getvar x)))
    '("USERR1"  "USERR2"))
  )
    (vla-StartUndoMark
    (vla-get-activedocument (vlax-get-acad-object))
  )
  ;;;Проверяем установки UNDO и устанавливает All control 
  (setq U_M (getvar "UNDOCTL"))
  (cond
    ((= (logand U_M 1) 0) ;_ Отключено UNDO
     (command "_.UNDO" "_All")
     )
    ((= (logand U_M 3) 3) ;_ Разрешена отмена одной операции
     (command "_.UNDO" "_Control" "_All") 
     )
    (t nil)
  ) ;_ end of cond
    (setq U_M 0) ;_VVA Устанавливаем счетчик отмен UNDO
  ;;; Запоминаем в eLast последний примитив 
    (if (null (setq eLast (entlast)))
      (progn (entmake '((0 . "point") (10 0.0 0.0 0.0)))
      (setq eLast (entlast))
      (entdel eLast)
      )
    )

  (initget 1)(setq BasePt1 (getpoint "\nПервая базовая точка: "))
  (initget 1)(setq BasePt2 (getpoint BasePt1 "\nВторая базовая точка: "))
  (setq ang0 (angle BasePt1 BasePt2))
  (setq ang90 (+ ang0 (* 0.5 PI)))
  (setq LastPt BasePt2)
  (command "_LINE" "_non" BasePt1 "_non" BasePt2 "")
  (initget "Отмени Undo Замкни Close _Undo Undo Close Close")
  (while (and (setq CurrentPt (getpoint "\nВершина прямоугольника [Отмени/Замкни] <замкни>: "))
	      (setq CurrentPt (if (= CurrentPt "Close") nil CurrentPt))
	      )
    (cond ((listp CurrentPt)
    (setq tmp (inters CurrentPt
		      (polar CurrentPt ang0 100)
		      LastPt
		      (polar LastPt ang90 100)
		      nil
		      )
	  )
    (if tmp
      (progn
        (setvar "USERR1" (car LastPt)) ;_Запоминаем X точки
        (setvar "USERR2" (cadr LastPt));_Запоминаем Y точки
        (command "_.UNDO" "_M") ;_Ставим метку UNDO 
	(command "_LINE" "_non" LastPt "_non" tmp "_non" CurrentPt "")
	(setq LastPt CurrentPt)
	(setq U_M (1+ U_M))
	)
      )
    )
((= CurrentPt "Undo")
      (if (> U_M 0) ;_ Если есть что отменять 
        (progn
   (command "_.UNDO" "_B")
   (setq U_M (1- U_M))
   (setq LastPt (list (getvar "USERR1") (getvar "USERR2")))
   (setvar "LASTPOINT" LastPt)
        )
        (alert "Отменять больше нечего")
      )
     )
	   )
    (initget "Отмени Undo Замкни Close _Undo Undo Close Close")
    )
  (initget 1)(setq CurrentPt (getpoint "\nТочка удаления замыкающей грани: "))
  (if (and
	(setq tmp (inters CurrentPt
		      (polar CurrentPt ang0 100)
		      LastPt
		      (polar LastPt ang90 100)
		      nil
		      )
	  )
	(setq CurrentPt tmp)
	(setq tmp (inters CurrentPt
		      (polar CurrentPt ang0 100)
		      BasePt1
		      (polar BasePt1 ang90 100)
		      nil
		      )
	  )
	)
    (progn
      	(command "_LINE" "_non" LastPt "_non" CurrentPt "")
      	(command "_LINE" "_non"  CurrentPt  "_non" tmp "")
      	(command "_LINE" "_non"  tmp  "_non" BasePt1 "")
      )
    )
  (if elast
    (progn
      (setq ss nil ss (ssadd))
      (while (setq eLast (entnext eLast)) (ssadd eLast ss))
      (if (= (sslength ss) 0);_ Пустой набор
	(setq ss nil)
	)
      )
    )
  (if ss
    (progn
      (if (and (getvar "PEDITACCEPT") (= (getvar "PEDITACCEPT") 1))
	(command "_pedit" "_Multiple" ss "" "_Join" 0 "")
	(command "_pedit" "_Multiple" ss "" "_Y" "_Join" 0 "")
	)
      (setq ss nil)
      )
    )
  (mapcar '(lambda (x) (setvar (car x) (cdr x))) usr_list)
  (vla-EndUndoMark
      (vla-get-activedocument (vlax-get-acad-object))
    )
  (princ)
 )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 02.04.2009, 21:44
#196
Neznayka


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


Ура!!! Вот счастье-то какое.
Пока оттестировать досконально нечем, серьёзных замечаний я не вижу, так только по мелочи:

1. Нажатие на esc во время выполнения команды УДАЛЯЕТ ВСЕ ранее созданное. А не прерывает команду.
2. Очень желательно чтоб во время отрисовки перекрестье было временно повернуто согласно грани 1-2.
3. Не помешало бы видеть саму полилинию во время создания «колена», а не наблюдать её появления как свершившийся факт после клика.
4. Почему Вы решили, что замыкание по нажатию на пробел более удобно чем просто правый клик, если потому что реализовать программно правый клик труднее, то у меня вопросов нет. Впрочем правый клик это на любителя

Последний раз редактировалось Neznayka, 02.04.2009 в 22:27.
Neznayka вне форума  
 
Автор темы   Непрочитано 03.04.2009, 10:53
#197
VVA

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


Цитата:
Сообщение от Neznayka Посмотреть сообщение
Ура!!! Вот счастье-то какое.
Пока оттестировать досконально нечем, серьёзных замечаний я не вижу, так только по мелочи:

1. Нажатие на esc во время выполнения команды УДАЛЯЕТ ВСЕ ранее созданное. А не прерывает команду.
Да, так было и задумано, но можно передумать. Надо?
2. Очень желательно чтоб во время отрисовки перекрестье было временно повернуто согласно грани 1-2.
Это можно попробывать
3. Не помешало бы видеть саму полилинию во время создания «колена», а не наблюдать её появления как свершившийся факт после клика.
Это сложнее. Не обещаю.
4. Почему Вы решили, что замыкание по нажатию на пробел более удобно чем просто правый клик, если потому что реализовать программно правый клик труднее, то у меня вопросов нет. Впрочем правый клик это на любителя
"Дерусь, потому что просто дерусь" © Портос. Я решил что так удобнее. Но можно передумать. Надо?
Кстати правый клик тоже обрабатыватся. И что делать тогда по нажатию на пробел.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 03.04.2009, 12:21
#198
Neznayka


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


ЕСЛИ ЭТО НЕ трудозатратно, то, пожалуйста. На пробел - завершение команды на том, где мы остановились и запуск команды по-новому.
Neznayka вне форума  
 
Автор темы   Непрочитано 03.04.2009, 14:08
#199
VVA

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


Вариант 2
Код:
[Выделить все]
 ;_Dificult RECtangle
(defun C:DREC (/	*error*	 ss	  BasePt1  BasePt2  tmp
	       ang0	ang90	 CurrentPt	   LastPt   U_M
	       usr_list	eLast
	      )
  (vl-load-com)
  (defun *error* (msg /)
    (while (> (getvar "CMDACTIVE") 0) (command))
    (mapcar '(lambda (x) (setvar (car x) (cdr x))) usr_list)
    (princ msg)
    (if	elast
      (progn
	(setq ss nil
	      ss (ssadd)
	) ;_ end of setq
	(while (setq eLast (entnext eLast)) (ssadd eLast ss))
	(if (= (sslength ss) 0) ;_ Пустой набор
	  (setq ss nil)
	) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if
;;;  (if ss (command "_.ERASE" ss ""))
    (if	(and (getvar "PEDITACCEPT") (= (getvar "PEDITACCEPT") 1))
      (command "_pedit" "_Multiple" ss "" "_Join" 0 "")
      (command "_pedit" "_Multiple" ss "" "_Y" "_Join" 0 "")
    ) ;_ end of if
    (setq ss nil)
    (vla-EndUndoMark
      (vla-get-activedocument (vlax-get-acad-object))
    ) ;_ end of vla-EndUndoMark
    (princ)
  ) ;_ end of defun
  (setq	usr_list (mapcar '(lambda (x) (cons x (getvar x)))
			 '("USERR1" "USERR2")
		 ) ;_ end of mapcar
  ) ;_ end of setq
  (vla-StartUndoMark
    (vla-get-activedocument (vlax-get-acad-object))
  ) ;_ end of vla-StartUndoMark
;;;Проверяем установки UNDO и устанавливает All control 
  (setq U_M (getvar "UNDOCTL"))
  (cond
    ((= (logand U_M 1) 0) ;_ Отключено UNDO
     (command "_.UNDO" "_All")
    )
    ((= (logand U_M 3) 3) ;_ Разрешена отмена одной операции
     (command "_.UNDO" "_Control" "_All")
    )
    (t nil)
  ) ;_ end of cond
;;; Запоминаем в eLast последний примитив 
  (if (null (setq eLast (entlast)))
    (progn (entmake '((0 . "point") (10 0.0 0.0 0.0)))
	   (setq eLast (entlast))
	   (entdel eLast)
    ) ;_ end of progn
  ) ;_ end of if
  (while
    (and (setq U_M 0) ;_VVA Устанавливаем счетчик отмен UNDO
	 (setq BasePt1 (getpoint "\nПервая базовая точка <выход>: "))
    ) ;_ end of and
     (initget 1)
     (setq BasePt2 (getpoint BasePt1 "\nВторая базовая точка: "))
     (setq ang0 (angle BasePt1 BasePt2))
     (setq ang90 (+ ang0 (* 0.5 PI)))
     (setq LastPt BasePt2)
     (command "_LINE" "_non" BasePt1 "_non" BasePt2 "")
     (initget "Отмени Undo Замкни Close _Undo Undo Close Close")
     (while (and (setq CurrentPt
			(getpoint
			  "\nВершина прямоугольника [Отмени/Замкни] <выход>: "
			) ;_ end of getpoint
		 ) ;_ end of setq
		 (/= CurrentPt "Close")
	    ) ;_ end of and
       (cond
	 ((listp CurrentPt)
	  (setq	tmp (inters CurrentPt
			    (polar CurrentPt ang0 100)
			    LastPt
			    (polar LastPt ang90 100)
			    nil
		    ) ;_ end of inters
	  ) ;_ end of setq
	  (if tmp
	    (progn
	      (setvar "USERR1" (car LastPt)) ;_Запоминаем X точки
	      (setvar "USERR2" (cadr LastPt)) ;_Запоминаем Y точки
	      (command "_.UNDO" "_M") ;_Ставим метку UNDO 
	      (command "_LINE"	 "_non"	   LastPt    "_non"
		       tmp	 "_non"	   CurrentPt ""
		      ) ;_ end of command
	      (setq LastPt CurrentPt)
	      (setq U_M (1+ U_M))
	    ) ;_ end of progn
	  ) ;_ end of if
	 )
	 ((= CurrentPt "Undo")
	  (if (> U_M 0) ;_ Если есть что отменять 
	    (progn
	      (command "_.UNDO" "_B")
	      (setq U_M (1- U_M))
	      (setq LastPt (list (getvar "USERR1") (getvar "USERR2")))
	      (setvar "LASTPOINT" LastPt)
	    ) ;_ end of progn
	    (alert "Отменять больше нечего")
	  ) ;_ end of if
	 )
       ) ;_ end of cond
       (initget "Отмени Undo Замкни Close _Undo Undo Close Close")
     ) ;_ end of while
     (if (= CurrentPt "Close")
       (progn
	 (initget 1)
	 (setq
	   CurrentPt (getpoint "\nТочка удаления замыкающей грани: ")
	 ) ;_ end of setq
	 (if (and
	       (setq tmp (inters CurrentPt
				 (polar CurrentPt ang0 100)
				 LastPt
				 (polar LastPt ang90 100)
				 nil
			 ) ;_ end of inters
	       ) ;_ end of setq
	       (setq CurrentPt tmp)
	       (setq tmp (inters CurrentPt
				 (polar CurrentPt ang0 100)
				 BasePt1
				 (polar BasePt1 ang90 100)
				 nil
			 ) ;_ end of inters
	       ) ;_ end of setq
	     ) ;_ end of and
	   (progn
	     (command "_LINE" "_non" LastPt "_non" CurrentPt "")
	     (command "_LINE" "_non" CurrentPt "_non" tmp "")
	     (command "_LINE" "_non" tmp "_non" BasePt1 "")
	   ) ;_ end of progn
	 ) ;_ end of if
       ) ;_ end of progn
     ) ;_ end of if
     (setq ss nil)
     (if elast
       (progn
	 (setq ss nil
	       ss (ssadd)
	 ) ;_ end of setq
	 (while (setq eLast (entnext eLast)) (ssadd eLast ss))
	 (if (= (sslength ss) 0) ;_ Пустой набор
	   (setq ss nil)
	 ) ;_ end of if
       ) ;_ end of progn
     ) ;_ end of if
     (if ss
       (progn
	 (if (and (getvar "PEDITACCEPT") (= (getvar "PEDITACCEPT") 1))
	   (command "_pedit" "_Multiple" ss "" "_Join" 0 "")
	   (command "_pedit" "_Multiple" ss "" "_Y" "_Join" 0 "")
	 ) ;_ end of if
	 (setq ss nil)
       ) ;_ end of progn
     ) ;_ end of if
     (setq eLast (entlast))
  ) ;_ end of while
  (mapcar '(lambda (x) (setvar (car x) (cdr x))) usr_list)
  (vla-EndUndoMark
    (vla-get-activedocument (vlax-get-acad-object))
  ) ;_ end of vla-EndUndoMark
  (princ)
) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 03.04.2009, 16:22
#200
Neznayka


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


стало хуже: по правому клику появляется контектное меню и в нём надо выбрать ЗАМКНИ, тогда только можно замкнуть прямоугольник.Необходимо блокировать контекстное меню и правый клик должен сразу активировать ЗАМКНИ
Neznayka вне форума  
 
Автор темы   Непрочитано 03.04.2009, 16:28
#201
VVA

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


Neznayka, Тогда не будет опции Отмени.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 03.04.2009, 17:13
#202
Neznayka


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


э-э... т.е ctrl+z, даже и не знаю что лучше, но как во 2 варианте тоже плохо, может ну её (опцию Отмени)
Neznayka вне форума  
 
Автор темы   Непрочитано 03.04.2009, 17:28
#203
VVA

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


Neznayka, Ctrl+Z будет. Не будет отмены, если не устраивает указанная вершина.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 03.04.2009, 21:50
#204
Neznayka


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


ок.
Neznayka вне форума  
 
Автор темы   Непрочитано 06.04.2009, 12:22
#205
VVA

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


Еще один вариант: замкни пробелу или выбор опции по ПКМ, ESC - выход (на предыдущий уровень).
Код:
[Выделить все]
 ;_Dificult RECtangle
(defun C:DREC (/	*error*	 ss	  BasePt1  BasePt2  tmp
	       ang0	ang90	 CurrentPt	   LastPt   U_M
	       usr_list	eLast Reg
	      )
  (vl-load-com)
  (defun *error* (msg /)
    (while (> (getvar "CMDACTIVE") 0) (command))
    (mapcar '(lambda (x) (setvar (car x) (cdr x))) usr_list)
    (princ msg)
    (if	elast
      (progn
	(setq ss nil
	      ss (ssadd)
	) ;_ end of setq
	(while (setq eLast (entnext eLast)) (ssadd eLast ss))
	(if (= (sslength ss) 0) ;_ Пустой набор
	  (setq ss nil)
	) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if
;;;  (if ss (command "_.ERASE" ss ""))
    (if	(and (getvar "PEDITACCEPT") (= (getvar "PEDITACCEPT") 1))
      (command "_pedit" "_Multiple" ss "" "_Join" 0 "")
      (command "_pedit" "_Multiple" ss "" "_Y" "_Join" 0 "")
    ) ;_ end of if
    (setq ss nil)
    (vla-EndUndoMark
      (vla-get-activedocument (vlax-get-acad-object))
    ) ;_ end of vla-EndUndoMark
    (princ)
  ) ;_ end of defun
  (setq	usr_list (mapcar '(lambda (x) (cons x (getvar x)))
			 '("USERR1" "USERR2" "CMDECHO")
		 ) ;_ end of mapcar
  ) ;_ end of setq
  (setvar "CMDECHO" 0)
  (vla-StartUndoMark
    (vla-get-activedocument (vlax-get-acad-object))
  ) ;_ end of vla-StartUndoMark
;;;Проверяем установки UNDO и устанавливает All control 
  (setq U_M (getvar "UNDOCTL"))
  (cond
    ((= (logand U_M 1) 0) ;_ Отключено UNDO
     (command "_.UNDO" "_All")
    )
    ((= (logand U_M 3) 3) ;_ Разрешена отмена одной операции
     (command "_.UNDO" "_Control" "_All")
    )
    (t nil)
  ) ;_ end of cond
;;; Запоминаем в eLast последний примитив 
  (if (null (setq eLast (entlast)))
    (progn (entmake '((0 . "point") (10 0.0 0.0 0.0)))
	   (setq eLast (entlast))
	   (entdel eLast)
    ) ;_ end of progn
  ) ;_ end of if
  (while
    (and (setq U_M 0) ;_VVA Устанавливаем счетчик отмен UNDO
	 (setq BasePt1 (getpoint "\nПервая базовая точка <выход>: "))
    ) ;_ end of and
     (initget 1)
     (setq BasePt2 (getpoint BasePt1 "\nВторая базовая точка: "))
     (setq ang0 (angle BasePt1 BasePt2))
     (setq ang90 (+ ang0 (* 0.5 PI)))
     (setq LastPt BasePt2)
     (command "_LINE" "_non" BasePt1 "_non" BasePt2 "")
     (initget "Отмени Undo Замкни Close Дуга Arc Произвольно Free _Undo Undo Close Close Arc Arc Free Free")
     (vl-catch-all-apply
       '(lambda	()
	  (while (and (setq CurrentPt
			     (getpoint
			       "\nВершина прямоугольника (Esc - выход) [Отмени/Дуга/Произвольно/Замкни] <замкни>: "
			     ) ;_ end of getpoint
		      ) ;_ end of setq
		      (/= CurrentPt "Close")
		 ) ;_ end of and
	    (cond
	      ((listp CurrentPt)
	       (setq tmp (inters CurrentPt
				 (polar CurrentPt ang0 100)
				 LastPt
				 (polar LastPt ang90 100)
				 nil
			 ) ;_ end of inters
	       ) ;_ end of setq
	       (if tmp
		 (progn
		   (setvar "USERR1" (car LastPt)) ;_Запоминаем X точки
		   (setvar "USERR2" (cadr LastPt)) ;_Запоминаем Y точки
		   (command "_.UNDO" "_M") ;_Ставим метку UNDO 
		   (command "_LINE"   "_non"	LastPt	  "_non"
			    tmp	      "_non"	CurrentPt ""
			   ) ;_ end of command
		   (setq LastPt CurrentPt)
		   (setq U_M (1+ U_M))
		 ) ;_ end of progn
	       ) ;_ end of if
	      )
	      ((= CurrentPt "Arc")
	        (setvar "USERR1" (car LastPt)) ;_Запоминаем X точки
	        (setvar "USERR2" (cadr LastPt)) ;_Запоминаем Y точки
	        (command "_.UNDO" "_M") ;_Ставим метку UNDO
	        (setvar "CMDECHO" 1)
	        (command "_ARC" "_non" LastPt)
	        (while (> (getvar "CMDACTIVE") 0) (command pause))
	        (setvar "CMDECHO" 0)
	        (setq LastPt (getvar "LASTPOINT"))
	        (setq U_M (1+ U_M))
	       )
	      ((= CurrentPt "Free")
	        (setvar "USERR1" (car LastPt)) ;_Запоминаем X точки
	        (setvar "USERR2" (cadr LastPt)) ;_Запоминаем Y точки
	        (command "_.UNDO" "_M") ;_Ставим метку UNDO
	        (setvar "CMDECHO" 1)
	        (command "_Line" "_non" LastPt)
	        (while (> (getvar "CMDACTIVE") 0) (command pause))
	        (setvar "CMDECHO" 0)
	        (setq LastPt (getvar "LASTPOINT"))
	        (setq U_M (1+ U_M))
	       )
	      ((= CurrentPt "Undo")
	       (if (> U_M 0) ;_ Если есть что отменять 
		 (progn
		   (command "_.UNDO" "_B")
		   (setq U_M (1- U_M))
		   (setq
		     LastPt (list (getvar "USERR1") (getvar "USERR2"))
		   ) ;_ end of setq
		   (setvar "LASTPOINT" LastPt)
		 ) ;_ end of progn
		 (alert "Отменять больше нечего")
	       ) ;_ end of if
	      )
	    ) ;_ end of cond
           (initget "Отмени Undo Замкни Close Дуга Arc Произвольно Free _Undo Undo Close Close Arc Arc Free Free")
	  ) ;_ end of while
	) ;_ end of lambda
     ) ;_ end of vl-catch-all-apply
     (if (or (null CurrentPt) (= CurrentPt "Close"))
       (progn
	 (initget 1)
	 (setq
	   CurrentPt (getpoint "\nТочка удаления замыкающей грани: ")
	 ) ;_ end of setq
	 (if (and
	       (setq tmp (inters CurrentPt
				 (polar CurrentPt ang0 100)
				 LastPt
				 (polar LastPt ang90 100)
				 nil
			 ) ;_ end of inters
	       ) ;_ end of setq
	       (setq CurrentPt tmp)
	       (setq tmp (inters CurrentPt
				 (polar CurrentPt ang0 100)
				 BasePt1
				 (polar BasePt1 ang90 100)
				 nil
			 ) ;_ end of inters
	       ) ;_ end of setq
	     ) ;_ end of and
	   (progn
	     (command "_LINE" "_non" LastPt "_non" CurrentPt "")
	     (command "_LINE" "_non" CurrentPt "_non" tmp "")
	     (command "_LINE" "_non" tmp "_non" BasePt1 "")
	   ) ;_ end of progn
	 ) ;_ end of if
       ) ;_ end of progn
     ) ;_ end of if
     (setq ss nil)
     (if elast
       (progn
	 (setq ss nil
	       ss (ssadd)
	 ) ;_ end of setq
	 (while (setq eLast (entnext eLast)) (ssadd eLast ss))
	 (if (= (sslength ss) 0) ;_ Пустой набор
	   (setq ss nil)
	 ) ;_ end of if
       ) ;_ end of progn
     ) ;_ end of if
     (if ss
       (progn
	 (if (and (getvar "PEDITACCEPT") (= (getvar "PEDITACCEPT") 1))
	   (command "_pedit" "_Multiple" ss "" "_Join" 0 "")
	   (command "_pedit" "_Multiple" ss "" "_Y" "_Join" 0 "")
	 ) ;_ end of if
	 (setq ss nil)
       ) ;_ end of progn
     ) ;_ end of if
     (setq eLast (entlast))
  ) ;_ end of while
  (mapcar '(lambda (x) (setvar (car x) (cdr x))) usr_list)
  (vla-EndUndoMark
    (vla-get-activedocument (vlax-get-acad-object))
  ) ;_ end of vla-EndUndoMark
  (princ)
) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 06.04.2009 в 17:03. Причина: Изменено по предложению #206
VVA вне форума  
 
Непрочитано 06.04.2009, 13:58
#206
Neznayka


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


Все супер, но тут сейчас коллега вносит предложение…
(я конечно понимаю, что наглость второе счастье
Короче коллега говорит, а нельзя ли сделать, чтоб можно было дуги рисовать и или произвольные (неортогональные линии) рисовать. Типа кликнул правой и выбрал в контекстном меню пункт «дуга», нарисовал её и дальше в прежнем режиме или нажал шифт и рисуй линии под любыми углами , а как отпустил снова автоматом включается нормальная работа лиспа.
p/s по-русски drec это вкус
СПАСИБО!!!
Neznayka вне форума  
 
Автор темы   Непрочитано 06.04.2009, 17:03
#207
VVA

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


Neznayka, Изменил #205
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 07.04.2009, 00:10
#208
Neznayka


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


Все. У меня и придраться не к чему.
ОГРОМНОЕ ВАМ СПАСИБО!
p/s помните, я просил лисп для отрисовки прямоугольника по 3 точкам. так этот новый лисп заменяет тот старый, только на пробел придется жать.

добавлю после активного юзанья лиспа:
во-первых (извиняюсь за фразу) я "кипяточком писаю" от drec, но вплыло пару мелких недочетов.
2. в лиспе нужно предусмотреть "реверс" иногда он "колено" не в ту сторону заворачивает, типа нажал клавишу и "колено" перевернулось. Если непонятно о чём я. то могу скриншот выложить.
3. лисп во время отрисовки любит прятать полилинию под растр, неудобно когда не контролируешь что чертишь.
4 иногда (когда еще не понял) создаются полилинии нулевой длинны
еще раз спасибо.

Последний раз редактировалось Neznayka, 08.04.2009 в 23:36.
Neznayka вне форума  
 
Непрочитано 18.05.2009, 17:53
#209
MeshIN

Изыскания и САПР
 
Регистрация: 05.07.2008
Ижевск
Сообщений: 297


VVA, а программы могут быть переделаны под Bricscad???

Начальство купило 20 мест, и без этих команд, как без рук
MeshIN вне форума  
 
Автор темы   Непрочитано 18.05.2009, 18:39
#210
VVA

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


MeshIN, Все зависит, настколько полно BricsCad поддерживает vla-методы и объектную модель. Пока что я знаю, что именно при использовании VLA-* были проблемы. Хотя в BricsCad V9 заявляют
Быстрое ядро LISP с поддержкой более 450 VLAX функций Но все равно нужно пробовать
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 18.05.2009, 20:58
#211
MeshIN

Изыскания и САПР
 
Регистрация: 05.07.2008
Ижевск
Сообщений: 297


Цитата:
Сообщение от VVA Посмотреть сообщение
MeshIN, Все зависит, настколько полно BricsCad поддерживает vla-методы и объектную модель. Пока что я знаю, что именно при использовании VLA-* были проблемы. Хотя в BricsCad V9 заявляют
Быстрое ядро LISP с поддержкой более 450 VLAX функций Но все равно нужно пробовать
Я конечно уже пробывал, загружал в Brics V9.2, *.cui файл прочитало нормально, работает реверс полилинии, построение прямоугольника по 3 точкам, остальные функции к сожалению не работают (хотя я может что то и пропустил)
MeshIN вне форума  
 
Непрочитано 20.05.2009, 14:44
#212
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


В 2010-м автокаде под вистой 64х проблема-не вставляются панели и кнопки, команды обрабатывается только при их тупом вводе в командной строке после тупой же загрузки исходного лиспа.
В 2009-м была проблема с установкой, но там надо было влоб ткнуть на фас-приложение при загрузке и потом выбрать уже в настройках меню и команд, и все встало на свои места кроме файла помощи.
Кто-нибудь сталкивался с такой проблемой?

И второе, в версии автокада Lite будут работать эти команды или там табу на лисп-приложения?
alex8888 вне форума  
 
Непрочитано 20.05.2009, 15:04
#213
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Первое. См. http://forum.dwg.ru/showthread.php?p=398240#post398240
Второе. Не будет. LISP в AutoCAD LT не поддерживается и поддерживаться не будет.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.05.2009, 15:26
#214
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


VVA, привет! Официяльное обращение.
Нужна функция, которая делает обратное CVPOLY, превращает 2D полилинию в 3D полилинию. И еще нужна функция, добавляющая в 3D полилинию вертикальный участок.
Вот есть на 3D полилинии узел, надо ткнув в него и определив знак "+" или "-" добавить либо со строны конца 3D полилинии, либо со стороны начала еще один узел. Его координаты по X и Y такие же как и у прежнего узла, а по Z строится отрезок заданной длинны.
Если смотреть на план с геоподосновой, то ткнув в узел как-бы ничего не произойдет, просто в этом месте появится вертикальный участок, где два узла окажутся друг над другом.
Данная функция нужна всем, кто прокладываетнаружные сети.
Supermax вне форума  
 
Непрочитано 20.05.2009, 15:31
#215
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Supermax, ты только уточни - а какая-нибудь часть полилинии поднимается / опускается или нет? И если да, то как определять?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 20.05.2009, 17:47
#216
VVA

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


Цитата:
Нужна функция, которая делает обратное CVPOLY, превращает 2D полилинию в 3D полилинию.
А это для сего делалось?
Цитата:
ConvTo3d -Преобразование линейных объектов в 3D полилинии
По поводу добавления сегмента Алексей вопрос уже задал
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 20.05.2009, 18:05
#217
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Ну, дык, я ж написал про "+" и "-"

VVA, так не честно! С утра в первом посте совсем другой список был, а лезть в библиотеку функций мне было лень, понадеялся на соответствие.

Кулик Алексей aka kpblc,
Цитата:
Supermax, ты только уточни - а какая-нибудь часть полилинии поднимается / опускается или нет? И если да, то как определять?
Считаю, что надо тупо прибавлять к существующему значению Z длинну участка. по ходу полилинии. Всегда добавляем узел между выбранным узлом и следующим (+1) и Z определяем суммируя введенное значение длинны со знаком.

Последний раз редактировалось Supermax, 20.05.2009 в 18:18.
Supermax вне форума  
 
Автор темы   Непрочитано 20.05.2009, 19:18
#218
VVA

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


Давай так. Есть 3d полилиния с началом в т. 0,0,0 и координатами вершин: (0 0 0) (10 10 10) (30 20 0)
Я указал 2 вершину (10 10 10) и набрал +30. Получаем полилинию с координатами вершин (0 0 0) (10 10 10) (10 10 40) (30 20 0)
Я указал 2 вершину (10 10 10) и набрал -30. Получаем полилинию с координатами вершин: ?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 20.05.2009, 19:23
#219
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


VVA, возможны варианты: при вводе хоть "+", хоть "-" можно получить разные значения:
'((0. 0. 0.) (10. 10. 10.) (10. 10. 40.) (30. 20. 0.))
'((0. 0. 0.) (10. 10. 10.) (10. 10. 40.) (30. 20. 30.))
Какой из них будет верным?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.05.2009, 20:07
#220
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Цитата:
Я указал 2 вершину (10 10 10) и набрал +30. Получаем полилинию с координатами вершин (0 0 0) (10 10 10) (10 10 40) (30 20 0)
Я указал 2 вершину (10 10 10) и набрал -30. Получаем полилинию с координатами вершин: ?
(0 0 0) (10 10 10) (10 10 -20) (30 20 0)

Все правильно. Добавляем точку только вперед по ходу полилинии.
Supermax вне форума  
 
Непрочитано 20.05.2009, 20:39
#221
ALEXGVOZ


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


привет а есть команда которая делает от множества полилиний паралельные полилинии в обе стороны??????помогите
ALEXGVOZ вне форума  
 
Автор темы   Непрочитано 20.05.2009, 20:46
#222
VVA

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


LISP. Подобие в обе стороны
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 29.05.2009 в 10:28.
VVA вне форума  
 
Непрочитано 20.05.2009, 21:08
#223
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


ALEXGVOZ, я два твоих поста удалил как "не в тему", тебе мало?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.05.2009, 23:58
#224
Yuriy-I

сп. САПР, архитектор
 
Регистрация: 25.05.2008
Санкт-Петербург
Сообщений: 116


в приложенном файле протестировал команды entrev и entrevs
красным цветом выделено, то что этими командами не обрабатывается совсем или частично.

Возможно ли подкорректировать команды, чтобы обрабатывались и объекты красного цвета?


Обратите внимание на полилинию под зеленым текстом.
Возможно ли чтобы программа делала стрелки одного направления?


С полилиниями под зеленым текстом справился - если в свойствах поставить для linetype generation - enable
то команды все обработали правильно
Вложения
Тип файла: dwg
DWG 2007
pltools---test-entrevs.dwg (263.6 Кб, 3052 просмотров)

Последний раз редактировалось Yuriy-I, 26.05.2009 в 00:27.
Yuriy-I вне форума  
 
Автор темы   Непрочитано 26.05.2009, 10:24
#225
VVA

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


Yuriy-I,
Цитата:
С полилиниями под зеленым текстом справился - если в свойствах поставить для linetype generation - enable
то команды все обработали правильно
Об этом говорилось здесь Так как страниц насобиралось уже прилично, добавил про реверс в 1-й пост. Остальное посмотрю как только немного освобожусь

*** Добавлено ***
Нужен совет.
В принципе при реверсе можно проверить, что если есть дуговые сегменты и тип линии не continuous то включить программно генерацию типа линии. Но будет ли это корректно?
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 27.05.2009 в 09:23. Причина: орфоргафия
VVA вне форума  
 
Непрочитано 26.05.2009, 22:30
#226
Yuriy-I

сп. САПР, архитектор
 
Регистрация: 25.05.2008
Санкт-Петербург
Сообщений: 116


VVA,
Цитата:
Нужен совет.
В принципе при реверсе можно проверить, что если есть дуговые сегменты и тип линии не continuos то включить программно генерацию типа линии. Но будет ли это корректно?
Я.Т.Д
Если добавить эту возможность опционально, то все будет корректно

варианты

1.
первоначальный вопрос программы может быть
Command: entrev
Выберите Полилинии, Сплайны и Отрезки для реверса Ltgen=No <сменить режим>
Select objects:
...
Если нажать enter вместо выбора объектов то режим меняется
Выберите Полилинии, Сплайны и Отрезки для реверса Ltgen=Yes <сменить режим>
Select objects:
...

2.
если присутствуют дуговые сегменты то появится дополнительный вопрос менять генерацию типа линии или нет

3. ...
Yuriy-I вне форума  
 
Непрочитано 12.06.2009, 09:08
#227
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Здравствуйте!
Очень удобная сборка, большое спасибо!
1) Неплохо бы добавить панели ленты.
2) Нельзя ли как-нибудь MPL доработать, чтоб типа offset-а?
Миниатюры
Нажмите на изображение для увеличения
Название: mpl001.jpg
Просмотров: 184
Размер:	29.5 Кб
ID:	22090  
Disney вне форума  
 
Автор темы   Непрочитано 15.06.2009, 02:03
#228
VVA

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


Disney, Можешь объяснить алгоритм получения средних точек?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 15.06.2009, 08:10
#229
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


VVA, алгоритма не нашёл, но суть такая:
Как-то надо разбить границу 1 на элементарные отрезки, и найти им пару(соответствие) на границе 2, и по каждой паре произвести MPL.
И ещё, чтоб в независимости, от того какая из двух границ выбрана в качестве границы 1, результат был одинаков.
Миниатюры
Нажмите на изображение для увеличения
Название: mpl_2004.jpg
Просмотров: 175
Размер:	25.3 Кб
ID:	22208  Нажмите на изображение для увеличения
Название: mpl_2005.jpg
Просмотров: 145
Размер:	18.9 Кб
ID:	22209  
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 15.06.2009, 21:09
#230
Gecuba


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


Цитата:
Сообщение от Disney Посмотреть сообщение
1) Неплохо бы добавить панели ленты.
Вы имеете ввиду Ribbon? Если "да" - то это Вы уже сами делаете в своей адаптации.
Например, вот так:
Миниатюры
Нажмите на изображение для увеличения
Название: pl-ribbon.jpg
Просмотров: 214
Размер:	33.7 Кб
ID:	22251  
Gecuba вне форума  
 
Непрочитано 16.06.2009, 05:20
#231
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от Gecuba Посмотреть сообщение
Вы имеете ввиду Ribbon? Если "да" - то это Вы уже сами делаете в своей адаптации.
Да, я то сделал, и признаусь простые панели было проще создавать, а вот они как раз есть в данной сборке, но тогда можно было и их не делать, дали бы только список команд, а вы как хотите так сами адаптируйте.
Миниатюры
Нажмите на изображение для увеличения
Название: Меню002.jpg
Просмотров: 183
Размер:	33.0 Кб
ID:	22270  
__________________
Почему все вдруг становятся умными, когда уже не надо?

Последний раз редактировалось Disney, 16.06.2009 в 05:35. Причина: файл забыл прикрепить
Disney вне форума  
 
Автор темы   Непрочитано 26.06.2009, 17:33
#232
VVA

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


Цитата:
Сообщение от Disney Посмотреть сообщение
Здравствуйте!
Очень удобная сборка, большое спасибо!
...
2) Нельзя ли как-нибудь MPL доработать, чтоб типа offset-а?
Думаю, для твоих нужд подойдет такой вариант программы: Rolling Ball


Еще один вариант от LEE MAC'а Lisp to create polyline between polylines

И графическая демонстрация

__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 28.09.2016 в 14:43.
VVA вне форума  
 
Непрочитано 26.06.2009, 17:55
#233
bernata


 
Регистрация: 22.09.2005
здесь могла быть ваша реклама
Сообщений: 1,279


jefferypsanders.com - легендарный ресурс.
bernata вне форума  
 
Непрочитано 01.07.2009, 12:06
#234
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,508


всем привет! на работе поставили автокад 2009. не работают PLtools. Так должно быть или можно исправить?
Рyslan вне форума  
 
Автор темы   Непрочитано 05.07.2009, 11:56
#235
VVA

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


Рyslan, Так не должно быть. Работает и в 2010. Скорее всего у тебя это
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 19.07.2009, 18:01
#236
Кочетков Андрей

Java/Kotlin backend
 
Регистрация: 03.02.2006
Сообщений: 5,735


Возможно ли несколько изменить поведение команды PL-DIVAll ?
- добавить возможность одновременной обработки нескольких полилиний
- сохранять и предлагать по умолчанию последнее введенное значение
Кочетков Андрей вне форума  
 
Непрочитано 19.08.2009, 18:06
#237
ALEXGVOZ


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


привет а есть команда которая раставляет точки в узлах полилинии???
ALEXGVOZ вне форума  
 
Непрочитано 20.08.2009, 22:13
#238
bernata


 
Регистрация: 22.09.2005
здесь могла быть ваша реклама
Сообщений: 1,279


можно штатной командой ToolPac это сделать:
ToolPac/Block/Insert on object`s
потом указываеш чохом все объекты и обозначаеш что вставить надо точку.
bernata вне форума  
 
Непрочитано 21.08.2009, 20:06
#239
ALEXGVOZ


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


объясни пожалуйста я ввожу эту команду в командной строке он пишет что не знает ее у меня автокад 2007 руссифицированый
ALEXGVOZ вне форума  
 
Автор темы   Непрочитано 26.08.2009, 21:54
#240
VVA

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


Цитата:
Сообщение от ALEXGVOZ Посмотреть сообщение
привет а есть команда которая раставляет точки в узлах полилинии???
Обновил #7 Экспорт координат выбранных точек в *.txt
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 02.09.2009, 23:50
#241
kozko


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


А кто может из этого набора вытащить отдельно ЛИСПы PL-JOIN3D иConvTo3d. Запуская на 2010 почти все коды у меня работают, кроме вышеобозначенных.
kozko вне форума  
 
Автор темы   Непрочитано 03.09.2009, 11:19
#242
VVA

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


kozko, Я проверил на 2010 RUS - работает. В чем выражается "неработа" этих кодов?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 08.10.2009, 11:27
#243
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 151


VVA, неплохо было бы ещё добавить функцию разбиения полилинии в указанных точках. Т.е. что-то вроде (PL-RAZ pline point_list) - в результате из одной полилинии получается 2 (или 3, если 2 точки, и т.д.). Возвращался бы список полилиний. Иногда бывает нужно.
Tonic вне форума  
 
Непрочитано 10.12.2009, 12:28
#244
kheylan


 
Регистрация: 24.05.2009
Екатеринбург
Сообщений: 86


VVA,
может вы и видели этот набор команд PlineTools (DeliCAD) для работы с полилинией. Может вас заинтересуют ряд идей в этом пакете, чтобы дополнить свой набор, мне очень понравились операции с частью полилинии.
Недостаток PlineTools, что он на 30 запусков.
Вложения
Тип файла: rar PlineTools.rar (217.6 Кб, 157 просмотров)
kheylan вне форума  
 
Непрочитано 17.12.2009, 14:32
#245
Игорь Костюкович


 
Регистрация: 31.07.2009
Минск
Сообщений: 40


Отличный набор функций. Полезный. Но...
В работе часто нужно присоединить какие-либо данные к только что созданной полилинии. Пока что приходится создавать полилинию стандартными командами AutoCAD'а и затем запускать самописную функцию для присоединения данных. Было бы очень удобно делать это заодно, из одной функции. Т.е. нужна функция, которая бы имитировала для пользователя стандартную команду _pline и возвращала указатель созданной полилинии или nil, если полилинию создать не удалось...
PS: К сожалению сам временем не располагаю, посему подкидываю идею сообществу.
PPS: очень вероятно, что эта задача уже реализована...
__________________
Там всё есть для счастья, меня там только нет,
Так это значит, что я там - буду!

Последний раз редактировалось Игорь Костюкович, 18.12.2009 в 09:39.
Игорь Костюкович вне форума  
 
Автор темы   Непрочитано 17.12.2009, 15:35
#246
VVA

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


Игорь Костюкович, Привет Игорь Могу предложить программу Алексея LISP. Расширенный вариант отрисовки Нужно только немного модифицировать функцию _kpblc-draw, чтобы возвращала результат или не модифицировать, а перед вызовом запомнить последний примитив и сравнить с последним примитивом после вызова.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.12.2009, 15:51
#247
Neznayka


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


Игорь Костюкович, а почему нельзя гиперссылкой присоединить какие-либо данные . Ведь с 2009 года все на ура извлекается из гиперссылок в таблицы.
Neznayka вне форума  
 
Непрочитано 18.12.2009, 09:37
#248
Игорь Костюкович


 
Регистрация: 31.07.2009
Минск
Сообщений: 40


VVA, спасибо, но... Слишком "расширенный" вариант. Из-за нехватки времени даже свой код писать некогда, не то что разобирать чужой. Автору - kpblc - отдельное спасибо.

Neznayka, хотя бы потому, что я понятия не имею, что такое гиперссылка. С таблицами не работаю. Пользую AutoCAD Map, там есть готовые механизмы присоединения к примитиву данных и хранения их в dwg - объектные данные (данные объекта). Именно с ними и работаю...
__________________
Там всё есть для счастья, меня там только нет,
Так это значит, что я там - буду!
Игорь Костюкович вне форума  
 
Автор темы   Непрочитано 18.12.2009, 17:32
#249
VVA

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


Цитата:
Сообщение от Игорь Костюкович Посмотреть сообщение
Т.е. нужна функция, которая бы имитировала для пользователя стандартную команду _pline и возвращала указатель созданной полилинии или nil, если полилинию создать не удалось...
Тогда что-то типа такого
Код:
[Выделить все]
(defun mypline( / ocmd ret)
  ;;;Имитация работы команды pline
  ;;;Возвращает имя примитива вновь созданной полилинии
  ;;;или nil в случае ошибки
  (vl-load-com)
  (setq ocmd (getvar "CMDECHO"))
  (if (vl-catch-all-error-p
        (vl-catch-all-apply
          (function
            (lambda()
              (setvar "CMDECHO" 1)
              (command "_.pline")
              (while (> (getvar "CMDACTIVE") 0)
                (command pause)
                )
              )
            )
          )
        )
    (setq ret nil)
    (setq ret (entlast))
    )
  (setvar "CMDECHO" ocmd)
  ret
  )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 20.12.2009, 07:52
#250
Nikolay 2


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


Цитата:
Сообщение от VVA Посмотреть сообщение
Тогда что-то типа такого
А к этой функции можно как-то присоединить какие-либо данные?
Nikolay 2 вне форума  
 
Непрочитано 20.12.2009, 13:42
#251
nikе

конструктор Лего
 
Регистрация: 21.10.2005
Краснодар
Сообщений: 204


->VVA
Будь добр, сделай чтоб и в Bricscad работала твоя замечательная программа!!!
nikе вне форума  
 
Непрочитано 21.12.2009, 09:19
#252
Игорь Костюкович


 
Регистрация: 31.07.2009
Минск
Сообщений: 40


VVA, спасибо, именно то, что нужно. Серьёзно не тестировал (снова ссылаюсь на недостаток времени), но основное своё назначение функция выполняет на 100%. С меня

Nikolay 2, присоединять данные к функции? У меня изначально стояла задача присоединения данных к примитиву. В данном случае примитиву, созданному приведенной выше функцией...
__________________
Там всё есть для счастья, меня там только нет,
Так это значит, что я там - буду!
Игорь Костюкович вне форума  
 
Непрочитано 21.12.2009, 14:32
#253
Nikolay 2


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


Цитата:
Сообщение от Игорь Костюкович Посмотреть сообщение
У меня изначально стояла задача присоединения данных к примитиву. В данном случае примитиву, созданному приведенной выше функцией...
Да, я конечно это имел ввиду, не правильно выразился... И как же присоединить?
Nikolay 2 вне форума  
 
Непрочитано 11.02.2010, 02:09
#254
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


Володя, вылетела из головы эта ветка. Написал предложения в http://dwg.ru/dnl/607.
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
 
Автор темы   Непрочитано 11.02.2010, 10:25
#255
VVA

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


Прочитал. Пример попросил здесь
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 11.02.2010, 10:44
#256
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,824
<phrase 1=


VVA, а можно ввести такую фичу, есть несколько отрезков которые разбросаны по чертежу, требуется объединить их в одну полилинию.
ps можно ввести запрос на создание нового объекта и поворачивать ли исходные объекты при построении нового объекта.
Draw.dwg
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 28.04.2010, 09:24
#257
KickeR


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


Помогите пожалуйста!
Нужна команда на основе rectangle, которая бы рисовала прямоугольник, но не по крайним 2 точкам, а по 2 точкам соединиющим центры противоположных сторон прямоугольника, с возможностью задать ширину этого прямоугольника. Еще поясню: забиваю эту команду, ставлю точку по оси, задаю ширину прямоугольника, ставлю вторую точку по оси и бац готова стенка! Еще желательно, присоеденить функцию прорисовки линии по которой эти две точки соединяются.
Примногоблагодарен за ранее!

Спасибо, zenon'у. Со всем разобрался.

Последний раз редактировалось KickeR, 28.04.2010 в 14:42.
KickeR вне форума  
 
Непрочитано 28.04.2010, 09:37
#258
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,824
<phrase 1=


_mline и справку прочесть по команде
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 28.04.2010, 09:48
#259
KickeR


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


УДАЛИТЕ

Последний раз редактировалось KickeR, 28.04.2010 в 14:40. Причина: нашел нужную инфу
KickeR вне форума  
 
Автор темы   Непрочитано 28.04.2010, 10:28
#260
VVA

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


В добавок к mline можно лиспом OFF2 или MOFF2 из этой темы LISP. Подобие в обе стороны
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 28.04.2010, 11:09
#261
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,824
<phrase 1=


KickeR, сказал ведь справку по команде почитать
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 28.04.2010, 14:22
#262
KickeR


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


УДАЛИТЕ

Последний раз редактировалось KickeR, 28.04.2010 в 14:39. Причина: нашел нужную инфу
KickeR вне форума  
 
Непрочитано 28.04.2010, 14:54
1 | #263
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,824
<phrase 1=


Нашел кажись, говорил ведь справку читать
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 20.05.2010, 11:36
#264
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Для нужд коллег сделал надстройку из модуля pltools которая переворачивает все линии нарисованные справа-налево
Код:
[Выделить все]
(vl-load-com)
 (setq     entire_premetiv (ssget "X" '((0 . "*LINE,*POINT")))
    counter     0)
 (while (and entire_premetiv
         (setq e1 (ssname entire_premetiv counter))
    );/ and
  (setq    counter        (1+ counter)
      ed        (entget e1))
  (cond
   ((= (cdr(assoc 0 ed)) "LINE")
    (setq delta        (safearray-value(vlax-variant-value(vla-Get-Delta (vlax-ename->vla-object e1)))))
    (cond
     ((and  (minusp(car delta)) (minusp(cadr delta)) )    ; 1 и 3 квадрант
      (setq e1        (vlax-ename->vla-object e1)
            list_pt    (mapcar '(lambda (x) (vlax-get e1 x))'(StartPoint EndPoint))
        list_pt    (reverse list_pt))
      (vla-put-StartPoint e1 (vlax-3d-point (car  list_pt)))
      (vla-put-EndPoint      e1 (vlax-3d-point (cadr list_pt))) )
      
     ((minusp(car delta))                ; 2 и 4 квадрант
      (setq e1        (vlax-ename->vla-object e1)
            list_pt    (mapcar '(lambda (x) (vlax-get e1 x))'(StartPoint EndPoint))
        list_pt    (reverse list_pt))
      (vla-put-StartPoint e1 (vlax-3d-point (car  list_pt)))
      (vla-put-EndPoint      e1 (vlax-3d-point (cadr list_pt))) )
    ) ;/ cond
   )) ;/ cond "LINE"
  ) ;/ while
 (command "draworder" entire_premetiv "" "_b")        ;отправляет entire_premetiv на задний план
Подскажите, как определить полилиния нарисована слева-направо, или наоборот не зависимо от квадранта.
sdv79 вне форума  
 
Непрочитано 23.07.2010, 19:49
#265
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,187
<phrase 1=


Подскажите, как объединить в одно целое комманды:
PL-JOIN и PL-VxRdc
Объединение полилиний чохом и Удаление вершин полилиний, которые лежат на одной прямой

т.е. есть ,например, несколько половинок симметричной детали. я их mirror- ом каждую половинку.
Затем PL-JOIN объединяет их в одно целое, а затем, чтобы не вызывать комманду PL-VxRdc и заново не указывать эти же объекты, хотелось бы автоматически "прополоть" эти линии
__________________
Kiev, Ukraine
sasha_lif вне форума  
 
Непрочитано 23.07.2010, 23:20
#266
SpillOver

Комплексные системы безопасности
 
Регистрация: 05.01.2010
Санкт-Петербург
Сообщений: 14


Здравствуйте!
Помогите,пожалуйста,решить задачу...
Не осилил всей переписки данной темы, но думаю, что мой вопрос будет интересен и все еще актуален!

В процессе рисования пожарного шлейфа полилиниями(кусками), в некоторых местах полилинии пересекаются , где-то не доходят друг до друга,где-то соединяются в вершинах(рисунок ниже) и т. п.

ВОПРОС
Как будет выглядеть код на ЛИСП, который помог бы реализовать следующее:

чтобы при выделении левой кнопкой мышки всех кусков полилиний они объединялись в одну полилинию, отсекались все ненужные кусочки(на рисунке выделено красным цветом), происходило соединение полилиний в местах с зазорамим.
На рисунке показан желаемый резельтат.
Спасибо, жду скорейшего комментария.

Рисунок:
Миниатюры
Нажмите на изображение для увеличения
Название: Полилинии.jpg
Просмотров: 130
Размер:	14.0 Кб
ID:	42731  
__________________
Скупой платит дважды! Пойду работать к скупому! :D
SpillOver вне форума  
 
Непрочитано 24.07.2010, 01:08
#267
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


>SpillOver: Пользуйся снэпом и такие вопросы возникать не будут...
gomer вне форума  
 
Непрочитано 24.07.2010, 01:46
#268
SpillOver

Комплексные системы безопасности
 
Регистрация: 05.01.2010
Санкт-Петербург
Сообщений: 14


Цитата:
Сообщение от gomer Посмотреть сообщение
>SpillOver: Пользуйся снэпом и такие вопросы возникать не будут...
Да не скажи, не все так просто...

Привязки мешают так же очень хорошо , как и помогают

Мне,например,приходится часто отключать некоторые привязки.

После того как шлейф(полилиния)нарисован единым куском, регулярно вносятся изменения:
где-то обрезается,добавляется и в спешке появляются вышеописанные косяки.
ПОЭТОМУ необходимо одним махом все подправить
__________________
Скупой платит дважды! Пойду работать к скупому! :D
SpillOver вне форума  
 
Непрочитано 26.07.2010, 11:25
#269
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


sasha_lif, сначала вызвать PL-JOIN, объединить полилинии, затем вызвать PL-VxRdc и указать "_last" (в опциях функции есть), выберется последняя созданная полилиния.
alex8888 вне форума  
 
Непрочитано 26.07.2010, 12:22
#270
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,187
<phrase 1=


alex8888, в том то и дело, что выбереться только ОДНА ЛИНИЯ
А если я спаивал PL-JOIN нескеолько полилиний, то результат , как ты советуешь, не подходит
Хотелось бы , чтобы "пропалывалось" PL-VxRdc все полилинии
__________________
Kiev, Ukraine
sasha_lif вне форума  
 
Непрочитано 26.07.2010, 12:45
#271
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,824
<phrase 1=


VVA, еще раз повторю свой вопрос
http://forum.dwg.ru/showpost.php?p=519747&postcount=256
много раз нужно было узнать общую длину разбросанных линий.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 26.07.2010, 18:53
1 | #272
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


SpillOver, используй команду PL-CSE с опцией "допуск"
[IMG]http://s60.***********/i170/1007/e8/b6b7ea3984db.gif[/IMG]
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Автор темы   Непрочитано 27.07.2010, 11:59
#273
VVA

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


Цитата:
Сообщение от sasha_lif Посмотреть сообщение
alex8888, в том то и дело, что выбереться только ОДНА ЛИНИЯ
А если я спаивал PL-JOIN нескеолько полилиний, то результат , как ты советуешь, не подходит
Хотелось бы , чтобы "пропалывалось" PL-VxRdc все полилинии
Код:
[Выделить все]
(defun C:PL-JOIN ( / ssnab count en *error* ss)
  (setq *error* pltool-err)
  (or *pl-activedoc* (setq *pl-activedoc* (vla-get-activedocument (vlax-get-acad-object))))
  (vla-StartUndoMark *pl-activedoc*)
  (pl:error-save-sysvar '(("PEDITACCEPT" 1)("CMDECHO" 0)))
  (setq ssnab (ssget "_I"))
  (while (not ssnab)(setq ssnab (ssget)))
  ;;;И 3d полилинии
  ;(setq ssnab(3dpljn ssnab 1e-6 "AcDb3dPolyline"))
  (setq count 0)
  (while (setq en (ssname ssnab count))
    (if (member '(100 . "AcDb3dPolyline")(entget en))
      (ssdel en ssnab)
      (setq count (1+ count))
    )
    )
  (setq en (entlast) count 0 ss (ssadd))
  (if (> (sslength ssnab) 1)
  (if (and (getvar "PEDITACCEPT") (= (getvar "PEDITACCEPT") 1))
    (vl-cmdf "_pedit" "_Multiple" ssnab "" "_Join" 0 "")
    (vl-cmdf "_pedit" "_Multiple" ssnab "" "_Y" "_Join" 0 ""))
  )
  (while (and (setq en (entnext en))
	      (= (cdr(assoc 0 (entget en))) "LWPOLYLINE"))
    (setq count (1+ count))(ssadd en ss)
    )
(if (> count 0)
(if (= (getvar "SysCodePage") "ANSI_1251")
    (princ (strcat "\nСоздано " (itoa count) " простых полилиний"))
    (princ (strcat "\nСreated "(itoa count)" LW polylines"))
    ))
  (if (> (sslength ss) 0)(vl-cmdf "_.SELECT" ss ""))
  (setq ssnab nil ss nil)
  (pl:error-restore-sysvar)
  (vla-EndUndoMark *pl-activedoc*)
  (princ))

сначала вызвать PL-JOIN, объединить полилинии, затем вызвать PL-VxRdc и указать "_p"
Disney, Симпатичная иконка для PL-CSE. Поделишься?
Цитата:
Сообщение от zenon Посмотреть сообщение
много раз нужно было узнать общую длину разбросанных линий.
Если узнать длину, то зачем объединять в полилиню?
Я пользуюсь этими двумя замечатьльными программами Александра Ривилиса
ObjectARX. GeomProps - площадь, длина, объем выбранных примитивов
ObjectARX. SelSim - выбор по образцу
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 27.07.2010, 12:08
#274
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,824
<phrase 1=


Цитата:
Сообщение от VVA Посмотреть сообщение
Если узнать длину, то зачем объединять в полилиню?
Ээ... это конечно хорошо вот только:
1 это дополнительная программа. (у меня и так перегружен CAD)
2 и результат нужно бывает сохранить в виде примитива.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 27.07.2010, 14:29
#275
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


VVA, что дает "_p" в PL-VxRdc?
Я попробовал ввести, выбрались все полилинии на чертеже.
В справке PL-Tools про этот ключ не нашел.
alex8888 вне форума  
 
Непрочитано 27.07.2010, 14:39 Вопросы по полилиниям
#276
ng-share


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


Не имею опыта работы с лисп, приходится использовать программы SURPAC, MICROMINE и т.д., а исходнаЯ информация готовится часто в автокаде, поэтому возникает небходимость дополнительной обработки данных перед использованирем в вышеуказанных пакетах.
Вопрос первый:Посмотрела лисп ZTXT очень полезная штука, но как бы ее использовать не только для point но и для вершин 3d polyline, очень часто чертежи делались только для того чтобы напечатать, поэтому высотная отметка в подлилинии отсутствует, а может еще и по причине работы с двумерными полилиниями.
Вопрос второй:присвоить обекту техт Z ,ближайшей Point
Вопрос третий:Сохранить объекты MTEXT в файл EXCEL или таблицу автокад.

Последний раз редактировалось ng-share, 27.07.2010 в 17:07.
ng-share вне форума  
 
Непрочитано 27.07.2010, 15:12
#277
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,187
<phrase 1=


VVA, присоединяюсь к вопросу №275, что дает ключ _p в комманде PL-VxRdc?

По идее он должен выбрать предыдущий набор.
Но в Вашем случае, действительно происходит выделение всех полилиний на чертеже (Акад 2004).

И все равно хотелось бы совместить работу комманд PL-JOIN и PL-VxRdc в один лисп.
__________________
Kiev, Ukraine
sasha_lif вне форума  
 
Автор темы   Непрочитано 27.07.2010, 16:16
#278
VVA

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


Цитата:
Сообщение от sasha_lif Посмотреть сообщение
VVA, присоединяюсь к вопросу №275, что дает ключ _p в комманде PL-VxRdc?
По идее он должен выбрать предыдущий набор.
Так и есть. В PL-JOIN добавлено сохранение обработанных полилиний в текущий набор. Если просто выхвать PL-VxRdc и указать _p, то все будет зависеть от того, сформирован ли текущий набор какой-либо командой или нет. Я имел ввиду связку PL-JOIN, потом PL-VxRdc с опцией _p
Цитата:
Сообщение от sasha_lif Посмотреть сообщение
И все равно хотелось бы совместить работу комманд PL-JOIN и PL-VxRdc в один лисп
Код:
[Выделить все]
(defun C:TEST ()
  (C:PL-JOIN)
  (SSSETFIRST nil (ssget "_p"))
  (C:PL-VxRdc)
  )
*** Добавлено
Вариант 2
Код:
[Выделить все]
(defun C:TEST1 ()
  (vl-load-com)
  (C:PL-JOIN)
  (vla-sendcommand (vla-get-activedocument (vlax-get-acad-object))
    "PL-VxRdc\n_p\n\n0.15\n")
  )
0.15 - отклонение
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 27.07.2010 в 16:21.
VVA вне форума  
 
Непрочитано 27.07.2010, 17:14
#279
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,187
<phrase 1=


VVA, на лисп из №273 выдает:
Цитата:
Command: (LOAD "D:/Documents and Settings/Admin/Рабочий стол/PL-JOIN.lsp")
C:PL-JOIN

Command: pl-join ERRNO # 93: no function definition: PL:ERROR-SAVE-SYSVAR
_.redrawall
Command:
Command: pl-join
ERRNO # 2: no function definition: PL:ERROR-SAVE-SYSVAR
_.redrawall
Command
Так, наверно должно быть так:
PL-ERROR-SAVE-SYSVAR

но дальше все равно не работает test1:

Цитата:
Command: test1
Select objects: Specify opposite corner: 8 found

Select objects:
nil

Command: PL-VxRdc

Select objects: _p
41 found
22 were filtered out.

Select objects:

Command:
Введите max отклонение от прямой (H) [угловой допуск A/отклонение H] <0.15>:
0.15
ERRNO # 5: bad argument type: 2D/3D point: nil
_.redrawall
Command:
но, зато test работает.правда нестабильно: иногда спаивает, но не попалывает. Останавливается на select object, ты жмешь ентер, еще раз ентер (где спрашивается отклонение) и говорит , что ничего не выбрано!

а иногда работает нормально: останов на допуске, жмешь ентер, и все пропалывает.

Не уверен, но вроде работает если test идет на взорванные объекты (т.е. Line),
а если объекты Pline- то не работает
__________________
Kiev, Ukraine

Последний раз редактировалось sasha_lif, 27.07.2010 в 18:04.
sasha_lif вне форума  
 
Автор темы   Непрочитано 27.07.2010, 18:04
#280
VVA

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


PL-JOIN эта немного измененная команда pltools. Она использует определенные там ф-ции, в том числе и PL-ERROR-SAVE-SYSVAR. Открой pltools.lsp и добавь или вместо PL-JOIN (найди поиском) или переименуй в PL-JOIN1 и добавь в конец. Если переименуешь в PL-JOIN1, то в команде TEST1 и ТЕST так же не забудь переименовать
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 27.07.2010, 18:16
#281
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,187
<phrase 1=


сейчас попробую, а то я чуть не так делал..

проверил
Сделал как Вы говорите:
Вашу модифицированную комманду pl-join назвал pl-join1

и закинул в plttools.lsp
параллельно исправив двоеточия на тире в двух строчах
(pl-error-save-sysvar '(("PEDITACCEPT" 1)("CMDECHO" 0)))
(pl-error-restore-sysvar)

правильно?

(defun C:PL-JOIN1 ( / ssnab count en *error* ss)
(setq *error* pltool-err)
(or *pl-activedoc* (setq *pl-activedoc* (vla-get-activedocument (vlax-get-acad-object))))
(vla-StartUndoMark *pl-activedoc*)
(pl-error-save-sysvar '(("PEDITACCEPT" 1)("CMDECHO" 0)))
(setq ssnab (ssget "_I"))
(while (not ssnab)(setq ssnab (ssget)))
;;;И 3d полилинии
;(setq ssnab(3dpljn ssnab 1e-6 "AcDb3dPolyline"))
(setq count 0)
(while (setq en (ssname ssnab count))
(if (member '(100 . "AcDb3dPolyline")(entget en))
(ssdel en ssnab)
(setq count (1+ count))
)
)
(setq en (entlast) count 0 ss (ssadd))
(if (> (sslength ssnab) 1)
(if (and (getvar "PEDITACCEPT") (= (getvar "PEDITACCEPT") 1))
(vl-cmdf "_pedit" "_Multiple" ssnab "" "_Join" 0 "")
(vl-cmdf "_pedit" "_Multiple" ssnab "" "_Y" "_Join" 0 ""))
)
(while (and (setq en (entnext en))
(= (cdr(assoc 0 (entget en))) "LWPOLYLINE"))
(setq count (1+ count))(ssadd en ss)
)
(if (> count 0)
(if (= (getvar "SysCodePage") "ANSI_1251")
(princ (strcat "\nСоздано " (itoa count) " простых полилиний!!!"))
(princ (strcat "\nСreated "(itoa count)" LW polylines"))
))
(if (> (sslength ss) 0)(vl-cmdf "_.SELECT" ss ""))
(setq ssnab nil ss nil)
(pl-error-restore-sysvar)
(vla-EndUndoMark *pl-activedoc*)
(princ))


в test и test1 изменил

Цитата:
(defun C:TEST1 ()
(vl-load-com)
(C:PL-JOIN1)
(vla-sendcommand (vla-get-activedocument (vlax-get-acad-object))
"PL-VxRdc\n_p\n\n0.15\n")
)
Цитата:
(defun C:TEST ()
(C:PL-JOIN1)
(SSSETFIRST nil (ssget "_p"))
(C:PL-VxRdc)
)
и результаты те же что и описывал #279
для test1 ругается
Цитата:
Command:
Введите max отклонение от прямой (H) [угловой допуск A/отклонение H] <0.15>:
0.15
ERRNO # 5: bad argument type: 2D/3D point: nil
_.redrawall
Command:
__________________
Kiev, Ukraine

Последний раз редактировалось sasha_lif, 27.07.2010 в 18:38.
sasha_lif вне форума  
 
Непрочитано 26.09.2010, 16:43
#282
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Можно сделать так - как вариант, допустим pl-join - чтобы разом во всем файле сшивались линейные элементы только с одинаковыми свойствами (слой, цвет, вес, тип линии, высота-Elevation)?
Для упрощения и облегчения файлов, для удобства поиска элементов, описывающих один объект и т.п. Для сшивания файлов в один. И т.п.
Иначе при сшивании можно потерять много нужного.
АлексЮстасу вне форума  
 
Непрочитано 26.09.2010, 18:13
#283
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


АлексЮстасу посмотри TotalPurge
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 26.09.2010, 20:45
#284
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Цитата:
Сообщение от Disney Посмотреть сообщение
АлексЮстасу посмотри TotalPurge
То, что нужно! (Только сшивает линии с разной глобальной толщиной, а толщину линий почему-то обнуляет).
А ведь TotalPurge у меня стоит уже не меньше полугода!
Спасибо.
TotalPurge заодно и высоты (Elevation) учитывает.

Не. Все-таки в очередной раз укрепляюсь в мысли, что универсальные, с большим числом действий программы не есть хорошо. Реальный файл эта TotalPurge обрабатывала минут пятнадцать минимум. А это был файл, собранный из трех файлов с одними горизонталями, которые, понятно, сшивать нужно однозначно - по границе слияния. На выходе я получил несшитые почему-то горизонтали, и почему-то все белого цвета (цвет их был другим). А пока это писал, Автокад вылетел с сообщением о фатальной ошибке.

Так или иначе, но было бы здорово иметь утилиту сшивания линейных элементов с учетом их свойств, но которая делала бы только это, и делала бы это быстро. Для сравнения - pl-join сшила эти горизонтали за считанные секунды. (Хотя и выдала страшное сообщение, что сейчас будет очень-очено долго).
Лучше бы был вариант pl-join или опция в pl-join, которая бы обеспечивала сшивание только соответственных линейных элементов.

Последний раз редактировалось АлексЮстасу, 26.09.2010 в 23:29.
АлексЮстасу вне форума  
 
Непрочитано 27.09.2010, 05:47
#285
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


АлексЮстасу, выложи свой файл (до оптимизации), тот что составлен из 3...
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Автор темы   Непрочитано 27.09.2010, 12:26
#286
VVA

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


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Для сравнения - pl-join сшила эти горизонтали за считанные секунды. (Хотя и выдала страшное сообщение, что сейчас будет очень-очено долго).
Это сообщение выдает команда pedit. По поводу учета elevation нужна проверка. По работе программы есть принципиальный момент: выбор делает пользователь один раз за работу команды. Поэтому для фильтрации обрабатывается предварительный выбор. Для учета свойств я использую Select Similar Ривилиса
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 27.09.2010, 13:16
#287
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Цитата:
Сообщение от VVA Посмотреть сообщение
По поводу учета elevation нужна проверка. По работе программы есть принципиальный момент: выбор делает пользователь один раз за работу команды. Поэтому для фильтрации обрабатывается предварительный выбор. Для учета свойств я использую Select Similar Ривилиса
"elevation нужна проверка" - в каком смысле?
Select Similar - оч. удобный инструмент, но последовательно запускать pl-join по числу сочетаний цвета, слоя, веса, типа, высоты (??) и долго, и легко пропустить что-то, и легко что-то не учесть.
Ну, да, выбрать все и все сшить, но с учетом свойств элементов. Одинаковые свойства - сшиваются. Разные - нет.
Согласитесь, что задача сшивания в одно естественна именно для элементов с одинаковыми свойствами, чем всего огульно. Мы же все не случайно вычерчиваем в разных слоях, цветах, типах и т.п.
АлексЮстасу вне форума  
 
Непрочитано 06.10.2010, 21:26
#288
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


VVA, для 11 када годится http://dwg.ru/dnl/607? А то установил - появились проблемы с чертежом.
Yuzer вне форума  
 
Непрочитано 06.10.2010, 23:28
#289
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Какие именно?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.10.2010, 23:47
#290
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Какие именно?
После загрузки приложения копирование с базовой точкой вело себя странно: при вставке объекта было незначительное смещение (точка та же, а объект располагается левее). Сначала грешил на единицы. Выполнил очистку, очистил прокси, поставил значение demandload в 0 - не помогло. При чем интересный факт: после выполнения всех очисток в пространстве листа копирование выполняется нормально, а в модели - глючит. После очистки в модели копируется нормально, а в листе - глючит.
В какой-то момент заметил, что все отрезки стали полилиниями (хз какие я при этом команды тыкал - может из экспресов что-то). Бодался где-то час: создавал новые файлы, копировал содержимое и т.д. Был ли это глюк самого файла или приложения сказать не могу, потому что после удаления файла удалил и приложение.
В новом файле глюков не наблюдал.
Yuzer вне форума  
 
Непрочитано 07.10.2010, 00:05
#291
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Цитата:
Сообщение от Yuzer Посмотреть сообщение
при вставке объекта было незначительное смещение
А что с привязками и шагом?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.10.2010, 00:10
#292
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А что с привязками и шагом?
Шаг, естественно, выключен, привязки - включены.
Алексей, у меня такие чудеса впервые (реально подумывал о перестановке када)
Yuzer вне форума  
 
Непрочитано 07.10.2010, 00:12
#293
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Возможно, именно привязки и сработали... И потом, можно же выполнять не копирование с базовой точкой, а вставку с исходными координатами - тогда тоже смещение есть?
P.S. Интересно, как это смещение было определено?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.10.2010, 00:21
#294
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
P.S. Интересно, как это смещение было определено?
Копирую отрезок - базовая точка конец отрезка. Вставляю скопированный в ту же точку - между отрезками небольшое расстояние (в листе 3,741мм).

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
вставку с исходными координатами
так не извращался - нервов не хватит.

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Возможно, именно привязки и сработали
Я бы грешил на это, но
Цитата:
Сообщение от Yuzer Посмотреть сообщение
При чем интересный факт: после выполнения всех очисток в пространстве листа копирование выполняется нормально, а в модели - глючит. После очистки в модели копируется нормально, а в листе - глючит.
Yuzer вне форума  
 
Непрочитано 07.10.2010, 08:49
#295
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Yuzer Посмотреть сообщение
Копирую отрезок - базовая точка конец отрезка. Вставляю скопированный в ту же точку - между отрезками небольшое расстояние (в листе 3,741мм).
А какие координаты базовой точки и вставки? Случайно не несколько парсеков?
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 07.10.2010, 10:14
#296
VVA

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


Цитата:
Сообщение от Yuzer Посмотреть сообщение
VVA, для 11 када годится http://dwg.ru/dnl/607? А то установил - появились проблемы с чертежом.
В 11 не проверял, но проблем быть не должно никаких. Т.к. никаких реакторов не используется, никакие стандартные команды не переопределяются. Хотя 100 % гарантии дать не могу.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 07.10.2010, 23:02
#297
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
А какие координаты базовой точки и вставки? Случайно не несколько парсеков?
Поясните. В моей цитате вроде расписаны все действия. Вселичина смещения 3,741мм (это замерялось через ДИСТ).
Offtop: У меня в технологии допуск меньший.
Все качели в чертеже нечались после подгрузки этого приложения. Завтра поищу сейвы - проверю.
Yuzer вне форума  
 
Непрочитано 09.10.2010, 09:10
#298
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Yuzer Посмотреть сообщение
Поясните. В моей цитате вроде расписаны все действия. Вселичина смещения 3,741мм (это замерялось через ДИСТ).
Действительно, не очень точно выразил свою мысль...
Важно, где находится отрезок и каково смещение. При работе со слишком большими числами, автокад может не справиться.
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 10.10.2010, 00:20
#299
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Подгрузил на домашнем питомце - вроде все гуд. Сразу установаил мироую ПСК (кстати, может в ней были проблемы?).
Вопрос - в свойствах была панель сумма площадей полилиний - как подгрузить ее. На этот раз выполнял все указания readme файла.
Yuzer вне форума  
 
Автор темы   Непрочитано 10.10.2010, 15:43
#300
VVA

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


Цитата:
Сообщение от Yuzer Посмотреть сообщение
в свойствах была панель сумма площадей полилиний - как подгрузить ее.
Это?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 10.10.2010, 18:39
#301
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


VVA, сполз под стол - мой мир перевернулся))).
Я все напутал - именно эту штуку я и подгрузил (которая 2010х32)! Все это время я попросту пудрил мозги... Просто скачал все разом, а название архива дал "Новые команды для работы с полилинией_1".
Yuzer вне форума  
 
Непрочитано 28.10.2010, 11:16
#302
MeshIN

Изыскания и САПР
 
Регистрация: 05.07.2008
Ижевск
Сообщений: 297


Попробовал установить на Bricscad V10 работает примерно 30% комманд, после обновления до V11 стало работать 90% , из наиболее используемых мной не работает объединение полилиний.
MeshIN вне форума  
 
Автор темы   Непрочитано 28.10.2010, 20:06
#303
VVA

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


Цитата:
Сообщение от MeshIN Посмотреть сообщение
з наиболее используемых мной не работает объединение полилиний
В команде pedit от BriCSCAD нет опции _m (multiple)
Но есть альтернатива: P_ed.lsp из CNC Tools Ссылка на поддержку BricsCAD
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 06.11.2010, 10:53
#304
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Цитата:
Сообщение от Yuzer Посмотреть сообщение
После загрузки приложения копирование с базовой точкой вело себя странно: при вставке объекта было незначительное смещение (точка та же, а объект располагается левее). Сначала грешил на единицы. Выполнил очистку, очистил прокси, поставил значение demandload в 0 - не помогло. При чем интересный факт: после выполнения всех очисток в пространстве листа копирование выполняется нормально, а в модели - глючит. После очистки в модели копируется нормально, а в листе - глючит.
В какой-то момент заметил, что все отрезки стали полилиниями (хз какие я при этом команды тыкал - может из экспресов что-то). Бодался где-то час: создавал новые файлы, копировал содержимое и т.д. Был ли это глюк самого файла или приложения сказать не могу, потому что после удаления файла удалил и приложение.
В новом файле глюков не наблюдал.

Разобрался я в чем проблема с этим копированием. Никак это не связано с приложениями, лиспами и т.п.
Использую в работе аннотативность (только размерный стиль). При задании вьюпорта часто наблюдается, что аннотативные размеры в выставленном масштабе не строятся через ВЭ (проблема решается через перезадание масштаба).
Так вот аналогичная проблема и с копированием, если разблокировать вьюпорт и задать масштаб ВЭ 1:1, а потом вернуть в старый масштаб, к примеру 1:50, то все глюки пропадают - объект вставляется в ту точку, которую выбрал (никаких смещений нет).

Offtop: p.s. Вообще дастает, что список масштабов все время слетает на британские единицы и глюки с вьюпортами+аннотативность. Надеюсь ребята из автодеска прочтут сие...
Yuzer вне форума  
 
Непрочитано 06.11.2010, 16:47
#305
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Можно добавить в объединение полилиний (PL-JOIN) допуск на расстояние между концами, чтобы сшивать при небольших разрывах? И добавить сшивание только однотипных элементов - с одинаковыми свойствами, включая высоту?
Ведь сшивать вообще все что ни попадя нужно гораздо реже, чем сшивать однородные элементы. Сшивать, используя отключения слоев и т.п. - долго и легко что-то пропустить, т.к. слоев бывает много. А высоты вообще никак не учтешь. В результате можно получить потери данных, ошибки.
АлексЮстасу вне форума  
 
Автор темы   Непрочитано 06.11.2010, 17:01
#306
VVA

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


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Сшивать, используя отключения слоев и т.п. - долго и легко что-то пропустить, т.к. слоев бывает много
Команда обрабатывает предварительный выбор. Мне в этом значительно помогает эта программа: ObjectARX. SelSim - выбор по образцу
Если вводить допуски, то нужна соответствующая настройка или дополнительный запрос. Вообще посмотрю что можно сделать
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 06.11.2010, 17:36
#307
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Цитата:
Сообщение от VVA Посмотреть сообщение
Команда обрабатывает предварительный выбор. Мне в этом значительно помогает эта программа: ObjectARX. SelSim - выбор по образцу
Если вводить допуски, то нужна соответствующая настройка или дополнительный запрос. Вообще посмотрю что можно сделать
Про SelSim меня агитировать совсем не нужно )
Вы представьте, какое число разнородных элементов может быть в файле. При ручном выборе все равно что-то да пропустишь. А высоты элементов вообще не учтешь.
АлексЮстасу вне форума  
 
Непрочитано 15.11.2010, 23:33
#308
MeshIN

Изыскания и САПР
 
Регистрация: 05.07.2008
Ижевск
Сообщений: 297


Цитата:
Сообщение от VVA Посмотреть сообщение
В команде pedit от BriCSCAD нет опции _m (multiple)
Но есть альтернатива: P_ed.lsp из CNC Tools Ссылка на поддержку BricsCAD



VVA, - это замена или надо дополнять код?
MeshIN вне форума  
 
Автор темы   Непрочитано 16.11.2010, 09:45
#309
VVA

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


MeshIN, Это замена. В команде _pedit BricsCAd нет опции _multiple
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 19.11.2010, 16:41
#310
Djur


 
Регистрация: 07.06.2008
ЗвезДонецк
Сообщений: 131


Доброго здравия Уважаемые!
Возможно ли сделать такое)
- полилиния пересекает какой-то объект, например квадрат, при обрезании полилинии внутри квадрата она не разрывается, а замыкается повторяя контур квадрата по его граням.
или я сильно много хочу?)))
Благодарю с Уважением.
__________________
Любой ПУТЬ прост, если в согласии с Вселенскими законами :) Дукха Самудая Ниродха и Марга
Djur вне форума  
 
Непрочитано 23.11.2010, 13:44
#311
hwd

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


Опубликовываю сообщение, дабы никто более не наступал на подобные (описанные ниже) грабли.

Хороший набор команд. Добавил его в сеть, для использования юзерами. Всё работает, но со справкой возникли проблемы... Дело в том, что любой chm-файл корректно открывается только с локального диска. Если пытаться открывать его из сети - корректно будет отображаться только древовидная структура документа, а содержимое листов отображаться не будет:



Т.о. в случае сетевой работы использование chm-файлов в качестве справки не годится.
Поскольку исходников справки у меня нет, я конвертнул chm-файл в html-справку (с помощью этой программки), дабы можно было её открывать через браузер IE.

Далее идёт любопытный момент... Интересующее меня содержимое справки лежит в сети по адресу:
\\Hyprostroy\dfs\SystemFolder\tools\AutoCAD tools\AcadPlagins\LISP\Pltools\help\pltools.html

Из консоли автокада открыть его можно так:
(startapp "explorer" "\\\\Hyprostroy/dfs/SystemFolder/tools/AutoCAD tools/AcadPlagins/LISP/Pltools/help/pltools.html")

Обращаю внимание на то, что путь начинается с \\\\. Если попытаться заменить их на // - ничего не получится.

Далее начинается ещё интересней... Если выше приведённую строку, которая нормально работает в консоли автокада, засунуть в кнопку так:

^C^C(startapp "explorer" "\\\\Hyprostroy/dfs/SystemFolder/tools/AutoCAD tools/AcadPlagins/LISP/Pltools/help/pltools.html")

то работать не будет... Не "ест" кнопка \\\\.

Решение предложил Александр Ривилис (за что ему огромное спасибо):

^C^C(startapp "explorer" (strcat (chr 92) (chr 92) "Hyprostroy/dfs/SystemFolder/tools/AutoCAD tools/AcadPlagins/LISP/Pltools/help/pltools.html"))

Теперь справка доступна из сети всем пользователям домена.

_________________________________________________________
п.с. За софтину благодарю (от своего имени и имени пользователей домена) всех тех, кто отмечен разделе "Благодарности".
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 24.11.2010, 00:40
#312
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Цитата:
Сообщение от hwd Посмотреть сообщение
Не "ест" кнопка \\\\.
А если попробовать скормить
Код:
[Выделить все]
^C^C(startapp "explorer" "//Hyprostroy/dfs/SystemFolder/tools/AutoCAD tools/AcadPlagins/LISP/Pltools/help/pltools.html")
По идее ничем не отличается от решения Александра.
P.S. Проверить работу не могу
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.11.2010, 07:42
#313
hwd

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А если попробовать скормить
Код:
[Выделить все]
^C^C(startapp "explorer" "//Hyprostroy/dfs/SystemFolder/tools/AutoCAD tools/AcadPlagins/LISP/Pltools/help/pltools.html")
По идее ничем не отличается от решения Александра.
P.S. Проверить работу не могу
Невнимательно читаешь... Я же написал:
Цитата:
Обращаю внимание на то, что путь начинается с \\\\. Если попытаться заменить их на // - ничего не получится.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 24.11.2010, 09:56
#314
VVA

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


hwd,
Цитата:
Сообщение от hwd Посмотреть сообщение
Обращаю внимание на то, что путь начинается с \\\\. Если попытаться заменить их на // - ничего не получится.
Я в меню пользуюсь тем, что findfile принимает строки с //, а возвращает с \\\\
Так должно сработать
Код:
[Выделить все]
^C^C(startapp "explorer" (findfile "//Hyprostroy/dfs/SystemFolder/tools/AutoCAD tools/AcadPlagins/LISP/Pltools/help/pltools.html"))
По поводу открытия chm по сети правится здесь
Цитата:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions]
"MaxAllowedZone"=dword:00000001
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 06.05.2011 в 21:08. Причина: Ссылка на реестр
VVA вне форума  
 
Непрочитано 24.11.2010, 10:23
#315
hwd

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


Цитата:
Сообщение от VVA Посмотреть сообщение
Я в меню пользуюсь тем, что findfile принимает строки с //, а возвращает с \\\\
Люботное решение, спасибо, запомню.
В моём случае findfile не всегда подойдёт, поскольку имеется множество различных библиотек, запускаемых загрузчиком при старте (в опциях автокада пути к ним не прописаны). Применительно к данной ситуации для того, чтобы предложенное решение заработало, мне придётся добавить в опции акада новый путь:
\\Hyprostroy\dfs\SystemFolder\tools\AutoCAD tools\AcadPlagins\LISP\Pltools\help,
помимо того, что уже добавлен:
\\Hyprostroy\dfs\SystemFolder\tools\AutoCAD tools\AcadPlagins\LISP\Pltools.
Я стараюсь как можно меньше вносить дополнительных путей,только если это действительно неизбежно (например путь к шрифтам нужно указывать в любом случае...).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 24.11.2010, 10:39
#316
VVA

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


hwd,
1. Можно указать полный путь.
2. Если часть пути прописана, то в к findfile можно добавить подпапку. Я этим пользуюсь для поиска библиотек блоков
(findfile "help/pltools.html") должно вернуть полный пусть, если \\Hyprostroy\dfs\SystemFolder\tools\AutoCAD tools\AcadPlagins\LISP\Pltools в путях доступа.
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 24.11.2010 в 10:42. Причина: Исменена строка "help/pltools.html"
VVA вне форума  
 
Непрочитано 24.11.2010, 11:14
#317
hwd

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


Цитата:
Сообщение от VVA Посмотреть сообщение
Если часть пути прописана, то в к findfile можно добавить подпапку.
Спасибо, это действительно удобная реализация.
Жаль, что в путях настроек нельзя хранить строки в таком виде:
%AppData%\MyCAD
Не распознаёт он системные переменные к сожалению.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 25.11.2010, 14:30
#318
MeshIN

Изыскания и САПР
 
Регистрация: 05.07.2008
Ижевск
Сообщений: 297


Цитата:
Сообщение от VVA Посмотреть сообщение
В команде _pedit BricsCAd нет опции _multiple
Сделал запрос в Bricsys - в ближайших обновлениях функция должна появиться. Будем надеяться что после этого будет работать объединение полилиний.
MeshIN вне форума  
 
Непрочитано 05.12.2010, 12:53 K VVA
#319
boretskiy.a

геодезист
 
Регистрация: 26.11.2010
Луцк
Сообщений: 33


Набор команд класный.

Последний раз редактировалось boretskiy.a, 10.12.2010 в 03:26.
boretskiy.a вне форума  
 
Непрочитано 10.12.2010, 00:22 Редактирование MPL из набора команд для редактирования полилини.
#320
boretskiy.a

геодезист
 
Регистрация: 26.11.2010
Луцк
Сообщений: 33


VVA,
Набор команд класный. Но возможен ли вариант доработки MPL? Хотелось бы чтобы была возможность ввода количества построения полилиний между двумя полилиниями. И еще, если бы это произведение работало со сплайнами, цены бы ему небыло. Спросите для чего? Для использования геодезистами при прорисовке рельефа. Если вариант доработки будет реализован, буду очень благодарен.
boretskiy.a вне форума  
 
Автор темы   Непрочитано 10.12.2010, 10:14
#321
VVA

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


boretskiy.a, Со сплайнами работать не будет. Мой тебе совет: не рисуй горизонтали сплайнами, пожалей проектировщиков, которые будут работать на твоей съемке. Не далее как на прошлой неделе переводил горизонтали-сплайны в горизонтали-полилинии. По поводу первого вопроса в принципе реализовать можно, но мне пока не ясен алгоритм, и пока нет на это свободного времени. Почему бы не воспользоваться для построения горизонталей готовыми решениями: Credo, GeoniCS, Civil ...
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 10.12.2010, 19:25
#322
boretskiy.a

геодезист
 
Регистрация: 26.11.2010
Луцк
Сообщений: 33


VVA,
Каким образом можно перевести горизонтали-сплайны в горизонтали-полилинии. И, что интересно, Ваш MPL строит полилинию межу двумя сплайнами. Спасибо.
boretskiy.a вне форума  
 
Непрочитано 19.12.2010, 11:28
#323
evg76


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


Доброе время суток уважаемые, посмотрел вот команду "PL-VxRdc -Удаление вершин полилиний, которые лежат на одной прямой" не знаю обсуждалось ли у вас тут но есть такой вопрос,я так понял она убивает вершины с отклонением, а если 2 вершины лежат на одной прямой на расстоянии от 0.01 см. до 1 метра то кроме как ручками даную проблему не решить , так ли это? и можно ли решить как нибудь сей вопрос.
evg76 вне форума  
 
Автор темы   Непрочитано 19.12.2010, 12:18
#324
VVA

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


evg76, Она убивает вершины, если отклонение меньше указанного. Если вершины лежат на одной прямой, то у них отклонение 0 (т.е. меньше любого указанного). Если вершины не удаляются, значит дело в чем-то другом. Предметно разговор можно будет вести, еслибудет файл с примером.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 20.12.2010, 08:34
#325
evg76


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


VVA, но ведь вершины должны удаляться через определенное растояние, тоесть например удать все вершины расстояние между которыми 0.5 м.
evg76 вне форума  
 
Непрочитано 20.12.2010, 08:54
#326
Лиспер


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


Это отдельная задача. По идее вершины должны удаляться при условии, что отклонение от прямой менее заданной величины...
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 20.12.2010, 09:22
#327
evg76


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


Лиспер, где взять?
evg76 вне форума  
 
Непрочитано 20.12.2010, 09:35
#328
Лиспер


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


Что "взять"? Удаление вершин через какое-то количество ед.чертежа? Хорошо, сохрани код как lsp и загрузи его. А потом скажи, какие вершины надо удалить (при условии, что удалять надо вершины с расстоянием между ними менее 100 единиц чертежа).
Код:
[Выделить все]
(entmakex '((0 . "LWPOLYLINE")
            (100 . "AcDbEntity")
            (100 . "AcDbPolyline")
            (90 . 35)
            (70 . 0)
            (43 . 0.0)
            (38 . 0.0)
            (39 . 0.0)
            (10 12665.0 8207.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 13147.0 8693.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 13008.0 8405.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 13226.0 8475.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 13157.0 8331.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12953.0 8386.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12913.0 8332.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12981.0 8267.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 13037.0 8251.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 13108.0 8275.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 13201.0 8280.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 13210.0 8249.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 13093.0 8245.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 13075.0 8204.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 13019.0 8208.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12974.0 8227.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12948.0 8251.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12935.0 8277.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12913.0 8281.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12889.0 8281.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12871.0 8269.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12874.0 8255.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12860.0 8243.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12836.0 8237.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12820.0 8253.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12812.0 8270.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12788.0 8265.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12788.0 8265.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12776.0 8240.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12768.0 8227.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12748.0 8226.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12730.0 8226.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12713.3 8197.0)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12699.6 8189.15)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (10 12666.4 8208.37)
            (40 . 0.0)
            (41 . 0.0)
            (42 . 0.0)
            (210 0.0 0.0 1.0)
            )
          ) ;_ end of entmakex
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 20.12.2010, 09:57
#329
VVA

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


Цитата:
Сообщение от Лиспер Посмотреть сообщение
Это отдельная задача. По идее вершины должны удаляться при условии, что отклонение от прямой менее заданной величины...
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 20.12.2010, 11:38
#330
evg76


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


Лиспер, ИЛИ СТАРЫЙ СТАЛ или уже все..., как запустить lsp?
evg76 вне форума  
 
Непрочитано 20.12.2010, 11:42
#331
Лиспер


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


Я ж написал:
Цитата:
Сообщение от Лиспер Посмотреть сообщение
сохрани код как lsp и загрузи его
Ну и плюс подпись VVA
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 20.12.2010, 11:53
#332
evg76


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


ну загрузил я егоЛиспер, а запустить, или еще какието движения надо делать,в моем понимании загрузил, вызвал командой и вперед
evg76 вне форума  
 
Непрочитано 20.12.2010, 11:59
#333
Лиспер


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


По идее код сразу после загрузки должен создать полилинию. Двойной клик колесом на графической области сделай
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 20.12.2010, 13:11
#334
evg76


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


получилось,
>А потом скажи, какие вершины надо удалить (при условии, что удалять >надо вершины с расстоянием между ними менее 100 единиц чертежа).
а зачем говорить пусть прога сама ищет и удаляет. В моем понимании я считаю так ввел коммаду указал какой диапазон тебя интересует и все. прога сама убила лишние точки. В этом отношеннии была помоему под мапинфо прога грабли.
evg76 вне форума  
 
Непрочитано 20.12.2010, 13:18
#335
Лиспер


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


Прекрасно. Введен диапазон - 100. Перечисли вершины (по номерам), которые надо убирать. И объясни почему.
Пойми, помогать могут только программисты, которые физически неспособны знать тонкости всех вариантов применения AutoCAD.
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 20.12.2010, 13:32
#336
evg76


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


в данном примере можно убивать почти все точки после 7, объясняю зачем это надо. это относится больше всего к тем ситуациям когда проводишь сколку в с чертежа м 1 :10000 , т.е. в 1 мм - 10 м. и бывает что кликаешь мышкой...( повсякому) а теперь расскажите как на 1 мм увидеть расстояние в 1 метр, вот тогда и надо удалять те точки которые лежат в диапазоне который потом в масштабе карты не увидишь, а еще к точке условные обозначения, прикручиваются вот и получается загромождения ситуации бывает много обрисовал токо одну
evg76 вне форума  
 
Непрочитано 20.12.2010, 13:37
#337
Лиспер


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


То есть предлагается оставить вот такую полилинию? Мне кажется, что тут что-то напутано, причем на логическом уровне...
Код:
[Выделить все]
(entmakex
  '((0 . "LWPOLYLINE")
    (100 . "AcDbEntity")
    (48 . 200.0)
    (100 . "AcDbPolyline")
    (62 . 1)
    (90 . 8)
    (70 . 0)
    (43 . 0.0)
    (38 . 0.0)
    (39 . 0.0)
    (10 12665.0 8207.0)
    (40 . 0.0)
    (41 . 0.0)
    (42 . 0.0)
    (10 13147.0 8693.0)
    (40 . 0.0)
    (41 . 0.0)
    (42 . 0.0)
    (10 13008.0 8405.0)
    (40 . 0.0)
    (41 . 0.0)
    (42 . 0.0)
    (10 13226.0 8475.0)
    (40 . 0.0)
    (41 . 0.0)
    (42 . 0.0)
    (10 13157.0 8331.0)
    (40 . 0.0)
    (41 . 0.0)
    (42 . 0.0)
    (10 12953.0 8386.0)
    (40 . 0.0)
    (41 . 0.0)
    (42 . 0.0)
    (10 12913.0 8332.0)
    (40 . 0.0)
    (41 . 0.0)
    (42 . 0.0)
    (10 12665.0 8207.0)
    (40 . 0.0)
    (41 . 0.0)
    (42 . 0.0)
    (210 0.0 0.0 1.0)
    )
  ) ;_ end of entmakex
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 20.12.2010, 14:07
#338
evg76


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


ну грубо говоря да, щас если найду файло выложу
evg76 вне форума  
 
Непрочитано 20.12.2010, 14:09
#339
Лиспер


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


Offtop: Ни хрена себе погрешности допускаются !
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 20.12.2010, 14:19
#340
evg76


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


1. Дело не в погрешностях, дело в масштабе , если ты данный чертеж попробуешь распечатать в масшабе 1см -1000 метров и более , то тебе растояния в 50 метров особую радость на листе формата А4 не будет, сам подумай, а тем более 2 точки на рассотянии 20 см.
2. почему обязательно надо что то доказывать вот люди например под мапинфо такую фишку сотворили http://asgs.narod.ru/downloads/programs/Grab.rar, тяжело что ли сделать такую же под автокад????
evg76 вне форума  
 
Непрочитано 20.12.2010, 14:24
#341
Лиспер


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


Цитата:
Сообщение от evg76 Посмотреть сообщение
растояния в 50 метров особую радость на листе формата А4 не будет
Радости - не будет. А вот точность вычислений может пострадать запросто.
Цитата:
Сообщение от evg76 Посмотреть сообщение
почему обязательно надо что то доказывать
Потому что надо полностью и сразу ставить задачу. Потому что слова "все посчитать на чертеже" после разбора запросто могут стать 20-страничным описанием задачи. Потому что просьба "сделать перенумерацию" может потребовать около 2 недель работы.
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 20.12.2010, 14:36
#342
evg76


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


полностью согласен,
я вижу вы уже пороху то понюхали , между прочим "PL-VxRdc -Удаление вершин полилиний, которые лежат на одной прямой" даная команда почти этим же занимается, и никто о точности не заикается здесь только критерии другие.
И все же аналог граблей мона сотворить?

Последний раз редактировалось evg76, 20.12.2010 в 14:55.
evg76 вне форума  
 
Непрочитано 20.12.2010, 14:51
#343
Лиспер


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


Наверное, можно. Если задание будет, к примеру, таким: "Все дуговые сегменты аппроксимируются не менее чем 2 дополнительными вершинами с шагом центрального угла не более 10°. В прямолинейном сегменте вершина удаляется, если площадь треугольника, образованного ею и двумя соседними, менее 20 ед.чертежа либо угол между двумя соседними сегментами более 170°".
Фантазии место есть. Правда, меня на подобную математику вряд ли хватит...
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 22.12.2010, 09:38
#344
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 151


VVA, есть ли возможность объединения в полилинию группы последовательных отрезков, у части из которых перепутаны местами начало и конец? Без изменения их начала/конца.
То есть, имеется несимметричный тип линии __*__*__*__, но при построении отрезка справа налево линия "переворачивается", и чтобы этого не произошло, приходится для некоторых углов (типа pi) менять направление построения (т.е. менять конец и начало). И в результате получается группа последовательных отрезков вида: (Начало-Конец)-(Начало-Конец)-(Конец-Начало)-(Начало-Конец)-(Конец-Начало).
PEDIT у меня почему-то то объединяет эти отрезки, меняя им направления, то нормально объединяет, но очень редко. Закономерности не увидел.

Так вот, Вы как эксперт по полилиниям можете подсказать, что делать для правильного объединения таких отрезков в полилинию? Может, одна из Ваших программ для работы с полилиниями это делает хорошо?
Tonic вне форума  
 
Автор темы   Непрочитано 22.12.2010, 10:02
#345
VVA

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


Tonic, У меня глубоко внутри так же используется pedit. Здесь дело, скорее всего, в порядке следования. Когда выбираешь рамкой или секрамкой, то первый выбранный (т.е последний отрисованный) и задает тон полилинии. Никаких проблем не вижу реверсировать полилинии (см команды ENTREV или ENTREVS). Или непосредственным указанием выбери нужный отрезок, а затем остальные рамкой/секрамкой.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 22.12.2010, 11:42
#346
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 151


VVA, их как раз не нужно реверсировать! Приведу пример для наглядности.



На картинке слева нарисованы 4 последовательных сегмента линии нестандартного типа (с кружком), построенные по часовой стрелке. Но так как чертёж читается не вверх ногами, я программно меняю направления некоторых отрезков (как на рисунке справа). И вот теперь нужно правый рисунок в неизменном виде преобразовать в полилинию. В этом проблема.
Tonic вне форума  
 
Автор темы   Непрочитано 22.12.2010, 12:10
#347
VVA

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


Делай 2 полилинии. Так в одной полилинии быть не может.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 03.03.2011, 12:21
#348
Nike

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


Уважаемые знатоки полилиний и гуру программирования на LISP!
Помогите реализовать пару функций для работы с полилиниями:

1) Часто при работе с полилинией приходится делать фаску (_chamfer) с заранее заданными параметрами.
Для этого, как известно, нужно последовательно двумя кликами указать смежные сегменты полилинии.
А можно ли программно свести эту операцию до одного клика у вершины смежных сегментов?

[IMG]http://s45.***********/i108/1103/b1/d42f3db0bbe7.jpg[/IMG]

2) Немного обратная операция - удаление сегмента-фаски полилинии, как это происходит при той же команде "фаска" с нулевыми параметрами, то есть удаление сегмента-фаски кликом по этому сегменту.

[IMG]http://s39.***********/i084/1103/00/e94f78f38944.jpg[/IMG]

Возможно ли реализовать эти функции?

VVA, спасибо за PL-Tools!
Nike вне форума  
 
Автор темы   Непрочитано 03.03.2011, 15:55
#349
VVA

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


Пробуй команды CF2 и CF3. CF1 похожа на CF2, только на 1 запрос больше
Код:
[Выделить все]
(defun C:CF1 ()
  (vl-load-com)
  (and (setq ss (ssget "_:S:E:L" '((0 . "LWPOLYLINE"))))
       (setq pl (ssname ss 0))
       (setq pt (getpoint "\nУкажите ближайшую вершину для CHAMFER : "))
       (setq pt (vlax-curve-getclosestpointto pl (trans pt 1 0)))
       (setq vx (vlax-curve-getparamatpoint pl pt))
       (setq vx (round vx 1))
       (setq pt1 (vlax-curve-getpointatparam
                   pl
                   (if (< (- vx 0.4) (vlax-curve-getstartparam pl))
                     (- (vlax-curve-getendparam pl) 0.4)
                     (- vx 0.4)
                   ) ;_ end of if
                 ) ;_ end of vlax-curve-getPointAtParam
       ) ;_ end of setq
       (setq pt2 (vlax-curve-getpointatparam
                   pl
                   (if (> (+ vx 0.4) (vlax-curve-getendparam pl))
                     0.4
                     (+ vx 0.4)
                   ) ;_ end of if
                 ) ;_ end of vlax-curve-getPointAtParam
       ) ;_ end of setq
       (vl-cmdf "_.CHAMFER"
                (trans pt1 0 1)
                (trans pt2 0 1)
       ) ;_ end of vl-cmdf
  ) ;_ end of and
) ;_ end of defun
(defun C:CF2 ()
  (vl-load-com)
  (and
    (princ "\nВыберите полилинию в районе вершины для CHAMFER ")
    (setq ss (ssget "_:S:E:L" '((0 . "LWPOLYLINE"))))
    (setq pl (car (ssnamex ss 0)))
    (setq pt (cadr (last pl)))
    (setq pl (cadr pl))
    (setq pt (vlax-curve-getclosestpointto pl (trans pt 1 0)))
    (setq vx (vlax-curve-getparamatpoint pl pt))
    (setq vx (round vx 1))
    (setq pt1 (vlax-curve-getpointatparam
                pl
                (if (< (- vx 0.4) (vlax-curve-getstartparam pl))
                  (- (vlax-curve-getendparam pl) 0.4)
                  (- vx 0.4)
                ) ;_ end of if
              ) ;_ end of vlax-curve-getPointAtParam
    ) ;_ end of setq
    (setq pt2 (vlax-curve-getpointatparam
                pl
                (if (> (+ vx 0.4) (vlax-curve-getendparam pl))
                  0.4
                  (+ vx 0.4)
                ) ;_ end of if
              ) ;_ end of vlax-curve-getPointAtParam
    ) ;_ end of setq
    (vl-cmdf "_.CHAMFER"
             (trans pt1 0 1)
             (trans pt2 0 1)
    ) ;_ end of vl-cmdf
  ) ;_ end of and
) ;_ end of defun
(defun C:CF3 ()
  (vl-load-com)
  (setvar "CHAMFERA" 0)
  (setvar "CHAMFERB" 0)
  (setvar "CHAMMODE" 0)
  (and
    (princ "\nВыберите удаляемый сегмент CHAMFER ")
    (setq ss (ssget "_:S:E:L" '((0 . "LWPOLYLINE"))))
    (setq pl (car (ssnamex ss 0)))
    (setq pt (cadr (last pl)))
    (setq pl (cadr pl))
    (setq pt (vlax-curve-getclosestpointto pl pt))
    (setq vx (vlax-curve-getparamatpoint pl pt))
    (setq pt1 (vlax-curve-getpointatparam
                pl
                (if (< (- vx 1) (vlax-curve-getstartparam pl))
                  (- (vlax-curve-getendparam pl) 1.4)
                  (- vx 1)
                ) ;_ end of if
              ) ;_ end of vlax-curve-getPointAtParam
    ) ;_ end of setq
    (setq pt2 (vlax-curve-getpointatparam
                pl
                (if (> (+ vx 1) (vlax-curve-getendparam pl))
                  0.4
                  (+ vx 1)
                ) ;_ end of if
              ) ;_ end of vlax-curve-getPointAtParam
    ) ;_ end of setq
    (vl-cmdf "_.CHAMFER"
             (trans pt1 0 1)
             (trans pt2 0 1)
    ) ;_ end of vl-cmdf
  ) ;_ end of and
) ;_ end of defun
;;; Doug Broad
;;; additional credits Joe Burke, Peter Toby
(defun round (value to)
  (setq to (abs to))
  (* to
     (fix (/ ((if (minusp value)
                -
                +
              ) ;_ end of if
               value
               (* to 0.5)
             )
             to
          ) ;_ end of /
     ) ;_ end of fix
  ) ;_ end of *
) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 03.03.2011, 16:33
#350
Nike

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


VVA, Большое спасибо!!
CF1 и CF2 работают, но если я имею несколько наложенных друг на друга полилиний (это у меня "кабельные трассы"), то операция выполняется только с той что наверху, на нижележащие команда уже не действует. Это поправимо?
CF3 работатет как-то не устойчиво - иногда выполняется, иногда нет, возвращая то Т, то nil и периодически запрашивает второй отрезок.
Кажется это как-то может зависит от зума в окне - приблизишь, не выполняется, отдалишь - работает
Nike вне форума  
 
Непрочитано 16.03.2011, 16:21
#351
MeshIN

Изыскания и САПР
 
Регистрация: 05.07.2008
Ижевск
Сообщений: 297


Цитата:
Сообщение от MeshIN Посмотреть сообщение
Попробовал установить на Bricscad V10 работает примерно 30% комманд, после обновления до V11 стало работать 90% , из наиболее используемых мной не работает объединение полилиний
Цитата:
Сообщение от VVA Посмотреть сообщение
В команде _pedit BricsCAd нет опции _multiple
Дождался Bricscad 11.2.9 PL-JOIN так и не работает, нашел интересный способ объединения 2D полилиний скопом - с помощью Pltools преобразуем их в 3D полилинии и командой PL-JOIN3D объединяем и снова делаем ее 2D полилинией.
Можно ли эту последовательность команд сделать макросом на кнопку? Как он должен выглядеть?

Добавлю
В _pedit (Bricscad) есть опция объединить, через нее тоже можно объединить скопом (видно опция _multiple заработала), но сначала надо запустить команду _pedit, затем _join и тогда полилинии объединяться.
Может подскажете макрос на кнопку?

Последний раз редактировалось MeshIN, 16.03.2011 в 16:36.
MeshIN вне форума  
 
Непрочитано 16.09.2011, 14:12
#352
wepp

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


Пытаюсь воспользоваться командами ConvTo2d и ConvTo3d. Объект - прямоугольник из 4-х 3d-полилиний. Когда запускаю, происходит объединений, но одна сторона прямоугольника пропадает. Почему это может происходить? Заранее спасибо за ответ..
wepp вне форума  
 
Автор темы   Непрочитано 16.09.2011, 14:14
#353
VVA

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


wepp, Выложи файлик посмотреть
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 16.09.2011, 14:26
#354
wepp

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


Цитата:
Сообщение от VVA Посмотреть сообщение
wepp, Выложи файлик посмотреть
Каюсь, в Автокаде новичок. Исходные полилинии были не замкнуты, поменял на "замкнуто: да" и всё получилось.
wepp вне форума  
 
Непрочитано 18.10.2011, 20:32
#355
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Пара противоречий в работе PL-JOIN.
См. пример в приложенном файлике.
1. При сшивании двух полилиний, образующих замкнутый контур (белая и синяя), у сшитой будет признак Closed==Yes. Если сшивать и эти две полилинии, и полилинию желтую, то у синей будет признак Closed==Yes, а у желтой Closed==No. Если же сшивать желтую и белую полилинию сверху, то у желтой возникнет Closed==Yes. Если сшивать две желтые, то у первой останется Closed==No, а у второй возникнет Closed==Yes. И т.п.
Т.е. непредсказуемо. Лучше бы что-то одно всегда у всех полилиний, образующих замкнутые контуры. В данный момент логичным кажется Closed==Yes
2. Если установить допуск на сшивание, то зеленая линия не сошьется (не замкнется) даже при достаточном допуске.
Вложения
Тип файла: dwg
DWG 2004
Пример_для_сшивания_2.dwg (34.1 Кб, 4003 просмотров)
АлексЮстасу вне форума  
 
Непрочитано 24.10.2011, 22:49 А как на счет ZW?
#356
flareon

техник-геолог
 
Регистрация: 26.12.2009
Kenigsberg
Сообщений: 79


Всем здоровья! Вот уже четыре года с большим воодушевлением пользуюсь Вашим приложением, но вот сейчас столкнулся с проблемкой...На моей нынешней работе стоит ZW 2008 и ничего толком туда не пихнуть, разве что GeoBL (и то, только потому что прописан был специально). Сам в lispе не силен...Уважаемый VVA, если есть такая возможность, помогите пожалуйста! У меня уже полгода проблема с утиллитами, программками, приложениями, со всем к чему так привык! надоело уже брать работу на дом. Заранее благодарен, всего доброго!!!
flareon вне форума  
 
Непрочитано 08.12.2011, 14:23
#357
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Интересная особенность работы команды PL-VxDel - изменяет толщину сегментов полилинии. Подробнее - во вложении.
Вложения
Тип файла: dwg
DWG 2004
PL-VxDel.dwg (35.9 Кб, 4006 просмотров)
Do$ вне форума  
 
Непрочитано 19.01.2012, 22:55
#358
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


О ConvTo2d. Использую ее для преобразовании сплайнов - иногда преобразует только поштучно. Т.е. если выделено несколько, то не преобразует.
Пишет:
Команда: ConvTo2d
найдено: 356
; ошибка: функция для аргумента не задана: -4.44089e-016

Автокад 2012 рус.
В чем может быть дело?

Или я совсем был неправ? Преобразование сплайнов в полилинии делает PL-JOIN? Но PL-JOIN ведь может посшивать при этом ненужное?

Последний раз редактировалось АлексЮстасу, 19.01.2012 в 23:45.
АлексЮстасу вне форума  
 
Автор темы   Непрочитано 20.01.2012, 10:27
#359
VVA

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


АлексЮстасу, Сплайны вообще вещь не благодарная. Выложи или пришли по почте файл. Гляну. Но с большой уверенностью могу сказать, что ошибку вызывает попытка через vlax-curve-* получить точку на сплайне. С 2010 Автокада в команде _splineedit появилась опция _polyline. Для внутренних нужд у меня есть еще и такой лисп (Преобразовать СПЛАЙНЫ в ПОЛИЛИНИИ)
Код:
[Выделить все]
(defun C:SC ( / i ss)
  ;;;Spline convert
  ;;;Convert spline to polyline
  ;;; Преобразование (конвертирование) сплайнов в полилинию
  ;;; Преобразовать СПЛАЙНЫ в ПОЛИЛИНИИ
  ;;; Точность задается цифрой "6" в команде _splinedit
  ;;; http://forum.dwg.ru/showpost.php?p=864224&postcount=359
  (setvar "PLINECONVERTMODE" 0) ;_ 0 - линейные сегменты
                                ;_ 1 - линии и дуги
(if (< (atoi (substr (ver) 13)) 2010)
(alert "Для Автокада не ниже 2010 версии")
(progn
(setq ss nil ss (ssget "_:L" '((0 . "SPLINE"))))
(setq i '-1)
(setvar "CMDECHO" 0)
(repeat (sslength ss)
  (if command-s
    (command-s "_splinedit"(ssname ss (setq i (1+ i))) "_p" "6")
    (command "_splinedit"(ssname ss (setq i (1+ i))) "_p" "6")
    )
    (grtext -2 (strcat "Inspecting : "(itoa i)))
  )
(if command-s (command-s "_regenall")(command "_regenall"))
  )
  )
  )
(princ "\nНабери SC (лат) в команде\ной строке")(princ)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 22.10.2017 в 08:17. Причина: добавил command-s
VVA вне форума  
 
Непрочитано 22.01.2012, 01:35
#360
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Цитата:
Сообщение от VVA Посмотреть сообщение
АлексЮстасу, Сплайны вообще вещь не благодарная. Выложи или пришли по почте файл. Гляну. Но с большой уверенностью могу сказать, что ошибку вызывает попытка через vlax-curve-* получить точку на сплайне. С 2010 Автокада в команде _splineedit появилась опция _polyline.
_splineedit у меня получилось запустить только для одного сплайна. А если их множество, то ненатыкаешься.
Дело, похоже, не в самих сплайнах, а в версиях Автокада. Сейчас я начал все делать в 2012 - и налетел... Т.е. в 2006-2008 именно ConvTo2d нормально преобразовывала сплайны в полилинии. И поштучно, и большие выборки. А в 2012 ConvTo2d преобразует только поштучно. А PL-JOIN преобразует, но с большими потерями геометрии.
Файл с реальными линиями-сплайнами прикладываю.

Но ConvTo2d преобразует в любой версии тоже не все сплайны почему-то.

А программа SC преобразует сплайны вполне хорошо.
Вложения
Тип файла: dwg
DWG 2004
сплайны.dwg (213.8 Кб, 4039 просмотров)

Последний раз редактировалось АлексЮстасу, 22.01.2012 в 02:20.
АлексЮстасу вне форума  
 
Автор темы   Непрочитано 23.01.2012, 10:42
#361
VVA

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


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
А программа SC преобразует сплайны вполне хорошо.
Так это _splineedit в пакетном режиме.
В 2012 проверить не могу. В 2011 RUS SP2 ConvTo2d сконвертировало без проблем
Миниатюры
Нажмите на изображение для увеличения
Название: capture-1.gif
Просмотров: 113
Размер:	267.8 Кб
ID:	73367  
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 23.01.2012, 11:21
#362
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Цитата:
Сообщение от VVA Посмотреть сообщение
Так это _splineedit в пакетном режиме.
В 2012 проверить не могу. В 2011 RUS SP2 ConvTo2d сконвертировало без проблем
Нда... Я выслал тогда почему-то те сплайны, которые и у меня хорошо преобразовывались
Здесь прикладываю сплайны упрямые из того же общего исходного файла.
Вложения
Тип файла: dwg
DWG 2004
сплайны2.dwg (318.0 Кб, 3342 просмотров)
АлексЮстасу вне форума  
 
Непрочитано 25.01.2012, 08:51
#363
Sanek72


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


Пожалуйста помогите при добовлении вершины в полилинию выводит ошибку. Как бороться?
Команда: PL-VxAdd

Укажите точку разрыва [отмени U/выход X] <выход> :
Укажите новую точку <прежняя>: ; ошибка: Возникло исключение: 0xC0000005
(Нарушение доступа)
; предупреждение: раскрутка пропущена для неверное исключение
Sanek72 вне форума  
 
Непрочитано 25.01.2012, 09:12
#364
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Версия AutoCAD? Разрядность? Наличие сервис-паков?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.01.2012, 09:55
#365
Sanek72


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


Версия AutoCAD2009? Разрядность 64-bit? Наличие сервис-паков ни одного не установленно.
Sanek72 вне форума  
 
Непрочитано 26.01.2012, 15:52
#366
gala-kt


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


C http://dwg.ru/dnl/607:
Цитата:
VVA 16-09-2009 15:55
>shinyur Сделал множественный выбор. В скором времени выложу обновление

shinyur 15-09-2009 20:30
команда "взрыва" дуг на сегменты PL-NoArc не поддерживает множественный выбор рамкой. поэтому расчленение нескольких сотен окружностей (предвартельно преобразованных в полилинии) становится непростой задачей . и при клике мимо завершает выполнение приходится снова задавать 4 параметра. намучался я... Было бы класно накинуть рамкой весь чертёж автоматически выберутся только полилинии и применить команду сразу ко всем.
У меня не получилось воспользоваться множественным выбором, хотя судя по выше приведенной цитате, он уже 2 года как функционирует. В чем может быть дело?

Последний раз редактировалось gala-kt, 26.01.2012 в 17:25.
gala-kt вне форума  
 
Автор темы   Непрочитано 27.01.2012, 18:05
#367
VVA

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


gala-kt, Подтверждаю, почему-то на dwg.ru множественный выбор отсутствует.
Цитата:
Сделал множественный выбор. В скором времени выложу обновление
Наверное забыл это сделать. Обещаю в течении нескольких дней (начиная со вторника 31, раньше не смогу) выложить
Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Нда... Я выслал тогда почему-то те сплайны, которые и у меня хорошо преобразовывались
Твои сплайны так же будут обрабатываться
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 27.01.2012, 18:15
#368
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


VVA, я позволил себе внести некоторые изменения в исходный код pltools (иначе они на 64-битных системах не работали). Проверь, плиз - все ли я там сделал, а то с меня станется
Вложения
Тип файла: rar pltools_2012-01-27(18-14-49).rar (30.3 Кб, 152 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.01.2012, 07:21
#369
Sanek72


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


Команда: PL-VxAdd

Укажите точку разрыва [отмени U/выход X] <выход> :
Укажите новую точку <прежняя>: ; ошибка: Возникло исключение: 0xC0000005
(Нарушение доступа)
; предупреждение: раскрутка пропущена для неверное исключение
Большое спасибо ошибка пропала все заработало отлично!!!!
Sanek72 вне форума  
 
Непрочитано 30.01.2012, 09:06
#370
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Sanek72, когда пропало? Точнее, после чего?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.01.2012, 09:22
#371
Sanek72


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


поменял pltools.lsp и добавил его в автозагрузку и все заработало без всяких ошибок!!!
Sanek72 вне форума  
 
Автор темы   Непрочитано 30.01.2012, 12:13
#372
VVA

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


Кулик Алексей aka kpblc, Алексей, спасибо. Изменения коснулись ф-ций _kpblc-get-objectid и _kpblc-objectidtoobject или было что-то еще?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 30.01.2012, 14:10
#373
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Не, только они, насколько я помню. Вроде больше ничего не менял - незачем
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.03.2012, 09:39
#374
olix


 
Регистрация: 16.03.2005
Санкт-Петербург
Сообщений: 89
Отправить сообщение для olix с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
VVA, я позволил себе внести некоторые изменения в исходный код pltools (иначе они на 64-битных системах не работали). Проверь, плиз - все ли я там сделал, а то с меня станется
2012 LT Eng система 86 битная не работает((
__________________
Вся гениальность – в простоте
olix вне форума  
 
Непрочитано 27.03.2012, 09:45
#375
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


и не будет
gomer вне форума  
 
Непрочитано 27.03.2012, 09:56
#376
olix


 
Регистрация: 16.03.2005
Санкт-Петербург
Сообщений: 89
Отправить сообщение для olix с помощью Skype™



придется переустанавливать систему? или менять автокад?
__________________
Вся гениальность – в простоте
olix вне форума  
 
Автор темы   Непрочитано 27.03.2012, 10:20
#377
VVA

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


Цитата:
Сообщение от olix Посмотреть сообщение
придется переустанавливать систему? или менять автокад?
Второе
Цитата из ссылки с моей подписи
Цитата:
Примечание: AutoLISP программы могут быть запущены только на полной версии Автокада, они не работают под AutoCAD LT.
Можно добавить: не работали, не работают и не будут работать
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 02.04.2012, 01:18
#378
Cfytrr

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


VVA,
Возможно ли сделать так, что бы команда PL-L2A создавала дугу не только по заданному радиусу или касательной, но и по средней точке будущей дуги, очень часто приходится добавлять в полилинию дуги которые должны пройти через з точки.

Нажмите на изображение для увеличения
Название: Дуга.gif
Просмотров: 119
Размер:	347.1 Кб
ID:	77619
__________________
...переменная FILEDIA создана для привлечения пользователей к форумам.
Cfytrr вне форума  
 
Автор темы   Непрочитано 02.04.2012, 09:39
#379
VVA

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


Cfytrr, Пока не знаю, нужно вспомнить геометрию
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 02.04.2012, 10:34
#380
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Cfytrr, судя по скрину, у тебя 2012. Там же и так можно преобразовать прямой сегмент в дуговой.
Миниатюры
Нажмите на изображение для увеличения
Название: Conv2Arc.png
Просмотров: 77
Размер:	3.8 Кб
ID:	77630  
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.04.2012, 11:58
#381
Cfytrr

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


Кулик Алексей aka kpblc,
Точно, Ваша правда.
Просто я так привык к pltools, что встроенными функциями и не пользовался...
__________________
...переменная FILEDIA создана для привлечения пользователей к форумам.
Cfytrr вне форума  
 
Непрочитано 30.04.2012, 22:54
#382
spitfire1975


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


Вот если бы добавить две функции из этой утилиты (ломанной ее я не нашел) http://www.cad-organizer.com/product...duct=polytools ... Первая рисует по полилинии офсетом замкнутую полилинию (стену), а вторая делит эту полилинию на несколько замкнутых в один клик (вырезает оконные и дверные проемы)
spitfire1975 вне форума  
 
Непрочитано 30.04.2012, 23:17
#383
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


spitfire1975, во-первых, прочитай правила форума. Во-вторых, посмотри в теме про динамические блоки - насколько я помню, подобные вопросы там поднимались. И если решение не подойдет, то переходи либо на вертикальные решения типа AutoCAD Architecture /MEP, либо вообще на Revit и Ко.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.05.2012, 13:29
#384
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Пришел чужой файл, в котором попытался полилинии преобразовать в 3Д полилинии. Получил:
Команда: ConvTo3d
найдено: 202
; ошибка: Верхняя граница SAFEARRAYBOUND оказалась меньше нижней.

или
Command: ConvTo3d
202 found
; error: Upper bound in SAFEARRAYBOUND occurred to be less than lower.
Что бы это значило?
АлексЮстасу вне форума  
 
Автор темы   Непрочитано 16.05.2012, 15:48
#385
VVA

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


АлексЮстасу, Файлик покажи (можно по почте если секретный)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 16.05.2012, 23:54
#386
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Цитата:
Сообщение от VVA Посмотреть сообщение
АлексЮстасу, Файлик покажи (можно по почте если секретный)
...в довершении препятствий вырубился сервер и инет
В файле осталась одна "кривая" полилиния - остальное преобразовать в 3Д удалось. Но только после того, как удалил элементы всех остальных типов.
Вложения
Тип файла: dwg
DWG 2004
не_преобразуется_в_3Д.dwg (306.3 Кб, 5026 просмотров)
АлексЮстасу вне форума  
 
Автор темы   Непрочитано 17.05.2012, 10:29
1 | #387
VVA

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


АлексЮстасу, "кривая" полилиния - полилиния 0 длины (совпадают начальные и конечные точки). Добавил соотвествующую проверку. Рекомендую всегда чужие чертежи проверять на
Цитата:
Команда: _-purge
Enter type of unused objects to purge
[Blocks/Dimstyles/LAyers/LTypes/MAterials/MUltileaderstyles/Plotstyles/SHapes/te
xtSTyles/Mlinestyles/Tablestyles/Visualstyles/Regapps/Zero length
geometry/Empty text objects
/All]:
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.05.2012, 12:08
#388
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Цитата:
Сообщение от VVA Посмотреть сообщение
АлексЮстасу, "кривая" полилиния - полилиния 0 длины (совпадают начальные и конечные точки). Добавил соотвествующую проверку. Рекомендую всегда чужие чертежи проверять на
Спасибо!
Волшебная сила тире перед командой.
Почему только в окне Purge этих опций нет? Мы же не телепаты. Да и девочкам лет 50-ти такие нюансы не под силу.
АлексЮстасу вне форума  
 
Непрочитано 17.05.2012, 12:20
#389
_REGEN


 
Регистрация: 14.12.2010
Там, где мамонты жили ...
Сообщений: 224


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Почему только в окне Purge этих опций нет?
AutoCAD 2011 - есть
__________________
Время – лучшее лекарство, лечит даже от жизни.
_REGEN вне форума  
 
Автор темы   Непрочитано 17.05.2012, 12:52
#390
VVA

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


Эти опции есть стандартно, по моему, уже с 2010. Для 2009 появятся, если поставить Bonus pack 1 и 2
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 18.05.2012, 00:45
#391
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Цитата:
Сообщение от _REGEN Посмотреть сообщение
AutoCAD 2011 - есть
Вот мое окно Purge, 2012 рус. Да и в 2006 оно было, кажется, ровно таким же.
Никогда не замечал, и сейчас не вижу в нем опций удаления элементов нулевой длины и т.п.
Миниатюры
Нажмите на изображение для увеличения
Название: окно_Purge_2012.JPG
Просмотров: 152
Размер:	42.8 Кб
ID:	80464  
АлексЮстасу вне форума  
 
Непрочитано 18.05.2012, 00:53
1 | #392
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Самая нижняя, недоступная опция - "Удалить геометрию нулевой длины"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.05.2012, 00:57
#393
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Самая нижняя, недоступная опция - "Удалить геометрию нулевой длины"
О, где были мои глаза!
Спасибо!!

Попробовал из окна - сильно не понравилось. Не вижу возможности удалить только линии нулевой длины и пустые тексты. Только вместе с чем-нибудь еще. (Не удивлюсь, если промажу и на этот раз)

Последний раз редактировалось АлексЮстасу, 18.05.2012 в 01:19.
АлексЮстасу вне форума  
 
Непрочитано 26.09.2012, 11:37
#394
mr_Crow


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


помогите, что случилось, как лечить? перестали работать pltools:

Command:
---- MIP Pltools loading; error: no function definition: VLAX-GET-ACAD-OBJECT
Command: R3P
Unknown command "R3P". Press F1 for help.
mr_Crow вне форума  
 
Непрочитано 26.09.2012, 12:46
#395
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


http://autolisp.ru/2010/06/09/no-fun...t-acad-object/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.10.2012, 16:43
#396
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Опять морока со сплайнами. Не удается получить в меру похожие трехмерные полилинии - отклонения в пределах 2 см. PlTools слишком сильно изменяет их геометрию при преобразованиях
Пример приложен.
Это начерчены тросы подвеса контактной сети. Они провисают под своей тяжестью, плюс на их положение влияют разные подвесы и оттяжки (здесь не показаны).
Вложения
Тип файла: dwg
DWG 2004
3dSpline.dwg (2.87 Мб, 4941 просмотров)
АлексЮстасу вне форума  
 
Автор темы   Непрочитано 16.10.2012, 19:33
#397
VVA

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


АлексЮстасу, Попробуй _splinedit опция "Преобразовать в полилинию" Появилась, по моему, с 2010 када.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 16.10.2012, 20:15
#398
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Цитата:
Сообщение от VVA Посмотреть сообщение
АлексЮстасу, Попробуй _splinedit опция "Преобразовать в полилинию" Появилась, по моему, с 2010 када.
Пардон! Забыл написать, что люди здесь упорствуют в 2006-2008! Уж скоро год будет, как держатся кремнями
АлексЮстасу вне форума  
 
Автор темы   Непрочитано 18.10.2012, 09:49
#399
VVA

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


АлексЮстасу, Тады ой. Вспомнил про программу TotalPurge
В описании сказано
Цитата:
Возможность преобразования сплайн-объектов в полилинии как методом аппроксимации линейными отрезками так и дуговыми сегментами.
Пробуй. Заявлена поддержка 2004 - 2010 версий
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 26.11.2012, 18:56
#400
WATRES

горный инженер
 
Регистрация: 25.05.2011
Петербург
Сообщений: 19


Спасибо за труд!
Часто пользуюсь. Но не разберусь, возможно ли использовать команду PL-DIVAll для нескольких полилиний сразу.
Все, разобрался, нельзя.

Последний раз редактировалось WATRES, 27.11.2012 в 17:41.
WATRES вне форума  
 
Автор темы   Непрочитано 27.11.2012, 18:36
#401
VVA

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


WATRES, All в этом случае относится ко всем сегментам полилинии.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 27.11.2012, 19:55
#402
WATRES

горный инженер
 
Регистрация: 25.05.2011
Петербург
Сообщений: 19


Цитата:
Сообщение от VVA Посмотреть сообщение
WATRES, All в этом случае относится ко всем сегментам полилинии.
Да, понятно.
Жаль, что нет функции выбора нескольких объектов.
WATRES вне форума  
 
Непрочитано 27.12.2012, 16:01
#403
olega70


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


Здравствуйте!
Подскажите, сегодня перестала работать прополка полилиний, все остальное работает, вот ошибка.

Код:
[Выделить все]
nil
Команда: PL-VxRdc
ERRNO # 0: Ошибка Automation. Вызов метода AddItems из интерфейса 
IAcadSelectionSet завершился неудачно
_.redrawall
Заранее благодарен.

PS: Автокад2012, Win7 32bit.

Последний раз редактировалось olega70, 04.01.2013 в 15:53.
olega70 вне форума  
 
Автор темы   Непрочитано 30.12.2012, 20:42
#404
VVA

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


olega70, Без файла трудно что-то сказать
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 31.12.2012, 19:26
#405
olega70


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


VVA, спасибо за отклик, щас не могу, на работе все находится, 4 января скину всю папку, но мне кажется что дело в другом, так как свою папку удалял полностью и копировал с другого компа, на котором все работает. Ну вобщем выйду на работу скину всю папку.

Еще раз спасибо.
Всех с наступающим Новым Годом!!!
Всех благ, здоровья и вдохновения!!!

Последний раз редактировалось olega70, 04.01.2013 в 15:51.
olega70 вне форума  
 
Непрочитано 04.01.2013, 12:26
#406
olega70


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


VVA, Вот вся папка Pltools.
Еще раз спасибо.

Последний раз редактировалось olega70, 04.01.2013 в 15:51.
olega70 вне форума  
 
Непрочитано 04.01.2013, 13:13
#407
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Я подозреваю, что запрашивался не код, а файл dwg...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.01.2013, 15:28
#408
olega70


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


Вот и сам файл, изолинии выделенные красным цветом, которым нужно сделать прополку, хотя на соседнем компе в этом же файле прополка работает.


Блин, ребят простите за весь мой флуд, потрите плиз все мои посты. Дело действительно было в самом файле. Извините за отнятое время.

Последний раз редактировалось olega70, 04.01.2013 в 15:53. Причина: Сам нашел проблему.
olega70 вне форума  
 
Непрочитано 04.01.2013, 19:00
#409
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


А что именно было в файле?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.01.2013, 19:31
#410
olega70


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


Да я, если честно, и не разбирался, просто скопировал все в новый файл и все заработало. Если интересно во вторник выложу его, если я его не удалил правда.


Так-с, файл не удалил, выкладываю.
Вложения
Тип файла: dwg
DWG 2000
PLAN 2012.dwg (2.07 Мб, 5371 просмотров)

Последний раз редактировалось olega70, 08.01.2013 в 10:32.
olega70 вне форума  
 
Автор темы   Непрочитано 09.01.2013, 20:00
#411
VVA

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


olega70, У меня в твоем файле PL-VxRdc отработала без ошибок. Автокад 2009 RUS SP3 + BonusPack, Windows 7 x32 4 Гб памяти
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 10.01.2013, 12:43
#412
olega70


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


VVA, да уж, странно как-то, ну да бог с ним, победил и хорошо.
olega70 вне форума  
 
Автор темы   Непрочитано 10.01.2013, 19:54
#413
VVA

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


olega70, Спишем на последсвия празднования нового года
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 23.01.2013, 16:00
#414
Alexeydwg2013


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


Отличный набор!
Подскажите, есть команда похожая на PL-DIVAll, только сразу же разбивающая полилинию на полилинии заданной длины?
Alexeydwg2013 вне форума  
 
Непрочитано 02.03.2013, 09:56
#415
perpetule


 
Регистрация: 23.09.2008
Волгоград
Сообщений: 810
<phrase 1= Отправить сообщение для perpetule с помощью Skype™


VVA
Очень нехватает функции - продолжить полилинию. В стороннем коммерческом пакете PLCO. Выбор полилинии, после чего команда отрисовки полилинии как бы продолжается с последней вершины.
perpetule вне форума  
 
Непрочитано 02.03.2013, 11:03
#416
Nike

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


Цитата:
Сообщение от perpetule Посмотреть сообщение
функции - продолжить полилинию.
Отсюда

Код:
[Выделить все]
 (defun c:con_pline (/		  ARC		ELEVATIONS
		    ENTITY	  ENTITY_LST	LAST_POINT
		    OLD_ANGDIR	  OLD_CMDECHO	OLD_OSMODE
		    OLD_PLINEWID  OLD_PROPERTIS	closed
		   )
		   ;|
Перерисовка полилинии с возможностью продолжения команды pline
|;
  (if (not *kpblc-activedoc*)
    (setq *kpblc-activedoc*
	   (vla-get-activedocument
	     (vlax-get-acad-object)
	   ) ;_end of vla-get-activedocument
    ) ;_end of vlax-get-acad-object
  ) ;_end of if
  (vla-endundomark *kpblc-activedoc*)
  (vla-startundomark *kpblc-activedoc*)
  (setq old_osmode (getvar "osmode"))
  (setq old_plinewid (getvar "plinewid"))
  (setq old_cmdecho (getvar "cmdecho"))
  (setq old_angdir (getvar "angdir"))
  (cond
    ((/= 0 (last (getvar "ucsxdir")) (last (getvar "ucsydir")))
     (princ "\nCannot continue in this UCS.")
     (princ)
    )
    ((vl-catch-all-error-p
       (setq entity
	      (vl-catch-all-apply
		'entsel
		'("\nSelect pline for continue: ")
	      )
       )
     )
     (princ)
    )
    ((not entity) (princ))
    ((not (eq "LWPOLYLINE"
	      (cdr (assoc 0
			  (setq entity_lst (entget (car entity)))
		   )
	      )
	  )
     )
     (princ "\nThis not pline.")
     (princ)
    )
    ((+runa_bit_in_flag
       4
       (cdr
	 (assoc	70
		(entget
		  (tblobjname
		    "layer"
		    (cdr (assoc	8
				(setq entity_lst (entget (car entity)))
			 )
		    )
		  )
		)
	 )
       )
     )
     (princ "\nPline is on the locked layer.")
     (princ)
    )
    ((not (equal '(210 0.0 0.0 1.0)
		 (assoc 210 entity_lst)
	  )
     )
     (princ "\nThis pline is not in WCS.")
     (princ)
    )
    ((cond
       ((+runa_bit_in_flag 1 (cdr (assoc 70 entity_lst)))
	(if (progn
	      (initget "Yes No")
	      (vl-catch-all-error-p
		(setq closed
		       (vl-catch-all-apply
			 'getkword
			 '("\nPolyline is closed, continue [Yes/No] <Yes>:")
		       )
		)
	      )
	    )
	  t
	  (cond
	    ((not closed) nil)
	    ((eq closed "Yes") nil)
	    (t t)
	  )
	)
       )
       (t nil)
     )
     (princ "\nEnd function.")
     (princ)
    )
    (t
     (setq old_propertis (+runa_mopc (car entity)))
     (setvar "cmdecho" 0)
     (setvar "angdir" 0)
     (setq elevations (list (cdr (assoc 38 entity_lst))))
     (entdel (car entity))
     (setq entity_lst (vl-remove-if-not
			(function
			  (lambda (x)
			    (member (car x)
				    '(10 40 41 42)
			    )
			  )
			)
			entity_lst
		      )
	   last_point (nth (- (length entity_lst) 4)
			   entity_lst
		      )
	   entity_lst (reverse (cddddr
				 (reverse entity_lst)
			       )
		      )
     )
     (setvar "osmode" 0)
     (vl-cmdf "_pline")
     (mapcar
       (function
	 (lambda (x)
	   (cond
	     ((= (car x) 10)
	      (vl-cmdf (trans (append (cdr x) elevations) 0 1))
	     )
	     ((= (car x) 40) (vl-cmdf "_w" (cdr x)))
	     ((= (car x) 41) (vl-cmdf (cdr x)))
	     ((= (car x) 42)
	      (cond
		((zerop (cdr x))
		 (if arc
		   (progn (vl-cmdf "_l")
			  (setq arc nil)
		   )
		 )
		)
		(arc (vl-cmdf "_a" (/ (* 720 (atan (cdr x))) pi)))
		(t
		 (vl-cmdf "_a" "_a" (/ (* 720 (atan (cdr x))) pi))
		 (setq arc t)
		)
	      )
	     )
	   )
	 )
       )
       entity_lst
     )
     (setvar "angdir" old_angdir)
     (setvar "cmdecho" 1)
     (vl-cmdf (trans (cdr last_point) 0 1))
     (setvar "osmode" old_osmode)
     (while (+runa_bit_in_flag 1 (getvar "CMDACTIVE"))
       (vl-cmdf pause)
     )
     (setvar "cmdecho" 0)
     (+runa_mopc old_propertis)
     (setvar "plinewid" old_plinewid)
     (setvar "cmdecho" old_cmdecho)
    )
  )
  (vla-endundomark *kpblc-activedoc*)
  (princ)
)

Nike вне форума  
 
Непрочитано 02.03.2013, 11:25 Nike
#417
perpetule


 
Регистрация: 23.09.2008
Волгоград
Сообщений: 810
<phrase 1= Отправить сообщение для perpetule с помощью Skype™


Спасибо! Заработало!
Там еще вот это необходимо

Перерисовка полилинии с возможностью продолжения команды pline + #416

Код:
[Выделить все]
 (defun +runa_bit_in_flag (bit flag / )
;|
(+runa_bit_in_flag 1 3)
|;
  (= (logand bit flag) bit))

Код:
[Выделить все]
 (defun +runa_mopc (ent_name /
          C_COLOR C_LAYER C_LINE_TYPE
          C_LINE_TYPE_SCALE
          C_LINE_WEIGHT OLD_PROPERTIS I)
;|
(+runa_mopc (car (entsel)))
(+runa_mopc (+runa_mopc (car (entsel))))
Reval - old propertis (layer linetype scale etc.)
|;
  (setq old_propertis (list (cons 8 (getvar "clayer"))
             (cons 6 (getvar "celtype"))
             (cons 62 (getvar "cecolor"))
             (cons 370 (getvar "celweight"))
             (cons 48 (getvar "celtscale"))
             ))
  (if (not (listp ent_name)) (setq ent_name (entget ent_name)))
  (setq c_layer (cdr (assoc 8 ent_name)))
  (setq c_line_type (if (setq i (assoc 6 ent_name))
            (cdr i) "BYLAYER"))
  (setq c_color
  (if (setq i (assoc 62 ent_name))
  (if (eq (type (setq i (cdr i))) 'STR) i (itoa i))
    "BYLAYER"))
  (setq c_line_weight (if (setq i (assoc 370 ent_name))
         (cdr i) -1))
  (setq c_line_type_scale (if (setq i (assoc 48 ent_name))
             (cdr i) 1.0))
  (setvar "clayer" c_layer)
  (setvar "celtype" c_line_type)
  (setvar "cecolor" c_color)
  (setvar "celweight" c_line_weight)
  (setvar "celtscale" c_line_type_scale)
  old_propertis
  )

perpetule вне форума  
 
Непрочитано 06.06.2013, 12:45
#418
sasha_lif

Дизайнер-конструктор
 
Регистрация: 29.05.2004
Kiev
Сообщений: 1,187
<phrase 1=


perpetule, и как все это вместе запускать?
А понял- все три файла отдельными лиспами и подгружать
__________________
Kiev, Ukraine

Последний раз редактировалось sasha_lif, 06.06.2013 в 13:04.
sasha_lif вне форума  
 
Непрочитано 17.11.2013, 17:23
#419
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,481
Отправить сообщение для maratovich с помощью Skype™


А если полилиния внутри блока - как добавить новую вершину к полилинии ?
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Автор темы   Непрочитано 17.11.2013, 21:12
#420
VVA

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


maratovich, Проверить пока не могу, а из редактора блока команда не запускается?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.11.2013, 21:18
#421
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,481
Отправить сообщение для maratovich с помощью Skype™


Цитата:
Сообщение от VVA Посмотреть сообщение
maratovich, Проверить пока не могу, а из редактора блока команда не запускается?
В том и задача - не открывая блок.
Динамический блок, одна полилиния, 3 вершины, надо добавить 4-ю без редактора блока.
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Непрочитано 18.11.2013, 07:30
#422
wepp

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


maratovich, а контекстное редактирование блока тоже не работает?
P.S. Новые версии Автокада с нуля дружат с этой командой.
wepp вне форума  
 
Непрочитано 06.06.2014, 11:42
#423
progettista


 
Регистрация: 22.05.2009
Москва
Сообщений: 210


Перестала работать команда "Добавить вершину в полилинию", пишет в командной строке -

Command: PL-VxAdd

Укажите точку разрыва [отмени U/выход X] <выход> :
Укажите новую точку <прежняя>: ; error: Exception occurred: 0xC0000005 (Access
Violation)
; warning: unwind skipped on unknown exception

еще изменяет перекрестие курсора

AutoCAD 2008, Windows 7 x64
Миниатюры
Нажмите на изображение для увеличения
Название: pltools.png
Просмотров: 82
Размер:	134.9 Кб
ID:	129922  
progettista вне форума  
 
Автор темы   Непрочитано 06.06.2014, 14:14
#424
VVA

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


progettista, Файл приложи с полилинией на которой не работает.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 06.06.2014, 15:31
#425
progettista


 
Регистрация: 22.05.2009
Москва
Сообщений: 210


вот файл.

При закрытие AutoCAD еще выходит вот такое окно
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок.PNG
Просмотров: 100
Размер:	25.8 Кб
ID:	129947  
Вложения
Тип файла: dwg
DWG 2007
12345.dwg (51.8 Кб, 3859 просмотров)

Последний раз редактировалось progettista, 06.06.2014 в 15:36.
progettista вне форума  
 
Автор темы   Непрочитано 17.06.2014, 17:13
2 | #426
VVA

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


>ALL Выяснилась следующая картина. По роковой случайности в архиве оказалась одна из первых версий pltools с множеством багов. В свое время мы с KAI (царство ему небесное) основательно ее оттестировали. Я обновил архив по ссылке в #1. Правда пока что там висит картинка "Позиция недоступна". Думаю что это связано с предварительной модерацией. В download давненько ничего не заливал.
Новые команды
Цитата:
PL-VFI -вставка вершин в выбранной полилинии в местах пересечения с
указанными полилиниями, линиями, дугами
PL-CW -Реверс выбранных полилиний по часовой стрелке
PL-CCW -Реверс выбранных полилиний против часовой стрелки
PL-P90 -Рисование перпендикулярных друг к другу сегментов полилинии
Вершина в файл из #425 добавляется (тестировал на Acad 2009 x64, Windows 7 x64)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 18.06.2014 в 09:32. Причина: орфография
VVA вне форума  
 
Непрочитано 18.06.2014, 18:51
#427
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


VVA, бегло протестировал новинки, обнаружил, что в команде PL-P90 не восстанавливается полярное отслеживание. В догонку предложение: может, адаптировать эту команду под любой угол? По умолчанию 90, но с возможностью настройки.
И еще неясно, что значит в команде PL-CW реверс по часовой стрелке? Если полилиния не замкнута, результаты мне непонятны.

----- добавлено через ~3 ч. -----
Еще небольшая ошибка в команде PL-CW:
Команда: PL-CW
<Режим ПО ЧАСОВОЙ стрелке> Выберите полилиниинайдено: 3
Обработано 3 полилиний. Из них:
2 против часовой (реверсировано)
1 по часовой

Пришла еще мысль: собрать мнения форумчан, какие бы еще инструменты они хотели бы иметь для работы с полилинией? Другими словами продолжить коллективное наполнение этого замечательного набора программ.
Что сразу приходит на ум из того, в чем когда-то возникала потребность у меня (и не только):
1. Сопряжение всех сегментов всех выбранных полилиний с указанным радиусом. Знаю, что это из штатных возможностей AutoCAD'a, но очень уж неудобно каждый раз вводить (да даже выбирать из динамического выпадающего списка) опции и выбирать всего одну полилинию. Нацарапал для себя под это дело весьма примитивный лиспик. Мне он очень много времени сэкономил.
Код:
[Выделить все]
 (defun C:EX-FILLET ( / radius ss i en)
	(setq i 0
		  radius (getdist  (strcat "\nРадиус сопряжения: <" (vl-princ-to-string (getvar "FILLETRAD")) ">"))
		  ss (ssget "_I" '((0 . "*POLYLINE")))
	)
	(if (null ss) (setq ss (ssget '((0 . "*POLYLINE")))))
	(if (null radius) (setq radius (getvar "FILLETRAD")))
	(setvar "FILLETRAD" radius)
	(repeat (sslength ss)
		(setq en (ssname ss i))
		(command "_.fillet" "_p" en)
		(setq i (1+ i))
	)
)

2. Сопряжение с указанным радиусом двух сегментов по указанию вершины. Есть тут кое-какие наработки, но код сильно сырой - есть некоторые проблемы с реализацией. Если возникнет потребность - допилю.
3. Несколько других вариантов сопряжения из темы LISP. Расширение возможностей команды FILLET (если уважаемый GRIFEL не будет против), в том числе сопряжение по указанию требуемой длины дуги из #6 в той теме (я не против).
4. Объединение выбранной полилинии (или отрезка) со всеми полилиниями (или отрезками), составляющими непрерывную цепочку (см. Chain Selection от Lee Mac. Знаю, что в общем случае в одной точке может оказаться более двух крайних вершин разных линий, и результат будет непредсказуемым, но в частном случае (думаю, трубопроводчики меня поймут) это очень удобно. Добавлено: уже есть, проглядел.
5. Построение перпендикуляра к полилинии из указанной на ней точки. Варианты решения предложены, например, здесь.
6............
Прошу форумчан высказаться по поводу полезности вышеописанных программ и потребности во внедрении их в PL-TOOLS, а также предложить к обсуждению свои идеи новых команд по работе с полилиниями.
В свою очередь я готов оказать посильную помощь.

Последний раз редактировалось skkkk, 28.01.2015 в 15:15.
skkkk вне форума  
 
Непрочитано 19.06.2014, 09:03
#428
Елена_врн

инженер
 
Регистрация: 30.07.2012
Воронеж
Сообщений: 14


Если кому надо, у меня есть функции определения длины полилинии м/у началом и выбранной точкой, м/у двумя точками, м/у перпендикуляром к полилинии, проведенным в некоторую точку, и началом полилинии, аналогично м/у перпендикуляром и другой точкой на полилинии. Правда они на vba
Елена_врн вне форума  
 
Непрочитано 19.06.2014, 09:08
#429
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Елена_врн, если заняться несложным поиском, то аналогов на лиспе будет немеряно. Это если забыть про GeomProps от А.Ривилиса.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.06.2014, 11:04
#430
VVA

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


skkkk, Привет Сергей. Начнем по порядку:
- по поводу ошибок, описок - проверю

Цитата:
Сообщение от skkkk Посмотреть сообщение
В догонку предложение: может, адаптировать эту команду под любой угол? По умолчанию 90
Мне пока не понятен алгоритм. Команда PL-P90 - позволяет обводить полилинию с сегментами под углом 90 (читай - контуры зданий на планшетах), и автоматически достаивает замыкающий сегмент. Т.е чтобы обвести прямоугольник достаточно указать 3 вершины.
Цитата:
Сообщение от skkkk Посмотреть сообщение
собрать мнения форумчан, какие бы еще инструменты они хотели бы иметь для работы с полилинией?
В общем-то эта тема для этого и создана
Цитата:
Сообщение от skkkk Посмотреть сообщение
Сопряжение всех сегментов всех выбранных полилиний с указанным радиусом.
Спасибо за предложения - посмотрю твои варианты
Цитата:
Сообщение от skkkk Посмотреть сообщение
4. Объединение выбранной полилинии (или отрезка) со всеми полилиниями (или отрезками), составляющими непрерывную цепочку (см. Chain Selection от Lee Mac
Про Lee-Mac - посмотрю, может алгоритм лучше. Но в pltools давно уже есть
Цитата:
PL-CSE -Объединение 2d полилиний по примитиву
Еще хочу добавить, если у кого-то есть более красивые или информативные иконки, или кто-то интегрировал pltools в ленту -так же выкладывайте.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 19.06.2014, 19:50
#431
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Привет, Володь
Цитата:
Сообщение от VVA Посмотреть сообщение
Но в pltools давно уже есть
Слушай, прошу прощения - проглядел. Пользуюсь Pl-tools уже лет пять и не замечал как-то этой команды... каюсь.
Цитата:
Сообщение от VVA Посмотреть сообщение
Про Lee-Mac - посмотрю, может алгоритм лучше.
Вряд ли, думаю, не стоит. Работает чётко. Еще раз каюсь.
Цитата:
Сообщение от VVA Посмотреть сообщение
Цитата:
Сообщение от skkkk
...адаптировать эту команду под любой угол...
Мне пока не понятен алгоритм.
Этот вопрос, полагаю, можно снять с обсуждения, поскольку при отрисовке полилинии можно на запрос следующей точки вбить в комстроку "<30" и и следующий сегмент отрисуется под углом в 30 градусов. Забываю матчасть, старею.
Цитата:
Сообщение от VVA Посмотреть сообщение
В общем-то эта тема для этого и создана
Это-то понятно, просто пытаюсь оживить интерес.
Еще вспомнил об одном инструменте, который мне удобен - посегментное подобие. На нашем форуме в свое время не нашел, но нашел на англоязычном, например, здесь.

Код:
[Выделить все]
 ;; OFSEGS -Gilles Chanteau- 2008/03/26
 
;; Offsets the selected segments of lwpolyline
 
;; Joined segments are offseted in a single lwpolyline
 
;; Keeps arcs and widthes
 
;; Works whatever the current UCS and the pline OCS and elevation
 
(defun c:ofsegs (/ ofdist ent pline normal elevat params
 
points side closest par bulge p1
 
p2 arc_data
 
)
 
(vl-load-com)
 
(or *acdoc*
 
(setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 
)
 
(initget 6 "Through")
 
(if (setq
 
ofdist (getdist
 
(strcat "\nSpecify offset distance or [Through] <"
 
(if (< (getvar "OFFSETDIST") 0)
 
"Through"
 
(rtos (getvar "OFFSETDIST"))
 
)
 
">: "
 
)
 
)
 
)
 
(if (= ofdist "Through")
 
(setvar "OFFSETDIST" -1)
 
(setvar "OFFSETDIST" ofdist)
 
)
 
(setq ofdist (getvar "OFFSETDIST"))
 
)
 
(if (and (setq ent (entsel "\nSelect a segment to offset: "))
 
(setq pline (vlax-ename->vla-object (car ent)))
 
(= (vla-get-ObjectName pline) "AcDbPolyline")
 
(setq normal (vlax-get pline 'Normal))
 
(setq elevat (vla-get-Elevation pline))
 
)
 
(progn
 
(setq params (cons (fix (vlax-curve-getParamAtPoint
 
pline
 
(trans (osnap (cadr ent) "_nea") 1 0)
 
)
 
)
 
params
 
)
 
)
 
(HighlightSegment pline (car params))
 
(while
 
(setq ent (entsel "\nSelect next segment or <exit>: "))
 
(if (equal (vlax-ename->vla-object (car ent)) pline)
 
(progn
 
(setq par (fix (vlax-curve-getParamAtPoint
 
pline
 
(trans (osnap (cadr ent) "_nea") 1 0)
 
)
 
)
 
params (if (member par params)
 
(vl-remove par params)
 
(cons par params)
 
)
 
)
 
(redraw)
 
(foreach p params (HighlightSegment pline p))
 
)
 
)
 
)
 
(if (setq side (getpoint
 
(if (minusp (getvar "OFFSETDIST"))
 
"\nSpecify through point: "
 
"\nSpecify point on side to offset: "
 
)
 
)
 
)
 
(progn
 
(redraw)
 
(vla-StartUndoMark *acdoc*)
 
(setq side (ilp
 
(trans side 1 0)
 
((lambda (p)
 
(trans (list (car p) (cadr p) (1+ (caddr p))) 2 0)
 
)
 
(trans side 1 2)
 
)
 
(trans (list 0 0 elevat) normal 0)
 
normal
 
)
 
closest (vlax-curve-getClosestPointTo pline side T)
 
par (vlax-curve-getParamAtPoint pline closest)
 
)
 
(if (minusp (getvar "OFFSETDIST"))
 
(setq ofdist (distance side closest))
 
)
 
(cond
 
((equal closest (vlax-curve-getStartPoint pline) 1e-9)
 
(setq side (trans side 0 normal))
 
)
 
((equal closest (vlax-curve-getEndPoint pline) 1e-9)
 
(setq par (- par 1)
 
side (trans side 0 normal)
 
)
 
)
 
((= (fix par) par)
 
(setq side
 
(polar
 
(trans closest 0 normal)
 
((if
 
(clockwise-p
 
(trans
 
(vlax-curve-getPointAtParam pline (- par 0.1))
 
0
 
normal
 
)
 
(trans closest 0 normal)
 
(trans
 
(vlax-curve-getPointAtParam pline (+ par 0.1))
 
0
 
normal
 
)
 
)
 
+
 
-
 
)
 
(angle '(0 0 0)
 
(trans (vlax-curve-getFirstDeriv pline par)
 
0
 
normal
 
T
 
)
 
)
 
(/ pi 2)
 
)
 
ofdist
 
)
 
)
 
)
 
(T
 
(setq par (fix par)
 
side (trans side 0 normal)
 
)
 
)
 
)
 
(setq bulge (vla-getBulge pline (fix par))
 
p1 (trans (vlax-curve-getPointAtParam pline (fix par))
 
0
 
normal
 
)
 
p2 (trans (vlax-curve-getPointAtParam pline (1+ (fix par)))
 
0
 
normal
 
)
 
)
 
(if (zerop bulge)
 
(if (clockwise-p side p2 p1)
 
(setq ofdist (- ofdist))
 
)
 
(progn
 
(setq arc_data (PolyArc-data bulge p1 p2))
 
(if (minusp bulge)
 
(if (< (cadr arc_data)
 
(distance (car arc_data) side)
 
)
 
(setq ofdist (- ofdist))
 
)
 
(if (< (distance (car arc_data) side)
 
(cadr arc_data)
 
)
 
(setq ofdist (- ofdist))
 
)
 
)
 
)
 
)
 
(mapcar
 
(function
 
(lambda (p)
 
(vl-catch-all-apply 'vla-Offset (list p ofdist))
 
(vla-delete p)
 
)
 
)
 
(Copysegments pline params)
 
)
 
(vla-EndUndoMark *acdoc*)
 
)
 
)
 
)
 
(princ "\nUnvalid entity.")
 
)
 
(princ)
 
)
 
;; CopySegments
 
;; Duplicates polyline segments at the same location
 
;; Consecutive selected segments are joined
 
;;
 
;; Arguments
 
;; pline : the source polyline (vla-object)
 
;; params ; the index list of segment to be copied
 
;;
 
;; Return
 
;; the list of created polylines
 
(defun CopySegments (pline params / nor space tmp copy ret)
 
(vl-load-com)
 
(or *acdoc*
 
(setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 
)
 
(setq params (vl-sort params '<)
 
nor (vlax-get pline 'Normal)
 
space (vla-ObjectIDToObject *acdoc* (vla-get-OwnerID pline))
 
)
 
(while params
 
(setq tmp (cons (car params) tmp)
 
params (cdr params)
 
)
 
(if (and (zerop (car tmp))
 
(= (- (vlax-curve-getEndParam pline) 1) (last params))
 
(equal (vlax-curve-getStartPoint pline)
 
(vlax-curve-getEndPoint pline)
 
1e-9
 
)
 
)
 
(progn
 
(setq params (reverse params)
 
tmp (cons (car params) tmp)
 
params (cdr params)
 
)
 
(while (= (car params) (1- (car tmp)))
 
(setq tmp (cons (car params) tmp)
 
params (cdr params)
 
)
 
)
 
(setq tmp (reverse tmp)
 
params (reverse params)
 
)
 
)
 
)
 
(while (= (car params) (1+ (car tmp)))
 
(setq tmp (cons (car params) tmp)
 
params (cdr params)
 
)
 
)
 
(setq tmp (reverse (cons (1+ (car tmp)) tmp)))
 
(setq
 
pts
 
(vl-remove nil
 
(mapcar
 
(function
 
(lambda (pa / pt)
 
(if (setq pt (vlax-curve-getPointAtParam pline pa))
 
((lambda (p)
 
(list (car p) (cadr p))
 
)
 
(trans pt 0 nor)
 
)
 
)
 
)
 
)
 
tmp
 
)
 
)
 
)
 
(setq copy
 
(vlax-invoke
 
space
 
'addLightWeightPolyline
 
(apply 'append pts)
 
)
 
)
 
(foreach p (cdr (reverse tmp))
 
(vla-setBulge
 
copy
 
(vl-position p tmp)
 
(vla-getBulge pline p)
 
)
 
(vla-getWidth pline p 'swid 'ewid)
 
(vla-setWidth copy (vl-position p tmp) swid ewid)
 
)
 
(foreach prop '(Elevation Layer Linetype
 
LinetypeGeneration LinetypeScale
 
Lineweight Normal Thickness
 
TrueColor
 
)
 
(if (vlax-property-available-p pline prop)
 
(vlax-put copy prop (vlax-get pline prop))
 
)
 
)
 
(setq tmp nil
 
ret (cons copy ret)
 
)
 
)
 
)
 
;;======================================================;;
 
;; HighlightSegment
 
;; Highlight a polyline segment
 
;;
 
;; Arguments
 
;; pl : the polyline (vla-object)
 
;; par : the segment index
 
(defun HighlightSegment (pl par / p1 p2 n lst)
 
(and
 
(setq p1 (vlax-curve-getPointAtParam pl par))
 
(setq p1 (trans p1 0 1))
 
(setq p2 (vlax-curve-getPointAtParam pl (+ par 1)))
 
(setq p2 (trans p2 0 1))
 
(if (zerop (vla-getBulge pl par))
 
(grvecs (list -255 p1 p2))
 
(progn
 
(setq n 0)
 
(repeat 100
 
(setq lst (cons (trans (vlax-curve-getPointAtParam pl (+ n par)) 0 1)
 
lst
 
)
 
n (+ n 0.01)
 
)
 
)
 
(grvecs
 
(cons -255 (apply 'append (mapcar 'list lst (cdr lst))))
 
)
 
)
 
)
 
)
 
)
 
;;=====================================================;;
 
;;; Clockwise-p
 
;;; Returns T if p1 p2 and p3 are clockwise
 
(defun clockwise-p (p1 p2 p3)
 
(< (sin (- (angle p1 p3) (angle p1 p2))) -1e-14)
 
)
 
;;========================================================;;
 
;;; Polyarc-data
 
;;; Returns a list of the center, radius and angle of a 'polyarc'.
 
(defun polyarc-data (bu p1 p2 / ang rad cen area cg)
 
(setq ang (* 2 (atan bu))
 
rad (/ (distance p1 p2)
 
(* 2 (sin ang))
 
)
 
cen (polar p1
 
(+ (angle p1 p2) (- (/ pi 2) ang))
 
rad
 
)
 
)
 
(list cen (abs rad) ang)
 
)
 
;;====================================================;;
 
;;; VXV Returns the dot product of two vectors
 
(defun vxv (v1 v2)
 
(apply '+ (mapcar '* v1 v2))
 
)
 
;;===================================================;;
 
;;; ILP
 
;;; Returns the intersection point between a line (extended) and a plane
 
;;;
 
;;; Arguments
 
;;; p1 and p2 : two points defining the line
 
;;; org : a point on the plane
 
;;; nor : the plane normal
 
(defun ilp (p1 p2 org nor / scl)
 
(setq scl (/ (vxv nor (mapcar '- p1 org))
 
(vxv nor (mapcar '- p2 p1))
 
)
 
)
 
(mapcar (function (lambda (x1 x2) (+ (* scl (- x1 x2)) x1)))
 
p1
 
p2
 
)
 
)
skkkk вне форума  
 
Автор темы   Непрочитано 20.06.2014, 20:46
#432
VVA

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


Я в предыдущем посте забыл ответить
Цитата:
Сообщение от skkkk Посмотреть сообщение
И еще неясно, что значит в команде PL-CW реверс по часовой стрелке? Если полилиния не замкнута, результаты мне непонятны.
Изменяется направление обхода вершин. Команда "выросла" отсюда LISP, VBA. Изменение направления обхода точек в полилинии
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 16.07.2014, 14:15
#433
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Спасибо за полезный набор команд!

Один вопрос... Можно ли разбивать при помощи PLTools полилинию через заданное расстояние, при этом рассматривая всю полилинию без учета сегментов?
Объясню. Есть полилиния, и при выполнении команды PL-DIVAll разбиение выполняется посегментно.

В приложенном изображении привожу наглядно - при помощи MEASURE я расставил блоки - красные крестики по всей полилинии через 500мм, а PL-DIVAll через 500мм разбил посегментно - каждый, начиная с начала.
В итоге, понятное дело, точки не совпадают. Можно ли добиться совпадения?
Изображения
Тип файла: jpg pl.jpg (29.2 Кб, 347 просмотров)
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Автор темы   Непрочитано 16.07.2014, 19:52
#434
VVA

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


Нет такой команды нет. Как вариант - создаешь блок с одним вертикальным отрезком с точкой вставки посередине отрезка. Командой MEASURE расставляешь блоки, расчленяешь их, и командой PL-VFI вставляешь в пересечения вершины
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 16.07.2014, 20:13
#435
Linkor

что хочу, то и делаю
 
Регистрация: 30.06.2014
Сообщений: 119


Раз такой команды нет, выкладываю свою версию программы по вставке блоков на полилинии.выкладывалось на сайте залил, дабы не портить тему собственным творчеством http://zalil.su/426261

-vbarun d:/vba/DividePolyLine.dvb!GoDivide - строка вызова (путь соответственно свой укажите, куда файл сохраните), я кнопку делаю, и в строке для макроса эту строчку пишу
Писалось для акада 2009, если в более продвинутых версиях вылетает ошибка , сообщения типа не найдена библиотек, Тогда в редакторе VBA заходим в Tools - References и убираем голочки с библиотек MISSING

Замечания:
- масштаб схемы: если чертеж в миллиметрах и набирать схему надо типа 20*3000+50*4000, то в схеме указываем 20*3+50*4, в масштабе схемы пишем 1000. Значаение 0 ставить нельзя
- при двойно щелчке по полю имя блока, откроется список блоков чертежа
- галочка "отно-но линии" разворачивает блоки перпендикулярно касательной к полилинии в данной точке
- галочка "проекция Х" не работает для полилиний с дугами
- отступ от начала (не помню связан ли с масштабом схемы)


**
Linkor вне форума  
 
Непрочитано 17.07.2014, 11:18
#436
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Цитата:
Сообщение от VVA Посмотреть сообщение
Нет такой команды нет. Как вариант - создаешь блок с одним вертикальным отрезком с точкой вставки посередине отрезка. Командой MEASURE расставляешь блоки, расчленяешь их, и командой PL-VFI вставляешь в пересечения вершины
Спасибо, я уже об этом думал, но команды PL-VFI в коде нет.

Цитата:
Сообщение от Linkor Посмотреть сообщение
Раз такой команды нет, выкладываю свою версию программы по вставке блоков на полилинии
Спасибо, однако у меня она слетает при выполнении и она достаточно громоздкая. Хотелось бы упростить ее максимально, дабы ограничиться введением одного-двух параметров и все. А тут все поля заполнить надо... И так каждый раз...
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Автор темы   Непрочитано 17.07.2014, 11:56
#437
VVA

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


Цитата:
Сообщение от Xara Посмотреть сообщение
Спасибо, я уже об этом думал, но команды PL-VFI в коде нет.
Скачай заново. У тебя какая редакция?
Цитата:
Сообщение от VVA Посмотреть сообщение
=========== Доступные команды PLTOOLS=================
Редакция 17.06.2014
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.07.2014, 12:53
#438
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Цитата:
Сообщение от VVA Посмотреть сообщение
Скачай заново. У тебя какая редакция?
Скачал, каюсь, запускал старую редакцию.

Однако, прошу прощения за мое занудство, у меня не получается выполнить задуманное.

Код:
[Выделить все]
Command:  PL-VFI

Укажите допуск <0.001 >:
Укажите режущие кромки (POLYLINE LINE ARC CIRCLE)
Select objects: Specify opposite corner: 12 found, 12 total
*Выбраны секущие линии, тип - LINE, 12 штук*
Код:
[Выделить все]
Select objects:
Режим продолжения кромки [С продолжением/Без продолжения] <Без продолжения>:
Выберите полилинии для вставки вершин
Select objects: 1 found
*Выбрана полилиния, которую надо разбить*
Код:
[Выделить все]
Select objects:
 Добавлено 0 вершин в 1 полилиний
?
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Автор темы   Непрочитано 17.07.2014, 14:09
#439
VVA

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


Чертеж приложи.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.07.2014, 14:18
#440
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Цитата:
Сообщение от VVA Посмотреть сообщение
Чертеж приложи.
А чертеж-то причем?
Приложил.
Вложения
Тип файла: dwg
DWG 2010
Drawing.dwg (63.2 Кб, 3030 просмотров)
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Автор темы   Непрочитано 17.07.2014, 15:44
#441
VVA

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


Скачал еще раз с сайта. Грузил и lisp и fas. Автокад 2013 русский

Цитата:
Команда:
Команда: (LOAD "D:/!!!/Новые команды для работы с полилинией dnl607/Pltools/LISP/pltools.lsp")
---- Pltools loading ... ok
=========== Доступные команды PLTOOLS=================
Редакция 23.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 -Построение средней линии
R3P -Прямоугольгик по 3-м точкам
PL-P90 -Рисование перпендикулярных друг к другу сегментов полилинии
PL-CSE -Объединение 2d полилиний по примитиву
PL-SgWidth -Изменить ширину сегмента полилинии

Команда: PL-VFI

Укажите допуск <0.001 >:
Укажите режущие кромки (POLYLINE LINE ARC CIRCLE)
Выберите объекты: Противоположный угол: найдено: 13

Выберите объекты:
Режим продолжения кромки [С продолжением/Без продолжения] <Без продолжения>:
Выберите полилинии для вставки вершин
Выберите объекты: найдено: 1

Выберите объекты:
Добавлено 12 вершин в 1 полилиний

Команда:
Команда:
Команда: (LOAD "D:/!!!/Новые команды для работы с полилинией dnl607/Pltools/pltools.fas")
---- MIP Pltools loading ... ok

Команда: PL-VFI

Укажите допуск <0.001 >:
Укажите режущие кромки (POLYLINE LINE ARC CIRCLE)
Выберите объекты: Противоположный угол: найдено: 13

Выберите объекты:
Режим продолжения кромки [С продолжением/Без продолжения] <Без продолжения>:
Выберите полилинии для вставки вершин
Выберите объекты: найдено: 1

Выберите объекты:
Добавлено 12 вершин в 1 полилиний
Вложения
Тип файла: dwg
DWG 2007
Drawing.dwg (93.3 Кб, 3475 просмотров)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 18.07.2014, 09:56
#442
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Эм... На 2012-ом заработал... На 2014 и 2015 - отказывался почему-то.
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Автор темы   Непрочитано 18.07.2014, 10:46
1 | #443
VVA

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


В 2015 не заработал, буду разбираться

----- добавлено через ~3 ч. -----
Дело оказалось в этом
Цитата:
IAcadDocument
ObjectIDToObject32 - Method (Removed; use ObjectIDToObject)
Внес изменения. Выложил по старому адресу. После проверки модератором будет доступно для скачивания
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 21.08.2014, 14:10
#444
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Созрело предложение для новой функции в коллекцию.
Ситуация: есть много (очень) полилиний генерируемых программой, а именно организация рельефа в горизонталях.
У многих полилиний надо убирать один сегмент, не затрагивая смежные. (по факту делаю "разорвать" и указываю первую и вторую точки)
на приложеном рисунке - красным обозначены сегменты, которые надо вырезать. в облаке участок уже разорванных объектов.
Может есть уже у кого то подобное, или вдруг появится желание из спортивного интереса накодить? сам такое не осилю
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 108
Размер:	11.3 Кб
ID:	134049  
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 21.08.2014, 14:21
#445
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Vladimir_Sergeevich, не понял, надо, чтоб при клике на сегмент он исчезал?
skkkk вне форума  
 
Непрочитано 21.08.2014, 14:40
#446
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


все верно. сейчас это у меня занимает 3 клика, причем 2 из них прицельные.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 21.08.2014, 14:40
#447
Кочетков Андрей

Java/Kotlin backend
 
Регистрация: 03.02.2006
Сообщений: 5,735


А _TRIM вам не поможет?
Кочетков Андрей вне форума  
 
Непрочитано 21.08.2014, 14:46
#448
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


_trim будет еще более трудоемко, т.к. работаю уже на плане, где очень много всего интересного. или по отдельности выбирать каждую полилинию и получаем примерно то же что и "разорвать" - те же 3 клика, но есть вероятность подцепить не нужную линию и обрежется совсем не то что надо.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 21.08.2014, 16:31
#449
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Раз чертите дороги и т.п., то Вам в руки Map/Civil - в нем есть Корректировка/Очистка чертежей (Drawing cleanup). С помощью Drawing cleanup разбиваете длинные прямые линии относительно коротких ломаных на их пересечениях, не разбивая короткие. Удаляете что нужно, и сшиваете оставшееся от прямых длинных тем же Drawing cleanup.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 21.08.2014, 17:11
#450
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Vladimir_Sergeevich, на болоте есть несколько рабочих вариантов.
Но все они удаляют только один сегмент, после чего команду надо вызывать заново. На мой взгляд, это не совсем удобно. Я переработал один из вариантов от Lee Mac, который обрабатывает любые полилинии: добавил цикл с завершением по Enter, обработку промаха, отмену случайно удаленного сегмента по Ctrl+Z ну и подсказки с отчетами в комстроке. Прошу теста, критики и предложений.
Код:
[Выделить все]
 ;;; Программа удаляет указанные сегменты полилинии (цикл) 
;;; Завершение цикла указания сегментов по клавише Enter/Пробел/ПКМ
;;; Случайно удаленные сегменты восстанавливаются без прерывания программы
;;; выбором опции "Отменить", нажатием Ctrl+Z или вводом ключевого слова 
;;; или букв О, Г, U, J (вариации при разных раскладках)
;;; Обсуждение http://forum.dwg.ru/showthread.php?t=8284&page=23 начиная с #450
(vl-load-com)
(defun C:DELSEGS 
	( / *error* ; локальный обработчик ошибок
		adoc ; активный документ
		en ; обрабатываемый примитив, ключевое слово или T (для цикла)
		counter ; счетчик удаленных сегментов
		oldCMDECHO ; начальное значение переменной CMDECHO
		view_before_undo ; вид чертежа до начала вызова отмены
		view_after_undo ; вид чертежа после отмены
		p ; начальный параметр указанного сегмента
	)
	
	(defun *error* (msg)   
		(if oldCMDECHO (setvar "CMDECHO" oldCMDECHO))
		(vla-EndUndoMark adoc)
		(princ msg)
		(princ)
	) ;end of defun *error*
	(setq adoc (vla-get-ActiveDocument (vlax-get-acad-object)) 
		  en T 
		  counter 0 
		  oldCMDECHO (getvar "CMDECHO")
	) ;end of setq
	(vla-StartUndoMark adoc)
	(setvar "CMDECHO" 0)
	(while en
		(initget "Отменить Г J U _Undo Undo Undo Undo")
		(setq en (entsel "\nУкажите сегменты для удаления <Завершить> или [Отменить] : "))
		(cond 
		;cond #1: если выбрана опция "Отменить", нажато Ctrl+Z или введено ключевое слово
		  (	(= en "Undo")
			(if (> counter 0) 
				(progn ; проверяем, меняется ли при отмене вид чертежа (пан/зум)
					(setq view_before_undo (getvar "VIEWCTR"))
					(vl-cmdf "_u")
					(setq view_after_undo (getvar "VIEWCTR"))
					(while view_after_undo ; и отменяем до тех пор, пока меняется 
						(if (not (equal view_after_undo view_before_undo 1E-6))
							(progn
								(setq view_before_undo (getvar "VIEWCTR"))
								(vl-cmdf "_u")
								(setq view_after_undo (getvar "VIEWCTR"))
							) ;end of progn
							(progn ; если вид не поменялся, значит, сегмент восстановлен
								(princ "Сегмент восстановлен")
								(setq counter (1- counter) en T)
								(setq view_after_undo nil)
							) ;end of progn
						) ;end of if
					) ;end of while
				) ;end of progn
				(princ "Нечего отменять")
			) ;end of if
		  ) ;end of cond #1
		  
		;cond #2: если пользователь помахнулся мимо объекта
		  (	(and (null en) (= (getvar "ERRNO") 7))
			(setq en T) ;повторяем цикл
		  ) ;end of cond #2
		  
		;cond #3: если пользователь нажал Enter или ПКМ (пустой ввод)
		  (	(null en)
			(princ (strcat "\nФункция завершена. " 
							(if (> counter 0) (strcat "Удалено сегментов: " (vl-princ-to-string counter)) "")
					)
			)
		  ) ;end of cond #3
		  
		;cond #4: если указанный объект - не полилиния 
		  (	(not (wcmatch (cdr (assoc 0 (entget (car en)))) "*POLYLINE"))
			(princ "\nЭто не полилиния.")
			(setq en T) ;повторяем цикл
		  ) ;end of cond #4
		  
		;cond #5: если все предыдущие условия не выполнены, т.е., если объект указан, и он - полилиния  
		  ( t 
			(setq p ; вычисляем начальный параметр указанного сегмента
				(fix
					(vlax-curve-getParamAtPoint (car en)
						(vlax-curve-getClosestPointToProjection
							(car en)
							(trans (cadr en) 1 0)
							'(0.0 0.0 1.0)
						)
					)
				)
			) ;end of setq
			(command "_.break" en "_F"
				"_non" (trans (vlax-curve-getPointAtParam (car en)     p ) 0 1) ;начальная точка сегмента
				"_non" (trans (vlax-curve-getPointAtParam (car en) (1+ p)) 0 1) ;конечная точка сегмента
			) ;end of command
			(setq counter (1+ counter))
		  ) ;end of cond #5
		) ;end of cond
	) ;end of while
	(*error* "")
) ;end of defun
Вложения
Тип файла: lsp DELSEGS.lsp (3.6 Кб, 33 просмотров)

Последний раз редактировалось skkkk, 28.08.2014 в 02:27. Причина: Описание изменений см. ниже по тексту
skkkk вне форума  
 
Непрочитано 22.08.2014, 08:49
#451
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Раз чертите дороги и т.п., то Вам в руки Map/Civil
Кто ж мне его купит, если голый автокад - уже дорого и начали закупать LT

2 skkkk, то что доктор прописал - дело пошло раз в 5 быстрей
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 22.08.2014, 16:02
#452
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Цитата:
Сообщение от skkkk Посмотреть сообщение
добавил цикл с завершением по Enter, обработку промаха, отмену случайно удаленного сегмента по Ctrl+Z ну и подсказки с отчетами в комстроке.
По-моему, лисп отличный!
Вполне неплохо бы его добавить в PLTOOLS. Лисп родственный действиям из PLTOOLS, в котором и работа с удалением элементов полининий (например, удаление вершин), и действия с сегментами.
Цитата:
Сообщение от Vladimir_Sergeevich Посмотреть сообщение
Кто ж мне его купит, если голый автокад - уже дорого и начали закупать LT
Дорого, согласен. Хотя, и сравнимо с голым Автокадом. Вроде бы в Civil/Map много активно используемого дорожниками.
Но разве на LT лиспы идут?
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 23.08.2014, 14:23
#453
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Чуть подправил код в #450. Добавил метки отмены. Теперь Ctrl+Z в момент выполнения команды отменяет по одному удаленному сегменту, а по завершении команды Ctrl+Z вернет ВСЕ сегменты, удаленные в процессе последнего вызова. Так, мне кажется, правильней.
skkkk вне форума  
 
Непрочитано 23.08.2014, 15:03
#454
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от skkkk Посмотреть сообщение
Теперь Ctrl+Z в момент выполнения команды отменяет по одному удаленному сегменту
судя по строчкам 13 и 14 механизм работы initget тебе не понятен.
gomer вне форума  
 
Непрочитано 23.08.2014, 15:57
#455
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


gomer, да вроде понятен.... А что не так? В 13-ой строке я разрешил функции (entsel), которая в 14-ой, принимать в качестве аргумента строку "u". Такое строковое значение посылается в командную строку при нажатии Ctrl+Z. Биты не задействовал, т.к. entsel'у они до лампочки.
Расскажи, пожалуйста, как правильно?
skkkk вне форума  
 
Непрочитано 23.08.2014, 18:25
1 | #456
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от skkkk Посмотреть сообщение
что не так?
Вот ты видишь суслика? И я не вижу, а он есть... если у команды есть опции, юзер должен их видеть. вроде мелочь, а приятно... Ну вот сидишь ты, режешь, захотел отменить. Будешь отрывать руку от мыши? использовать другую руку? Сейчас можно просто кликнуть в ком строке опцию и продолжать. Я 100500 раз уже писал: смотрите как работают штатные команды и делайте так же. Ну, и последнее, ты ж не постоянно в английской раскладке работаешь, или кто еще, а программа должна в любом случае работать у самых извращенных пользователей...
gomer вне форума  
 
Непрочитано 23.08.2014, 20:36
#457
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


А, вот ты о чем...
Цитата:
Сообщение от gomer Посмотреть сообщение
смотрите как работают штатные команды и делайте так же
Так ведь внося изменения, кои я описал в #453, я руководствовался как раз этой мыслью. Хотел повторить принцип, например, отрисовки полилинии. В момент отрисовки жмешь Ctrl+Z - отменяется последний сегмент, жмешь после завершения команды - убирается вся полилиния. Но недоповторил.
Цитата:
Сообщение от gomer Посмотреть сообщение
Ну вот сидишь ты, режешь, захотел отменить. Будешь отрывать руку от мыши? использовать другую руку?
Не-а! У меня сочетание Ctrl+Z запилено прям на мыше многокнопочной.. В общем случае, в 2011-м нужно нажать будет стрелку вниз или опцию ввести, т.е., оторвать-таки руку...
Цитата:
Сообщение от gomer Посмотреть сообщение
Сейчас можно просто кликнуть в ком строке опцию и продолжать.
Это, видимо, нововведения, которые появились после 2011-го, я их еще не имел счастья опробовать. Звучит заманчиво. Подотстал что-то я.
В общем, внемля конструктивной критике, вношу изменения в #450, спасибо тебе, gomer. Теперь прошу замечаний по изменениям.

----- добавлено через ~4 мин. -----
Но вот, пока тестировал новый вариант, наткнулся на такой неприятный момент, как-то сразу мною упущенный. Если при удалении сегментов происходило зумирование или панорамирование, то они включаются в действие отмены, и отмена происходит не до конца. Как сделать, чтоб она шла до конца, понятно. Но непонятно, как исключить зум и пан из отмены или включить их в один шаг с восстановлением сегмента? Есть какой-то здравый простой способ, или придется отслеживать историю изменений вида и перед отменой возвращать сначала предыдущий вид? В случае, например, с отрисовкой полилинии вид при отмене сегмента не меняется.
skkkk вне форума  
 
Непрочитано 25.08.2014, 09:50
#458
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Цитата:
Сообщение от skkkk Посмотреть сообщение
завершении команды Ctrl+Z вернет ВСЕ сегменты
не заметил...

Цитата:
Сообщение от skkkk Посмотреть сообщение
происходило зумирование или панорамирование, то они включаются в действие отмены, и отмена происходит не до конца.
у тебя на ctrl+z срабатывает счетчик и для параномирования. может проще вообще без счетчика сделать?
или надо придумывать замену штатному _undo (как то уже столкнулся в одной рисовалке банальной - заменл на (entdel (entlast)).)
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 26.08.2014, 15:54
#459
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Вроде получилось разобраться. Обновил в #450. Тестируем.
skkkk вне форума  
 
Непрочитано 26.08.2014, 19:17
1 | #460
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


ну раз ты такой настырный, то что у тебя делают строчки 74-76? Не то же, что и 04-09?
Если говорить об уважении к пользователю и русскому языку и логике, то как минимум так
Код:
[Выделить все]
 (entsel "\nУкажите сегмент сегмент полилинии для удаления или [Отменить] <Завершить>: ")
Логичный вопрос: а что мы хотим отменить и что завершить?
С инитгет ты так и не разобрался, это печаль
Да и что стоит тебе отформатировать код, чтоб это ВЫГЛЯДЕЛО, добавить комментарии, чтоб все было ПОНЯТНО. Добавить файл с исходниками, чтоб люди могли сразу скачать и пользоваться. Тыжпрограммист, небось не чайники починяешь.
Ну и еще одну помидорку кину: с какого бодуна у тебя флаг оказался счетчиком?
gomer вне форума  
 
Непрочитано 27.08.2014, 10:17
1 | #461
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Какой вредный дядька gomer Кидается и кидается помидорами Объяснил бы по-человечески.
Если меня память не подводит, то надо вместо:
(initget "u Undo о Отменить")
Написать:
(initget "Отменить _Undo")
Отдельно буквы не надо прописывать, т.к. они в словах выделены большими.
И сперва по порядку идут названия опций на языке локализации, а потом подчеркивание, и те же самые опции на английском.
Например:
(initget "Да Нет _Yes No")
Ну и при наборе "Да", "Д","д" "_Yes", "_Y","_y" функция запроса будет возвращать "Yes". Аналогично и для "No".
Может быть, тут еще и флаг какой-то целесообразно применить...
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 28.08.2014, 02:25
#462
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от Do$ Посмотреть сообщение
Объяснил бы по-человечески.
Ну это у него такие методы педагогические, хочет заставить думать развивающийся мозг
Do$, спасибо огромное тебе, что не остался равнодушным, не, правда, спасибо, от души, приятно. Но ведь gomer прав: что бы мне стоило заглянуть в Полещука и разобраться? Я читал это все довольно давно, но пользовался в своих кодах только русскими ключевыми словами в связке initget-getkword (чаще всего), поэтому и позабыл о том, как надо. Вчера (точнее, уже позавчера), я разобрался, но ответить и исправить не успел. Ну не придал большого значения инитгету, а разбирался с отменами...Спасибо еще раз
Цитата:
Сообщение от Do$ Посмотреть сообщение
Может быть, тут еще и флаг какой-то целесообразно применить...
У Полещука сказано, что entsel равнодушен к битам, только ключевые слова воспринимает. Да и по логике программы он ни к чему.
А теперь к помидоркам

Цитата:
Сообщение от gomer Посмотреть сообщение
что у тебя делают строчки 74-76? Не то же, что и 04-09?
74-76 - для штатного режима, 04-09 - в случае ошибки. Но ты ведь это знаешь, и намекаешь на то, раз я функцию описал один раз, то почему же ее еще разочек не вызвать, чем еще разище описывать? То есть сознательно инициировать ошибку? Принято, согласен, так удобней. Какой ей аргумент-то давать? Пустую строку?
Цитата:
Сообщение от gomer Посмотреть сообщение
(entsel "\nУкажите сегмент сегмент...
- это логика цикличного вызова, отраженная в приглашении? Исправил.
Цитата:
Сообщение от gomer Посмотреть сообщение
Логичный вопрос: а что мы хотим отменить и что завершить?
Ну...Это... Как там? Отменить удаление сегмента, а завершить выполнение команды... Думаешь, это тоже в приглашении указать? Длинновато будет однако...
Цитата:
Сообщение от gomer Посмотреть сообщение
С инитгет ты так и не разобрался, это печаль
Ну с этим проехали, надеюсь. Кстати я сделал, чтоб при любой раскладке буквы U (англ) и О (рус) вызывали отмену. Не переборщил?
Цитата:
Сообщение от gomer Посмотреть сообщение
Да и что стоит тебе отформатировать код, чтоб это ВЫГЛЯДЕЛО
Вот тут, пожалуйста поподробнее. Не понимаю. Ты ведь не имеешь в виду выравнивание? Или я как-то неправильно выровнял? Или что не так?
Цитата:
Сообщение от gomer Посмотреть сообщение
добавить комментарии, чтоб все было ПОНЯТНО
Ну это пожалуйста. (Можно подумать тебе и так не понятно)
Цитата:
Сообщение от gomer Посмотреть сообщение
Добавить файл с исходниками
+
Цитата:
Сообщение от gomer Посмотреть сообщение
с какого бодуна у тебя флаг оказался счетчиком?
Исправил, согласен.
Все исправления, по традиции, в #450.
gomer, зачетку доставать?

----- добавлено через ~24 мин. -----
Цитата:
Сообщение от gomer Посмотреть сообщение
Тыжпрограммист
Не-не-не! Яжинженер В основном
Пришла такая мысль. А если полилиния, из которой мы захотим удалить сегмент, окажется взорванной? Или нам нужно, удаляя сегменты, удалить дугу или отрезок?Vladimir_Sergeevich, как считаешь? Может, добавить? Понимаю, что тема про полилинии, но все же?
skkkk вне форума  
 
Непрочитано 03.09.2014, 13:25
#463
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Как то небыло необходимости в отдельной функции для удаления отрезков/дуг - кнопку del еще никто не отобрал.
А если дуга в составе полилинии, то и так её выкуривает. На мой взгляд все уже как надо.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 03.09.2014, 20:33
#464
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Цитата:
Сообщение от WATRES Посмотреть сообщение
возможно ли использовать команду PL-DIVAll для нескольких полилиний сразу.
Я присоединяюсь к вопросу-пожеланию: Можно сделать так, чтобы PL-DIVAll обрабатывала сразу все указанные полилинии?
Иначе легко что-то нужное пропустить.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Автор темы   Непрочитано 03.09.2014, 23:30
1 | #465
VVA

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


АлексЮстасу, WATRES, Нужно посмотреть. Давно писал. Многое забылось.

----- добавлено через ~20 ч. -----
Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Я присоединяюсь к вопросу-пожеланию: Можно сделать так, чтобы PL-DIVAll обрабатывала сразу все указанные полилинии?
Обновил архив. Будет доступен после проверки модератором
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 05.09.2014, 12:54
#466
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Цитата:
Сообщение от VVA Посмотреть сообщение
Обновил архив.
Спасибо! PL-DIVAll работает теперь со многими полилиниями.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 14.11.2014, 16:33
#467
bol


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


Помогите, возникают задачи при которых нужно что бы узлы полилинии (нескольких полилиний) были как то обозначены в процессе черчения (примерно как при выделении полилинии - в виде ручек). Есть ли такая функция в стандартном наборе инструментов Autocad, если нет то возможно ли это реализовать?
bol вне форума  
 
Автор темы   Непрочитано 14.11.2014, 16:40
#468
VVA

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


Могу только посоветовать расставить в узлы блоки
Расстановка блоков вдоль линии, полилинии, сплайна
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 14.11.2014, 17:16
#469
bol


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


Насчет блоков, не очень удобно получается, если нужно отобразить узлы множества полилиний сразу. На самом деле чертить по уже имеющейся полилинии (нескольким) с помощью привязки к узлам не всегда удобно, при расположении узлов на различном расстоянии часто ошибаешся (пропускаешь узел).
bol вне форума  
 
Автор темы   Непрочитано 14.11.2014, 17:29
#470
VVA

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


Тогда сюда Баги и пожелания в Autodesk На лиспе я не представляю как это реализовать
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 15.11.2014, 02:10
#471
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от bol Посмотреть сообщение
нужно что бы узлы полилинии (нескольких полилиний) были как то обозначены в процессе черчения (примерно как при выделении полилинии - в виде ручек)
bol, правильно ли я понимаю, что цель - чертить полилинию, указывая поочередно точки по вершинам уже существующей полилинии? А желание - чтобы у существующей полилинии при этом были подсвечены ручки? Не совсем понимаю, для чего такое может понадобиться, и даже обычно про себя ругаю такие чертежи, в которых линии дублируют друг друга: работать с такими весьма неудобно - как программно, так и вручную. Думаю, что при детальном рассмотрении конечной цели может найтись более красивое решение, однако, попробуем порассуждать.
Если выделить существующую на чертеже полилинию, а затем вызвать команду _pline (даже не с кнопки, которая эмулирует двойное нажатие Esc, а именно вводом в командную строку), то выделение полилинии снимается. А что если соорудить такую программку, которая бы, запрашивая точки, не снимала бы с полилинии выделение, а затем отрисовывала бы полилинию по указанным точкам? Ведь (getpoint) выделение не снимает. Такое реализовать нетрудно, по крайней мере на первый взгляд, - была бы в этом реальная необходимость. Посложнее будет, если нужны и дуговые сегменты: тут будут проблемы с визуализацией динамической дуги, но, думаю, тоже реально, например, с помощью (grvecs). В общем, нужно продуманное техзадание и чертеж с примером.
Правда, больше я склоняюсь к тому, что я что-то не так понял. Потому как очень смущает, что
Цитата:
Сообщение от VVA Посмотреть сообщение
На лиспе я не представляю как это реализовать
Если уж VVA не представляет, то мне уж со своим чемоданчиком знаний в багажном отсеке точно делать нечего - можно оставить его при себе.
skkkk вне форума  
 
Непрочитано 15.11.2014, 09:47
#472
MeshIN

Изыскания и САПР
 
Регистрация: 05.07.2008
Ижевск
Сообщений: 297


Могу привести пример для работы, например оцифровка плана с сохранением топологии.
MeshIN вне форума  
 
Автор темы   Непрочитано 15.11.2014, 10:22
#473
VVA

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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Ведь (getpoint) выделение не снимает. Такое реализовать нетрудно, по крайней мере на первый взгляд
Даже реализовывать нет необходимости
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.11.2014, 09:31
#474
bol


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


Как пример, в кадастре, при формировании нового земельного участка, когда границы вычерчиваются по уже имеющимся границам большого количества земельных участков.
При черчении полилинией с привязкой к узлам очень часто случаются пропуски узлов лежащих на одной линии или близко расположенных друг к другу, а это в свою очередь является ошибкой при формировании границы зем. уч., да и следить все время за привязкой (при огромном количестве узлов) немного затруднительно что ли. К знатокам, может в Civil такое реализовано, знаю в mapinfo умельцы реализовали, но это другая история (там узлы подсвечиваются на рабочем слое).
bol вне форума  
 
Автор темы   Непрочитано 17.11.2014, 19:51
#475
VVA

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


bol, Может здесь что-нибудь подберешь
Draw polyline along with 2 or more adjacent closed polylines
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.11.2014, 20:40
1 | #476
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Цитата:
Сообщение от bol Посмотреть сообщение
Как пример, в кадастре, при формировании нового земельного участка, когда границы вычерчиваются по уже имеющимся границам большого количества земельных участков.
Не в отрицание самой задачи. Ее решение было бы полезно.
В принципе, раз речь о картографии и кадастре - делать через топологические модели площадных объектов в Map 3d.
Если "по-простому", то можно делать с помощью хоть той же _boundary. Перед этим начертить границу в той части, которая не повторяет имеющиеся границы, замкнув площадь нового участка. Указать для _boundary все элементы, задающие границу. Потом, правда, нужно проверить-уточнить, все ли вершины повторились - _boundary любит мелкие детали упрощать.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 18.11.2014, 11:13
#477
bol


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


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
_boundary
Спасибо за совет _boundary узнал недавно, сейчас активно использую.
bol вне форума  
 
Непрочитано 04.12.2014, 07:25
#478
Vova1502

ПГС
 
Регистрация: 31.07.2013
Южно-Сахалинск
Сообщений: 24


А есть у кого такой лисп чтобы полилиния объединялась с отрезком как команда "фаска" и "соединить"?
Vova1502 вне форума  
 
Непрочитано 04.12.2014, 07:48
#479
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Команда PL-JOIN из лиспа в шапке этой темы.
skkkk вне форума  
 
Непрочитано 04.12.2014, 09:20
#480
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Цитата:
Сообщение от Vova1502 Посмотреть сообщение
А есть у кого такой лисп чтобы полилиния объединялась с отрезком как команда "фаска" и "соединить"?
Не знаю у кого как, а у меня "фаска" и "соединить" это и делают: если хотя бы один из примитивов полилиния - они объединяются в одну полилинию. (у меня акад 2010) если этого не происходит полистай опции этих комманд, там могут быть нюансы. ну и если это были отрезки, то сначала фаску и потом pl-join
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 13.02.2015, 15:47
#481
Игорь Богаченко

геодезист, генпланист
 
Регистрация: 26.09.2006
Калуш, Украина
Сообщений: 33
<phrase 1= Отправить сообщение для Игорь Богаченко с помощью Skype™


А можно добавить команду, которая рисует линию перпендикулярную к полилинии? Как в Тулпаке.
http://youtu.be/8cldc_EqS58.
Игорь Богаченко вне форума  
 
Автор темы   Непрочитано 14.02.2015, 11:21
#482
VVA

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


1. !!! HELP. Как построить нормаль из точки на кривой ?
2. Совет MIP #7 от 31.05.2006 до сих пор актуален
Цитата:
Сообщение от MIP Посмотреть сообщение
>>Bdod
Если без лиспа, то так
Рисование->Прямая->Выбераешь привязку перпендикуляр->указываешь объект к которому данный перепедикуляр будет строиться->указываешь точку на объекте через которую должен пройти перпендикуляр->обрезаешь лишнее->все.
Работает с кривыми и линиями, в случае полилинии перпендикуляр будет строиться к любому сегменту (прямолинейному, дуговому).
Цитата:
Сообщение от Bdod Посмотреть сообщение
MIP действительно все просто... а самое главное быстро... спасибо
Цитата:
Сообщение от Хмурый Посмотреть сообщение
Дмитррр, бери _xline , задавай привязку "перпендикуляр" (никаких "ближайших"!!!), указывай кривую и двигай по ней бущую прямую.
PS лишнее обрежешь
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 19.02.2015, 00:41
#483
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Игорь Богаченко, еще тут об этом было.
skkkk вне форума  
 
Непрочитано 22.02.2015, 11:03
#484
posetitel


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


а можно присваивать полилиниям имена, а потом выделять участок и смотреть, какие полилинии проходят на нем?
posetitel вне форума  
 
Непрочитано 22.02.2015, 15:45
#485
olezhkooo

Проектирование
 
Регистрация: 06.08.2012
СПб
Сообщений: 163


а что с командой PL-VFI?!.. вроде как нужная функция для работы.. но пишет что такой команды нет..
olezhkooo вне форума  
 
Автор темы   Непрочитано 22.02.2015, 16:34
#486
VVA

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


olezhkooo, ее почему-то нет в pltools.fas. Загружай pltools.lsp из папки LISP. В ближайшее время исправлю
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 23.02.2015, 02:35
#487
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Цитата:
Сообщение от posetitel Посмотреть сообщение
а можно присваивать полилиниям имена, а потом выделять участок и смотреть, какие полилинии проходят на нем?
Это не в эту тему, похоже?
Offtop: Можно. Во-первых, можно понаделать слоев столько, сколько "имен" может быть у объектов. И полилинии (любые элементы) раскладывать по нужным слоям.
Во-вторых, у Автокада есть возможность определять элементы расширенными данными - XData, XRecord. Но эти XData, XRecord не обеспечены Автокадом инструментами, нужно программировать.
В-третьих, в вертикальных приложениях могут быть свои уже готовые инструменты работы с расширенными данными, свои варианты расширенных данных. Например, в Map/Civil 3d есть Feature classes и Object Data - средства определения элементов, описания их характеристик.
Какие объекты проходят через что-то - это уже пространственный анализ. Это уже ближе к ГИС или уже ГИС - это тоже в Map/Civil 3d. Но если задача одна - что через что проходит, то можно и по-простому, через поиск относительно контуров.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 03.03.2015, 09:31
#488
Wion

Инженер-проектировщик
 
Регистрация: 05.11.2014
Санкт-Петербург
Сообщений: 19


Функция ConvTo2d: при конвертировании сплайна с двумя управляющими вершинами выдает ошибку "функция для аргумента не задана: -4.44089e-016".
Wion вне форума  
 
Автор темы   Непрочитано 04.03.2015, 22:11
#489
VVA

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


Wion, Выложи dwg с примером
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 05.03.2015, 13:03
#490
Wion

Инженер-проектировщик
 
Регистрация: 05.11.2014
Санкт-Петербург
Сообщений: 19


Цитата:
Сообщение от VVA Посмотреть сообщение
Wion, Выложи dwg с примером
Сплайны для проверки.dwg

Неконвертируемые сплайны выделены красным цветом.

Конечно, можно такие сплайны и удалить, используя быстрый выбор, но они являются частью изолинии которую после конвертации нужно объединить в одну полилинию...

Последний раз редактировалось Кулик Алексей aka kpblc, 05.03.2015 в 13:44.
Wion вне форума  
 
Автор темы   Непрочитано 05.03.2015, 13:21
#491
VVA

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


Цитата:
Сообщение от Wion Посмотреть сообщение
Функция ConvTo2d: при конвертировании сплайна с двумя управляющими вершинами выдает ошибку "функция для аргумента не задана: -4.44089e-016".
У меня на твоем примере сработало без проблем. Автокад 2011

Кстати, в #359 выложен еще один лисп. Преобразовать СПЛАЙНЫ в ПОЛИЛИНИИ
Миниатюры
Нажмите на изображение для увеличения
Название: Сплайны.png
Просмотров: 47
Размер:	112.3 Кб
ID:	145174  
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 05.03.2015, 13:26
#492
Wion

Инженер-проектировщик
 
Регистрация: 05.11.2014
Санкт-Петербург
Сообщений: 19



У меня AutoCAD 2013. Думаю точками останова "поиграть", посмотреть где ошибка возникает...
Wion вне форума  
 
Непрочитано 14.05.2015, 12:56
#493
pav88


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


Доброго времени суток, уважаемые авторы лиспов!

каким образов можно сделать, чтобы удалялась ближайшая вершина, заранее выбранной полилинии, вне зависимости от того, тыкнул я на саму полилинию или рядом с ней?

Последний раз редактировалось pav88, 14.05.2015 в 13:10.
pav88 вне форума  
 
Автор темы   Непрочитано 14.05.2015, 13:27
#494
VVA

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


Как вариант задать размер прицела побольше см. PICKBOX
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 21.05.2015, 21:08
2 | #495
T.Bagdat


 
Регистрация: 21.03.2013
Самара
Сообщений: 29


Сделал черновой вариант адаптации Pltools под новый стиль с лентами.

Pltools_lenta.zip

Все иконки довёл до прозрачности, чтоб глаза не так резали. Размер 32x32 пока не рисовал. Это как-нибудь потом.
Вытащил функцию PL-VFI. А то её сделали, но внедрить в интерфейс забыли.
При загрузке pltools.cuix на экране появятся панельки группы "pltools", а в ленте, соответственно, вкладка "pltools" с единственной плашкой "Опции полилинии". Последнее справедливо для рабочего пространства "Рисование и аннотации", а так же "Классический Автокад", для тех, кто совмещает ретро-панели с новомодной лентой). Если Вы скрыли какие-либо из стандартных вкладок, то они выскочат заново. Придётся снова скрыть.
Качайте, тестируйте. Авось, совместными стараниями адаптируем под новые реалии.

P.S. Вопрос к создателям: для чего сделаны иконки PL-CLOCK, cvpoly, pl-PUK, вроде же нет таких функций?
P.P.S. Может, кто-то дополнит файл справки, а то он не поспевает за процессом)
P.P.P.S. Кстати, новые иконки теперь в файле pltools.cuix, но судя по всему, остались вшитые иконки и помимо них. Неплохо бы их убрать, или заменить на те, что почищены. Я, увы, не знаю, как это делается.
T.Bagdat вне форума  
 
Автор темы   Непрочитано 23.05.2015, 11:39
#496
VVA

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


Цитата:
Сообщение от T.Bagdat Посмотреть сообщение
Кстати, новые иконки теперь в файле pltools.cuix, но судя по всему, остались вшитые иконки и помимо них. Неплохо бы их убрать, или заменить на те, что почищены. Я, увы, не знаю, как это делается.
они расположены в dll файле. Выложи bmp файлы иконок, обновлю. По поводу остальных P.S. отвечу позже. Нужно вспоминать что к чему
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 23.05.2015, 13:05
#497
T.Bagdat


 
Регистрация: 21.03.2013
Самара
Сообщений: 29


Хорошо. Когда допилю 32x32, выложу все вместе.
Я до сих пор не понял, в чём разница между двумя панельками с цифрами, меняющими ширину сегментов, но хочу сделать для них чуточку разные иконки. Это чтобы люди не путались, а то в новом интерфейсе даже название не знаю как дать. Пусть хоть графически различаются.
T.Bagdat вне форума  
 
Непрочитано 26.05.2015, 17:06
1 | #498
T.Bagdat


 
Регистрация: 21.03.2013
Самара
Сообщений: 29


Сделал вариант близкий к чистовому. Панелей прибавилось. В принципе, подлатать справку, и можно выпускать в тираж.

В справку нужно добавить следующие команды:

ENTREV - Реверс объектов (множественный выбор) - она в справке есть, но как составляющая ENTREVS. А т.к. теперь она запускается с кнопки, а не только с командной строки, то можно её как-нибудь обособить.
PL-CW - Реверс выбранных полилиний по часовой стрелке
PL-CCW - Реверс выбранных полилиний против часовой стрелки
PL-VxMove - Перемещение вершин полилинии
PL-Vx1 - Изменение начала полилинии
PL-P90 - Рисование перпендикулярных друг к другу сегментов полилинии
PL-VFI - Вставка вершин в выбранной полилинии в местах пересечения с указанными полилиниями, линиями, дугами

И поменять иконки в статьях на новые. Ну и в файле dll тоже


Отдельно выкладываю все значки, а с ними и оригиналы в PNG, для тех случаев, когда в иконках использовалась полупрозрачность.

Тестируйте, оценивайте.
Возможно, какие-то частоиспользуемые функции нужно сделать покрупнее, а редкие, наоборот, уменьшить. Для тех, у кого разрешение экрана меньше 1680x1050 прикладываю скриншот полной ленты.

Версия, конечно, не огонь. Иконки ещё надо под тёмную цветовую схему точить, чтобы глаза не резали. Да плюс, 64x64 неплохо бы сделать для ретины. Но это всё в отдалённом будущем, если у кого другого руки не зачешутся раньше.


P.S. Иконки PL-CLOCK и cvpoly, видимо, относятся к отмершим функциям, на смену которым пришли, соответственно, PL-CW с PL-CCW и ConvTo2d с ConvTo3d. Смысл иконки pl-PUK (странно похожей на pl-VFI) по прежнему туманен. На всякий случай они теперь исключены совсем, дабы не отнимать место и внимание.
Миниатюры
Нажмите на изображение для увеличения
Название: Скриншот ленты.png
Просмотров: 37
Размер:	41.1 Кб
ID:	150563  
Вложения
Тип файла: zip Pltools_lenta.zip (434.8 Кб, 54 просмотров)
Тип файла: zip Иконки.zip (177.0 Кб, 40 просмотров)
T.Bagdat вне форума  
 
Непрочитано 26.05.2015, 18:24
#499
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от T.Bagdat Посмотреть сообщение
о прежнему туманен.
Для меня загадка зачем дублировать кнопки на ленте и зачем скрывать однокликовые кнопки
gomer вне форума  
 
Непрочитано 26.05.2015, 20:21
#500
T.Bagdat


 
Регистрация: 21.03.2013
Самара
Сообщений: 29


Ленту сделал по образу оригинальных панелей. Т.е. одна панель со всеми функциями, и куча других по категориям.
Собственно, я только-только начал осваивать ленточный интерфейс, до этого на старом сидел. И решил разобраться с адаптацией на примере Pltools, раз уж её никто до меня не сделал.
Я пока что не очень въезжаю, что как должно располагаться для максимально комфортного юзабилити. Если есть конкретные замечания, рад буду услышать. Пересобрать - не вопрос.
Главное, что камень сдвинули, а уж вода теперь потечёт.
T.Bagdat вне форума  
 
Автор темы   Непрочитано 28.05.2015, 12:07
#501
VVA

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


Цитата:
Сообщение от T.Bagdat Посмотреть сообщение
Иконки PL-CLOCK и cvpoly, видимо, относятся к отмершим функциям, на смену которым пришли, соответственно, PL-CW с PL-CCW и ConvTo2d с ConvTo3d


Цитата:
Сообщение от T.Bagdat Посмотреть сообщение
Смысл иконки pl-PUK (странно похожей на pl-VFI) по прежнему туманен. На всякий случай они теперь исключены совсем, дабы не отнимать место и внимание
Я переименовал команду из-за неблагозвучности.
Во вложении фрагмент моей переписки (от 2012 г.) с KAI
Миниатюры
Нажмите на изображение для увеличения
Название: Lette KAI.png
Просмотров: 78
Размер:	99.8 Кб
ID:	150675  
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 07.06.2015, 12:11
#502
T.Bagdat


 
Регистрация: 21.03.2013
Самара
Сообщений: 29


Разобрался с редактированием CHM-файлов.
Слегка перетряхнул справку. Добавились статьи по функциям, которых не хватало, с самым минимумом информации. Так же произведена замена значков на прозрачные. Плюс незаметные правки по мелочи в некоторых имеющихся статьях.
Вложения
Тип файла: zip pltools_help.zip (168.6 Кб, 49 просмотров)

Последний раз редактировалось T.Bagdat, 07.06.2015 в 18:04. Причина: Исправил пропущенные косяки
T.Bagdat вне форума  
 
Непрочитано 07.06.2015, 12:25
#503
posetitel


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


может быть не совсем по теме.
а есть команда, присваивающая каждой полилинии свой идентификатор (т.е. необходимо к примитиву полилинии привязать расширенные данные)?
posetitel вне форума  
 
Непрочитано 07.06.2015, 19:26
#504
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


_xdata из ExpressTools
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.06.2015, 09:24
#505
posetitel


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


хорошо, данные приделать кое-как получилось.
а как их теперь экспортировать в эксель? пробовал через извлечение данных - не получается.
posetitel вне форума  
 
Непрочитано 09.06.2015, 09:43
#506
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Разрабатывать отдельную программу, если штатный xdlist не устраивает.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.06.2015, 09:50
#507
posetitel


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


штатный xdlist выводит в окно в автокад, а хотелось в эксель.
posetitel вне форума  
 
Непрочитано 09.06.2015, 10:00
#508
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Тогда пиши свою программу.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.06.2015, 18:06
#509
T.Bagdat


 
Регистрация: 21.03.2013
Самара
Сообщений: 29


В справке нашлись ещё неурядицы. Свежеприрученная ссыль почему-то открывались не в браузере, а в окне самой справки (только на одной винде, на другой такого не замечено). Поправил, но выкладывать не тороплюсь, потому что обнаружил кое-что посущественнее. Все прежние ссылки - мёртвые (кроме той, что ведёт на dwg.ru, про среднюю полилинию).
Пара статей ссылается на код Евгения Елпанова по этому адресу:
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=23073xg
Объединение 2d полилиний по примитиву шлёт сюда:
http://www.cadforyou.spb.ru/index.ph..._programs_page
А раздел про добавление вершин в полилинию направляет на дохлую страницу автолиспа:
http://autolisp.ru/dwlsp/20

VVA, Есть ли живые топики по истокам данных разработок, или лучше всё это вычистить?
T.Bagdat вне форума  
 
Автор темы   Непрочитано 10.06.2015, 23:06
#510
VVA

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


Цитата:
Сообщение от T.Bagdat Посмотреть сообщение
Есть ли живые топики по истокам данных разработок, или лучше всё это вычистить?
Код Евгения Елпанова в этой теме пост #12 и на его сайте
остальные приказали долго жить
Спасибо что взялся за справку и меню. Освобожусь немного - обновлю раздачу
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 11.06.2015, 09:16
#511
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Offtop: А что там в справке за ссылка на мой сайт? Про что там разговор-то был?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.06.2015, 09:24
#512
T.Bagdat


 
Регистрация: 21.03.2013
Самара
Сообщений: 29


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Offtop: А что там в справке за ссылка на мой сайт? Про что там разговор-то был?
Цитата:
Командная строка PL-VxAdd

Команда добавляет новую вершину к выбранной полилинии.
При вызове команды старые полилинии (2d Polyline) преобразуются в облегченные полилинии (LWPolyline).
При добавлении новой вершины пересчитывается кривизна (bulge) сегмента и ширина (width) полилинии.
У старых (2d Polyline) полилиний ширина сегмента не обрабатывается.
Основное обсуждение программы проводилось здесь
При указании отрезка, круга, дуги они преобразуются в полилинию.

При указании видового экрана (VIEWPORT) он автоматически подрезается полилинией.
Собственно, ссыль здесь как раз и битая.
T.Bagdat вне форума  
 
Непрочитано 11.06.2015, 09:48
#513
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Offtop: Я к тому, что не помню какого-то плотного обсуждения...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.06.2015, 09:56
#514
VVA

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А что там в справке за ссылка на мой сайт? Про что там разговор-то был?
Вспомни, был autokad.ru, потом админ параллельно создал autolisp.ru для обсуждения вопросов lispa, потом он его втюхал подарил тебе
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 11.06.2015, 10:01
#515
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Дык я и не спорю
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.06.2015, 09:18
1 | #516
T.Bagdat


 
Регистрация: 21.03.2013
Самара
Сообщений: 29


Перешерстил справку. Вроде, все ссылки, которые остались - не дохлые.

Выкладываю полную сборку, вместе со значками (в папке PIC).

Правки помимо CHM-файла:
Некоторые иконки претерпели незначительные изменения.
Убраны классические панели из рабочего пространства "Рисование и аннотации".
В .dll (использовался Restorator) закинуты все значки (с обновлёнными именами), но вот нужна ли эта .dll вообще, при том, что все иконки и так хранятся в .cuix, остаётся открытым вопросом.
Тем более я так и не разобрался, как из .dll можно подцепить значки с полупрозрачностью.

Пробуйте, тестируйте. Предложения и пожелания приветствуются. Инициатива и самодеятельность - тем более.

Цитата:
Сообщение от VVA Посмотреть сообщение
Спасибо что взялся за справку и меню.
Ну, во-первых, я эту адаптацию делаю для себя
А во-вторых, я горячо ратую за стандартизацию
Вложения
Тип файла: zip Pltools_lenta.zip (624.9 Кб, 53 просмотров)
T.Bagdat вне форума  
 
Непрочитано 12.06.2015, 18:24
#517
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от T.Bagdat Посмотреть сообщение
Вроде, все ссылки, которые остались - не дохлые.
Вообще убери все ссылки, справка на то и автономная, что она автономная

Цитата:
Сообщение от T.Bagdat Посмотреть сообщение
В .dll (использовался Restorator) закинуты все значки (с обновлёнными именами), но вот нужна ли эта .dll вообще, при том, что все иконки и так хранятся в .cuix, остаётся открытым вопросом.
меню для 2002, 2004, 2009 это как говорят у нас на украине три большие разницы... причем всеми этими версиями до сих пор пользуются...
Что сейчас из себя представляет pltools: меню - хлам, справка - хлам, lisp - тот еще хлам, не хлам - идеи, реализованные в pltools.
С интересом буду наблюдать за облагораживанием этой программулины, особенно в части лиспа
gomer вне форума  
 
Непрочитано 12.06.2015, 22:05
2 | #518
T.Bagdat


 
Регистрация: 21.03.2013
Самара
Сообщений: 29


Цитата:
Сообщение от gomer Посмотреть сообщение
меню - хлам, справка - хлам, lisp - тот еще хлам
Конечно, хлам. Продукт то некоммерческий, вот всё на честном слове и держится. Зато любой прохожий с улицы вроде меня может внести свою лепту, попутно потренировавшись

Цитата:
Сообщение от gomer Посмотреть сообщение
меню для 2002, 2004, 2009 это как говорят у нас на украине три большие разницы... причем всеми этими версиями до сих пор пользуются...
Не только охотно верю, но и сам периодически являюсь свидетелем использования данных версий. Но для автокада ниже 2009 не имеют актуальности изображения формата 32x32. В таком случае, пожалуй, есть смысл оставить в .dll только подчищенные значки размером 16x16, благо там никаких конфликтов нет.


Цитата:
Сообщение от gomer Посмотреть сообщение
Вообще убери все ссылки, справка на то и автономная, что она автономная

Ломать - не строить. Не я их бережно собирал, не мне их и удалять. Справка полностью автономная. Никакой дополнительной информации о командах ссылки не приносят. Они сделаны для тех, кому интересно почитать, как зародились соответствующие лиспы, попутно разбираясь, что за задачи побудили к их созданию.
Однако, грех отказывать. Вариант без гиперссылок, ведущих на сторонние ресурсы, во вложении. Торжественно вручено gomerу
Вложения
Тип файла: zip pltools(manual).zip (164.0 Кб, 33 просмотров)
T.Bagdat вне форума  
 
Непрочитано 12.06.2015, 23:54
#519
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от T.Bagdat Посмотреть сообщение
Но для автокада ниже 2009 не имеют актуальности изображения формата 32x32. В таком случае, пожалуй, есть смысл оставить в .dll только подчищенные значки размером 16x16, благо там никаких конфликтов нет.
я если честно не помню в 2009 уже есть cuix или нет. если есть, то достаточно трех комплектов (только для русской версии), если нет, нужен еще один. Иконки 32х32 не прижились в старых версиях из-за малого размера мониторов, но это не означает что ими никто не пользуется.
Насчет справки, первое что нужно было сделать - это перевести Top Previous Next далее нужно разобраться с картинками, они не должны быть лишними, большими, маленькими или выглядеть как скрины разных версий автокада, они должны выглядеть, как часть справки, немного абстрактно, но доходчиво. И вообще нужно взять справочник команд автокада или брикскада и сравнить с хелпом pltools. Сразу все станет понятно.
Кстати меню для брикскада - это отдельная пестня...
Как следствие напрашивается инсталлятор с выбором платформы (да, да, про англичан не стоит забывать, ведь лисп-то двуязычный, а где справка и меню на английском?)
В общем, тут огроменный фронт работ, даже для некомерческого продукта и вся надежда только на амбициозную, талантливую молодежь (я, ксожалению только ворчать умею)...
Так что дерзайте, родина вас не забудет
gomer вне форума  
 
Непрочитано 02.07.2015, 14:43
#520
posetitel


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


скажите, а есть команда или отдельный лисп, который помещает полилинию в отдельный слой, при чем сам создает этот слой, предварительно спросив как его назвать?
posetitel вне форума  
 
Автор темы   Непрочитано 02.07.2015, 15:41
#521
VVA

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


Автоматический перенос размеров на слой размеры. Break макро
Попасть в слой.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 03.07.2015, 16:27
#522
linkrogers


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


Всем привет!!!
Подскажите где найти лисп на то, чтобы полилинии задать свое наименование...
Либо ткинте носом куда посмотреть...

Буду очень благодарен...

Экспрестулс не стоит, от чего-то наши программеры его не ставят...
linkrogers вне форума  
 
Непрочитано 03.07.2015, 17:59
#523
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


У полилинии уже есть наименование - полилиния.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.07.2015, 07:33
1 | #524
T.Bagdat


 
Регистрация: 21.03.2013
Самара
Сообщений: 29


Пользуясь тем, что VVA благоразумно дал комплекту ещё немного отлежаться, выкладываю очередной "билд"

В который раз обновились некоторые иконки. Не особо заметно, но времени ушло довольно много. В том числе изменения коснулись и формата 16x16. Единого стиля там всё так же нет, но пёстроты поубавилось. Соответственно новые иконки перекочевали и в файл справки.

Так же загнал все значки в библиотеку "pltools.dll", и прописал новые пути к ним файле "pltools.mnu". Прикладываю скриншоты из автокада 2004. Кстати, в 2004-ом команды у меня запускаются, но почему-то вылетают, не завершившись. Думаю, к интерфейсу это отношения не имеет, скорее дело в кривости установки автокада, но выверить этот момент, на чьей-нибудь рабочей станции не помешает.

Ещё сделал интерфейс в .cui посредством автокад 2009, чтобы, как говорится, и ленту съесть и в CUI влезть. Иконки опять же ссылаются на "pltools.dll". Лента получилась жутко топорная, иконки в ней не хотят избавляться от фона. Возможно, это решается легко, но я не допетрил. В классических панельках всё нормально. Скриншот прилагается.

Поставить автокад 2002 у меня возможности нет. И я даже не догадываюсь, как адаптировать меню под него. Остаётся уповать на владельцев этой ретро-версии.

В остальном, никаких изменений. Иконки 64x64, как и адаптация к тёмной схеме, появившейся в 2015, по прежнему в долгосрочных планах.
На этом всё. Пробуйте, тестируйте. Скриншот ленты .cuix так же приложен.
Миниатюры
Нажмите на изображение для увеличения
Название: ToolBar_16_2004_mnu.png
Просмотров: 128
Размер:	58.0 Кб
ID:	153448  Нажмите на изображение для увеличения
Название: ToolBar_32_2004_mnu.png
Просмотров: 118
Размер:	118.0 Кб
ID:	153449  Нажмите на изображение для увеличения
Название: Ribbon_2009_cui.png
Просмотров: 127
Размер:	49.0 Кб
ID:	153450  Нажмите на изображение для увеличения
Название: Ribbon_2012_cuix.png
Просмотров: 88
Размер:	41.0 Кб
ID:	153451  
Вложения
Тип файла: zip Pltools_Ribbon.zip (564.3 Кб, 133 просмотров)
T.Bagdat вне форума  
 
Автор темы   Непрочитано 16.07.2015, 12:02
#525
VVA

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


Цитата:
Сообщение от T.Bagdat Посмотреть сообщение
Кстати, в 2004-ом команды у меня запускаются, но почему-то вылетают, не завершившись.
А в других версиях?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 16.07.2015, 12:20
#526
T.Bagdat


 
Регистрация: 21.03.2013
Самара
Сообщений: 29


Цитата:
Сообщение от VVA Посмотреть сообщение
А в других версиях?
Да везде всё нормально, тьфу-тьфу. 2009, 2012, 2014, 2015 - всё прекрасно. И даже в 2004 команды включаются, где допуск спросят, где объект попросят выделить. Но как-то безрезультатно. Комп не первой свежести, весь замусоренный. Я так и не понял, что там не так. Может, надо было .fas подгрузить, посмотреть... Некогда было. Как доберусь ещё раз, проверю, если раньше никто не отпишется, что всё в порядке.

Добавлено (17.07.2015):
В основном пишет "No database"
В архиве видео. Качество ниже среднего.
https://drive.google.com/open?id=0Bx...0h6SWpKTGNjcVk

Добавлено (19.07.2015):
Забыл отметить. На скаченный архив dnl607.zip реакция такая же. Так что, скорее всего, проблема локальная.

Последний раз редактировалось T.Bagdat, 19.07.2015 в 16:28.
T.Bagdat вне форума  
 
Непрочитано 28.07.2015, 15:13 удаление вершин полилиний
#527
Linkshunter

проектирование а/дорог
 
Регистрация: 03.07.2013
СПб
Сообщений: 376


Подскажите, есть ли возможность сделать функцию удаления вершин не по одной, а сразу несколько, рамкой на определенном участке полилинии?
...или команду PL-VxRdc, работающую не на всей полилинии, а на ее участке
...или команду, противоположную PL-DIV - "спрямить" выбранный участок полилинии скопом.
В общем каким-то образом ускорить ручное удаление вершин в случаях, когда команду PL-VxRdc не применить ко всей полилинии, т.к. требуется редактирование определенных участков, которых достаточно много.
Linkshunter вне форума  
 
Непрочитано 20.10.2015, 12:23
#528
Gmk17

САПРовод
 
Регистрация: 22.01.2013
Красноярск
Сообщений: 290


А можно заставить программу PL-NoArc обрабатывать несколько выделенных объектов одновременно?
Gmk17 вне форума  
 
Автор темы   Непрочитано 20.10.2015, 16:09
1 | #529
VVA

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


Цитата:
Сообщение от Gmk17 Посмотреть сообщение
А можно заставить программу PL-NoArc обрабатывать несколько выделенных объектов одновременно?
Она это умеет уже давно. Скачай последнюю версию.
Если загрузишь из папки LISP pltools.lsp, то увидишь дату редакции
Цитата:
=========== Определенные команды PLTOOLS=================
Редакция 18.07.2014
PL-JOIN -Объединение выбранных полилиний
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 21.10.2015, 05:20
#530
Gmk17

САПРовод
 
Регистрация: 22.01.2013
Красноярск
Сообщений: 290


Цитата:
Сообщение от VVA Посмотреть сообщение
Она это умеет уже давно. Скачай последнюю версию.
Признаю - затупил. Скачал свежую - всё заработало.

_FLATTEN с последующей обработкой PL-NoArc - именно тот результат, которого я добивался. Спасибо!
Gmk17 вне форума  
 
Непрочитано 30.12.2015, 12:43
#531
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Вот такая проблема:
в нашей фирме пользовательские программы установлены на сервере (в том числе и PLTools) и нормально работают. Кроме Справки. Как выяснилось (например, из этого http://www.cronos.ru/kb-1317.html и из этого https://support.microsoft.com/ru-ru/kb/896054) можно разрешить файлам CHM нормально открываться по сети и внутри AutoCAD'а и я даже макросы сочинил, но... Прав у пользователей не хватает для внесения изменений в реестр, а сисадмины категорически не хотят изменять реестр на локальных компьютерах. Можно ли как-нибудь вывернуться?
Profan вне форума  
 
Непрочитано 30.12.2015, 14:05
#532
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Копируй chm на локальные машины и прописывай в setfunhelp путь к локальному пути
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.12.2015, 15:00
#533
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Алексей, спасибо за ответ. Но я работаю удаленно и имею доступ через Интернет только к серверу, а к локальным компьютерам доступа не имею, поэтому и скопировать файл CHM на локальные компьютеры не могу. Вот если бы пользователь, нажимая на кнопку Справка, тем самым запускал бы копирование этого файла на свой компьютер в строго определенную папку на диске D: (нпример, D:\HELPUSER) и дальше файл Справки уже открывался бы с локального компьютера... Тут и setfunhelp пригодилась бы. Можно ли с помощью VLisp провернуть такую штуку (скопировать файл с сервера на собственный локальный компьютер)?
Profan вне форума  
 
Автор темы   Непрочитано 02.01.2016, 19:48
#534
VVA

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


Цитата:
Сообщение от Profan Посмотреть сообщение
Можно ли с помощью VLisp провернуть такую штуку (скопировать файл с сервера на собственный локальный компьютер)?
можно. как пример (копирует в TEMP пользователя)
вместо "\\\\server\\ACADTOOLS\\pltools.chm" подставь свой сетевой путь
Код:
[Выделить все]
(if(null(findfile (strcat (getenv "temp") "\\" "pltools.chm")))
  (vl-file-copy (findfile "\\\\server\\ACADTOOLS\\pltools.chm")(strcat (getenv "temp") "\\" "pltools.chm"))
  )
Ну и setfunhelp заменить
Код:
[Выделить все]
(SETFUNHELP "C:PL-A2L" (strcat (getenv "temp") "\\" "pltools.chm") "PLA2L")
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 03.01.2016, 12:13
#535
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Решение пришло совсем с другой стороны. Существует бесплатная программа SumatraPDF. Можно взять здесь:
http://www.sumatrapdfreader.org/down...viewer-ru.html
Но многие ли знают, что эта программа спокойно открывает файлы CHM? Портативный вариант можно разместить прямо на сервере без установки (для которой могут понадобиться права администратора) и запускать с локального компьютера. Причем, 32-битная версия нормально запускается на 64-битных системах. Таким образом, если сервер смонтирован на локальных компьютерах как диск Z:, то можно создать следующие конфигурации папок на сервере:
Пользовательские программы находятся, (например) в папке Z:\USERSPROG\PLtools, а файлы Справки в папке Z:\USERSHELP\PLtools. В папке Z:\USERSHELP также находится папка SumatraPDF (портативный вариант). Я привел пример с 2-мя папками, потому что у нас, например, в пути пользовательских программ находятся пробелы, а это для указания имени Спраки не подходит. Если же знать об этом, то достаточно будет одной папки с программами на сервере. Макрос же для запуска файла Справки может выглядет так:
Код:
[Выделить все]
^C^C^P(STARTAPP "Z:/USERSHELP/SumatraPDF/SumatraPDF.exe" "Z:/USERSHELP/PLtools/pltools.chm")
При этом никакого изменения уровня безопасности не происходит, в реестре ничего менять не надо.
Profan вне форума  
 
Непрочитано 01.09.2016, 11:15
#536
Goroboj_VA


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


Есть команда
PL-VxRdc -Удаление вершин полилиний, которые лежат на одной прямой.

А можно не удалять вершины, а просто выбрать объекты, у которых вершины лежат на одной прямой.
(Просто не во всех объектах нужно удалять внутренние вершины)
Goroboj_VA вне форума  
 
Непрочитано 01.09.2016, 14:07
#537
Linkshunter

проектирование а/дорог
 
Регистрация: 03.07.2013
СПб
Сообщений: 376


Цитата:
Сообщение от Goroboj_VA Посмотреть сообщение
(Просто не во всех объектах нужно удалять внутренние вершины)
так не выбирайте их, эти объекты. Или исключайте из набора зажатым шифтом.
Linkshunter вне форума  
 
Непрочитано 01.09.2016, 14:35
#538
Goroboj_VA


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


Что бы исключить нужно сначала выбрать.
А как выбрать я не знаю
Goroboj_VA вне форума  
 
Непрочитано 01.09.2016, 14:46
| 1 #539
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Ну выбрать все полилинии, например, так:
Код:
[Выделить все]
(ssget '((0 . "LWPOLYLINE")))
Затем с зажатым Shift пройтись по линиям, в которых удалять вершины точно не нужно, ведь это пользователь решает, какие исключить, не так ли? В итоге запустить команду на оставшиеся выбранными полилинии - там, где есть вершины на одной прямой, они "прополются". Просто не понимаю, какое преимущество для ручного отсева ненужных полилиний даст пользователю выбор только полилиний с заведомо лежащими на одной прямой вершинами?
skkkk вне форума  
 
Непрочитано 01.09.2016, 14:57
#540
Linkshunter

проектирование а/дорог
 
Регистрация: 03.07.2013
СПб
Сообщений: 376


Цитата:
Сообщение от Goroboj_VA Посмотреть сообщение
Что бы исключить нужно сначала выбрать.
А как выбрать я не знаю
...PL-VxRdc обрабатывает полилинии последовательно(если не ошибаюсь), соответственно набора не получится
Linkshunter вне форума  
 
Непрочитано 31.10.2016, 16:00
#541
Папаё

архитектор
 
Регистрация: 17.03.2015
респ. Коми
Сообщений: 55


Ребят, подскажите как в PL-JOIN задать допуск?
(есть макрос Кулика Алексея с допуском 10, но при загрузке его у меня в 16-ом выдает ошибку. Код:^C^C(defun c:mypljoin( / selset _pedit) (if (setq selset (ssget "_:L" '((0^M;. "ARC,*LINE")))) (progn (setq _pedit (getvar "PEDITACCEPT")) (setvar^M;"PEDITACCEPT" 1) (command "_.pedit" "_m" selset "" "_j" 10.0 "") (setvar^M;"PEDITACCEPT" _pedit))));mypljoin )
__________________
архитектор
дома, эскизы
санаторий, дымоходы
Папаё вне форума  
 
Непрочитано 31.10.2016, 16:06
1 | #542
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Что-то я не помню такого макроса...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 31.10.2016, 17:13
#543
Папаё

архитектор
 
Регистрация: 17.03.2015
респ. Коми
Сообщений: 55


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Что-то я не помню такого макроса...
Здравствуйте Алексей) Этот макрос 10 лет назад на www.caduser.ru.
__________________
архитектор
дома, эскизы
санаторий, дымоходы
Папаё вне форума  
 
Непрочитано 31.10.2016, 19:37
#544
Linkshunter

проектирование а/дорог
 
Регистрация: 03.07.2013
СПб
Сообщений: 376


Цитата:
Сообщение от Папаё Посмотреть сообщение
подскажите как в PL-JOIN задать допуск?
использую это(в 15м).
...единственное, не пересекающиеся полилинии не соединяет
Вложения
Тип файла: lsp pedit2.lsp (202 байт, 48 просмотров)
Linkshunter вне форума  
 
Автор темы   Непрочитано 31.10.2016, 23:00
1 | #545
VVA

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


Цитата:
Сообщение от Папаё Посмотреть сообщение
Ребят, подскажите как в PL-JOIN задать допуск?
в файле pltools.lsp найти фрагмент
Цитата:
(defun C:PL-JOIN ( / ssnab count en *error* ss)
(setq *error* pltool-err)
(or *pl-activedoc* (setq *pl-activedoc* (vla-get-activedocument (vlax-get-acad-object))))
(vla-StartUndoMark *pl-activedoc*)
(pl:error-save-sysvar '(("PEDITACCEPT" 1)("CMDECHO" 0)))
(setq ssnab (ssget "_I"))
(while (not ssnab)(setq ssnab (ssget)))
;;;И 3d полилинии
;(setq ssnab(3dpljn ssnab 1e-6 "AcDb3dPolyline"))
(setq count 0)
(while (setq en (ssname ssnab count))
(if (member '(100 . "AcDb3dPolyline")(entget en))
(ssdel en ssnab)
(setq count (1+ count))
)
)
(setq en (entlast) count 0 ss (ssadd))
(if (> (sslength ssnab) 1)
(if (and (getvar "PEDITACCEPT") (= (getvar "PEDITACCEPT") 1))
(vl-cmdf "_pedit" "_Multiple" ssnab "" "_Join" 0 "")
(vl-cmdf "_pedit" "_Multiple" ssnab "" "_Y" "_Join" 0 ""))

)
Допуск выделен красным
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 31.10.2016, 23:17
#546
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Папаё, чуть ниже нормальный код макроса был. Хотя VVA уже ответил
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.11.2016, 18:18
#547
Linkshunter

проектирование а/дорог
 
Регистрация: 03.07.2013
СПб
Сообщений: 376


Цитата:
Сообщение от Linkshunter Посмотреть сообщение
использую это(в 15м).
..да, еще иногда удобнее стд.командами "сопряжение" и "фаска" когда требуются вариации соединения
Linkshunter вне форума  
 
Непрочитано 07.11.2016, 02:27
#548
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
нормальный код
нормальный код не предполагает вмешательство несведущего человека в себя
gomer вне форума  
 
Непрочитано 07.11.2016, 08:34
#549
Valery Brelovsky

Инженер дорожник
 
Регистрация: 22.10.2007
Израиль
Сообщений: 1,859


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Что-то я не помню такого макроса...
Ну, что Вы Алексей, я по сей день им пользуюсь.
Valery Brelovsky вне форума  
 
Непрочитано 07.11.2016, 08:47
#550
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Цитата:
Сообщение от Valery Brelovsky Посмотреть сообщение
Ну, что Вы Алексей, я по сей день им пользуюсь.
С ^M в середине? Эт вряд ли

----- добавлено через 39 сек. -----
Offtop:
Цитата:
Сообщение от gomer Посмотреть сообщение
нормальный код не предполагает вмешательство несведущего человека в себя
Но это никого не останавливает Все равно лезем и начинаем читать инструкцию, когда понимаем: все, доломали
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 31.01.2017, 11:53
#551
barabaka


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


А никто не встречал команды, которая бы делила полилинию на не равные части? Скажем, ставишь на полилинии базовую точку (в любом месте линии) и остальные точки ставятся на указаном растоянии от базовой точки с учетом дуг, изломов полилинии и т.д. Растояния для каждой новой точки что б задавались отдельно
barabaka вне форума  
 
Непрочитано 31.01.2017, 12:11
#552
wepp

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


Цитата:
Сообщение от barabaka Посмотреть сообщение
А никто не встречал команды, которая бы делила полилинию на не равные части? Скажем, ставишь на полилинии базовую точку (в любом месте линии) и остальные точки ставятся на указаном растоянии от базовой точки с учетом дуг, изломов полилинии и т.д. Растояния для каждой новой точки что б задавались отдельно
Посмотри здесь, делин: http://forum.dwg.ru/showthread.php?t=4217
wepp вне форума  
 
Непрочитано 31.01.2017, 12:36
#553
barabaka


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


О, почти оно))) Только не отмечает базовую точку. Спасибо))
barabaka вне форума  
 
Непрочитано 09.07.2017, 09:45
#554
Luba Haikin


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


Здравствуйте. Нужна помощь. Аutocad map 3d 2018, после установки pltools перестает работать приложение к автокаду. Выдает ошибку: bad argument type: lentityp ((0. "BLOCK"). В предыдущих версиях все работало.
Luba Haikin вне форума  
 
Автор темы   Непрочитано 10.07.2017, 14:30
#555
VVA

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


Luba Haikin, Какую конкретно команду вызываешь? Приложи пример с файла или опиши что делаешь.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 20.01.2018, 02:15
#556
DMS-chiii


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


Сегменты разными типами линий как то можно реализовать?
DMS-chiii вне форума  
 
Непрочитано 20.01.2018, 20:12
#557
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Цитата:
Сообщение от DMS-chiii Посмотреть сообщение
Сегменты разными типами линий как то можно реализовать?
В AutoCAD - напрямую невозможно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.01.2018, 10:40
#558
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,587


Цитата:
Сообщение от DMS-chiii Посмотреть сообщение
Сегменты разными типами линий как то можно реализовать?
Как то можно, но вот нужно ли...
Boxa вне форума  
 
Непрочитано 21.01.2018, 15:11
#559
Сергей812


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


Цитата:
Сообщение от Boxa Посмотреть сообщение
Как то можно, но вот нужно ли...
задача то нужная: например, в электрических/слаботочных сетях есть разные условные обозначения для кабеля в гофротрубе, открыто, на подвесе и т.д. Но как написал выше Алексей, в стандартном примитиве полилинии это не реализуемо.
Сергей812 вне форума  
 
Непрочитано 21.01.2018, 16:55
#560
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,587


Сергей812, согласен, в стандартном примитиве это не реализуемо, но вопрос то был "как то" , "как то" можно, но сложно.
Boxa вне форума  
 
Непрочитано 21.01.2018, 17:13
#561
Сергей812


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


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

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


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

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


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

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


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

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

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


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

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


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

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


Цитата:
Сообщение от 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
Москва-Тюмень
Сообщений: 422


Nike,

благодарю!

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

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


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

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

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

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

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для 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
Москва-Тюмень
Сообщений: 422


Уважаемый VVA,

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


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


Цитата:
Сообщение от 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
Сообщений: 1,664


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


 
Регистрация: 10.02.2007
Москва
Сообщений: 611


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


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


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

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


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,664


Цитата:
Сообщение от Сергей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
Сообщений: 10,959


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


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,664


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

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


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


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

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


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


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


----- добавлено через ~2 мин. -----
Цитата:
Сообщение от Nike Посмотреть сообщение
А можно ли программно зацепить среднюю ручку сегмента полилинии для последующего его смещения, зная координату её расположения?
Зачем? Ручка для визуализации взаимодействия с пользователем - программно вершины смещайте.
Сергей812 вне форума  
 
Непрочитано 22.06.2018, 11:49
#581
Nike

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


Хочу избавиться от лишнего ручного щелчка.
Вот что надо:
Миниатюры
Нажмите на изображение для увеличения
Название: 1.gif
Просмотров: 158
Размер:	59.6 Кб
ID:	203792  
Nike вне форума  
 
Непрочитано 22.06.2018, 11:54
#582
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,664


Offtop:
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
впадает в панику и ступор?)

Offtop: скорее в иронический чёрный сарказм)))

Цитата:
Сообщение от Nike Посмотреть сообщение
А можно ли программно зацепить среднюю ручку сегмента полилинии для последующего его смещения
я думаю, что сегмент можно выбрать и тащить его также можно, вопрос только как сделать грамотное слежение?) grread обрубает привязки.

опа. так тут тащить ничего по ходу не нужно будет..

Последний раз редактировалось koMon, 22.06.2018 в 12:00.
koMon вне форума  
 
Непрочитано 22.06.2018, 12:11
#583
Сергей812


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


ну если под данную задачу - то тут от щелчка не избавишься) Тут скорее указывается полилиния и затем блоки в цикле - а дальше уже вычисляется проекция середины геометрии блока на полилинию и добавляются вершины между найденными для "петли" кабеля.

----- добавлено через ~5 ч. -----
Offtop:
Цитата:
Сообщение от koMon Посмотреть сообщение
прозвучало так, как будто компилятор C# штатно встроен в автокад)
вы не поверите - не то что в акад, а в сам windows компилятор встроен)
Сергей812 вне форума  
 
Непрочитано 22.06.2018, 22:07
#584
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,664


Offtop:
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
вы не поверите - не то что в акад, а в сам windows компилятор встроен)

не поверю, боюсь что эта встройка обеспечивается лишь после инсталяции Visual Studio

Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Тут скорее указывается полилиния и затем блоки
Nike, я бы так и делал бы
koMon вне форума  
 
Непрочитано 09.07.2018, 11:37
#585
Frigate

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


Цитата:
Сообщение от koMon Посмотреть сообщение
выбор вершин секрамкой. уточнение - выбираются конечно же полилинии.
Здорово! огромное спасибо!

А можете немного подправить, чтобы полилинии выделялись отдельно, а запрос на секрамку шел уже потом? А то выделяются все полилинии, и нужные и ненужные.
Еще одна просьба - если у выделенной полилинии вершина не лежит внутри секрамки, такую полилинию нужно исключить из набора.


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

Последний раз редактировалось Frigate, 09.07.2018 в 12:07.
Frigate вне форума  
 
Непрочитано 09.07.2018, 17:15
#586
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,664


Цитата:
Сообщение от Frigate Посмотреть сообщение
А можете немного подправить…
Цитата:
Сообщение от Frigate Посмотреть сообщение
Еще одна просьба…
Цитата:
Сообщение от Frigate Посмотреть сообщение
И вопрос всем…
Обрабатываются, только предварительно или выбранные после запуска команды полилинии. Размер опоясывающей рамки меняется движением мыши, перемещение опоясывающей рамки - однократное нажатие пробела, возврат к изменению размера - однократное нажатие пробела.

Код:
[Выделить все]
 
;***************************************************************************************************************************************************

;															 MOVE_MULTIPLE_VERTEX

;															  koMon, 16.07.2018

;***************************************************************************************************************************************************

(alert "\tКоманда  MOVE_MULTIPLE_VERTEX позволяет переместить
	несколько вершин выбранных предварительно или
	после запуска команды полилиний в выбранную точку.
	Нужные вершины опоясываются рамкой, изменение
	размера которой осуществляется движением мыши.
	Однократное нажатие пробела позволяет переместить
	рамку в другое место. Последующее однократное
	нажатие пробела возвращает рамку в режим изменения
	размера. Если внутри рамки нет вершин полилиний,
	она переключается в режим перемещения.

	\t\t\t\tkoMon, 16.07.2018"
)
(princ)

;***************************************************************************************************************************************************

																(vl-load-com)

;***************************************************************************************************************************************************

(defun c:Move_Multiple_Vertex ( /
									Coordinates_List Coordinates_List_Modified Crossing_Point_1 Crossing_Point_2 Current_Pline
									Entering_Crossing_Point_2 Move_Vertex_To_Point Nearest_Point
									Pline_Parameter Pline_Point_At_Parameter Points_List Point_Of_Interest
									Rect_Data Rect_Height Rect_Width Selecting_Plines Space_Pressed
									ssget_plines Gread_Data Plines_Pickset Plines_Pickset_Index
									Document_Object Getpoint_Data
							  )
	(setq selecting_plines t
		  acad_Object (vlax-get-acad-object)
	      document_object (vla-get-ActiveDocument acad_Object)
		  vlax_executed (vla-startUndoMark document_object)
	)

	;***************************************************************************************

	(defun ssget_plines ( / selecting_plines)
		(setq selecting_plines t)
		(while selecting_plines
			(setq plines_pickset (vl-catch-all-apply 'ssget (list '((0 . "LWPOLYLINE")))))
			(cond
				(
					(= 'PICKSET (type plines_pickset))
						(setq selecting_plines nil)
				)
				(
					(or
						(= 'VL-CATCH-ALL-APPLY-ERROR (type plines_pickset))
				        t
					)
				)
			)
		)
	)

	;***************************************************************************************

	(if (cadr (ssgetfirst))
		(progn
			(setq plines_pickset (cadr (ssgetfirst))
				  plines_pickset_index 0
			)
			(while (ssname plines_pickset plines_pickset_index)
				(if (not (equal '(0 . "LWPOLYLINE") (assoc 0 (entget (ssname plines_pickset plines_pickset_index)))))
					(ssdel (ssname plines_pickset plines_pickset_index) plines_pickset)
				)
				(setq plines_pickset_index (1+ plines_pickset_index))
			)
			(if (= 0 (sslength plines_pickset))
				(progn
					(sssetfirst nil)
					(ssget_plines)
				)
			)
		)
		(ssget_plines)
	)
	(sssetfirst nil plines_pickset)
	(setq crossing_point_1 (progn
		  							(while
		  						  			(or
		  						  				(not (setq getpoint_data (vl-catch-all-apply 'getpoint (list "\nВыберите рамкой вершины для перемещения: "))))
								  				(= 'VL-CATCH-ALL-APPLY-ERROR (type getpoint_data))
								  			)
									)
									getpoint_data
							)
		  crossing_point_2 nil
		  entering_crossing_point_2 t
		  space_pressed nil
	)
	(while entering_crossing_point_2
		(setq error_ocurred (if (vl-catch-all-error-p (setq gread_data (vl-catch-all-apply 'grread (list t 8 0)))) t nil))
    	(cond
			(
				error_ocurred
			)
			(
			   	(= 5 (car gread_data))
					(if crossing_point_2
						(grvecs (append (list 256) (cdr rect_data)))	;erasing color of holding frame
					)
					(setq crossing_point_2 (cadr gread_data))
					(if space_pressed
						(setq crossing_point_1 (list (- (car crossing_point_2) rect_width)
												   	 (- (cadr crossing_point_2) rect_height)
											   )
						)
					)
					(setq rect_data (list 256	;initial holding frame color
								  		  (list (car crossing_point_1) (cadr crossing_point_1))
								  		  (list (car crossing_point_1) (cadr crossing_point_2))

			       				  		  (list (car crossing_point_1) (cadr crossing_point_2))
			       				  		  (list (car crossing_point_2) (cadr crossing_point_2))

			       				  		  (list (car crossing_point_2) (cadr crossing_point_2))
			       				  		  (list (car crossing_point_2) (cadr crossing_point_1))

			       				  		  (list (car crossing_point_2) (cadr crossing_point_1))
			       				  		  (list (car crossing_point_1) (cadr crossing_point_1))
							 		)
					)
					(grvecs rect_data)
			)
			(
			 	(= 3 (car gread_data))
					(setq plines_pickset_index 0)
					(while (and
								(< plines_pickset_index (sslength plines_pickset))
								entering_crossing_point_2
							)
								(setq point_of_interest (polar crossing_point_1 (angle crossing_point_1 crossing_point_2) (/ (distance crossing_point_1 crossing_point_2) 2.0))
									  current_pline (vlax-ename->vla-object (ssname plines_pickset plines_pickset_index))
									  nearest_Point (vlax-curve-getClosestPointTo current_pline (trans point_of_interest 1 0))
									  pline_parameter (atoi (rtos (vlax-curve-getParamAtPoint current_pline nearest_Point) 2 0))
									  pline_point_at_parameter (trans (vlax-curve-getpointatparam current_pline pline_parameter) 0 1)
								)
								(if (and
										(>= (car pline_point_at_parameter) (min (car crossing_point_1) (car crossing_point_2)))
										(<= (car pline_point_at_parameter) (max (car crossing_point_1) (car crossing_point_2)))
										(>= (cadr pline_point_at_parameter) (min (cadr crossing_point_1) (cadr crossing_point_2)))
										(<= (cadr pline_point_at_parameter) (max (cadr crossing_point_1) (cadr crossing_point_2)))
									)
										(progn
											(setq entering_crossing_point_2 nil)
											(grvecs (append (list 256) (cdr rect_data)))	;erasing color of holding frame
										)
								)
								(setq plines_pickset_index (1+ plines_pickset_index))
					)
					(if entering_crossing_point_2
						(setq space_pressed t
							  rect_width (- (car crossing_point_2) (car crossing_point_1))
							  rect_height (- (cadr crossing_point_2) (cadr crossing_point_1))
						)
					)
			)
			(
				(equal gread_data (quote (2 32)))
					(if (null space_pressed)
						(setq space_pressed t
							  rect_width (- (car crossing_point_2) (car crossing_point_1))
							  rect_height (- (cadr crossing_point_2) (cadr crossing_point_1))
						)
						(setq space_pressed nil)
					)
			)
			(
			 	t
			)
		)
	)
	(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
		  						(progn
		  								(while
		  							  			(or
		  							  				(not (setq getpoint_data (vl-catch-all-apply 'getpoint (list point_of_interest "\nУкажите точку для перемещения выбранных вершин: "))))
									  				(= 'VL-CATCH-ALL-APPLY-ERROR (type getpoint_data))
									  			)
										)
										getpoint_data
								)
	)
	(while (> (sslength plines_pickset) 0)
		(setq current_pline (vlax-ename->vla-object (ssname plines_pickset 0))
			  nearest_Point (vlax-curve-getClosestPointTo current_pline (trans point_of_interest 1 0))
			  pline_parameter (atoi (rtos (vlax-curve-getParamAtPoint current_pline nearest_Point) 2 0))
			  pline_point_at_parameter (trans (vlax-curve-getpointatparam current_pline pline_parameter) 0 1)
		)
		(if (and
				(>= (car pline_point_at_parameter) (min (car crossing_point_1) (car crossing_point_2)))
				(<= (car pline_point_at_parameter) (max (car crossing_point_1) (car crossing_point_2)))
				(>= (cadr pline_point_at_parameter) (min (cadr crossing_point_1) (cadr crossing_point_2)))
				(<= (cadr pline_point_at_parameter) (max (cadr crossing_point_1) (cadr crossing_point_2)))
			)
				(progn
					(setq 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 (trans move_vertex_to_Point 1 0)) (cadr (trans move_vertex_to_Point 1 0))) (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))
	)
	(vla-EndUndoMark document_object)
	(princ)
)

;***************************************************************************************************************************************************

Последний раз редактировалось koMon, 27.07.2018 в 09:07. Причина: Модификация выбора полилиний, рамки для опоясывания вершин
koMon вне форума  
 
Непрочитано 13.07.2018, 18:06
#587
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,664


GIFы
Миниатюры
Нажмите на изображение для увеличения
Название: MMV_1.gif
Просмотров: 131
Размер:	1.38 Мб
ID:	204439  Нажмите на изображение для увеличения
Название: MMV_2.gif
Просмотров: 107
Размер:	1.82 Мб
ID:	204440  
koMon вне форума  
 
Непрочитано 22.09.2018, 10:43
#588
Cfytrr

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


Цитата:
Сообщение от VVA Посмотреть сообщение
пока не смогу проверить
С ошибочной отрисовкой прямоугольников в 2019 акаде ничего не сдвинулось? Очень расстраивает меня эта ошибка
__________________
...переменная FILEDIA создана для привлечения пользователей к форумам.
Cfytrr вне форума  
 
Непрочитано 26.09.2018, 14:08
#589
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,664


Прогрессирующий вариант построения прямоугольника по 2-м диагональным точкам.

Код:
[Выделить все]
 
;***************************************************************************************************************************************************

;														  		2_Points_Rectangle

;												Рисуется прямоугольник по двум диагональным точкам
; 												в ТЕКУЩЕМ НЕЗАБЛОКИРОВАННОМ слое.

;												1. Указывается первая диагональная точка.
;												2. Указывается направление прямоугольника.
;												3. Указывается вторая диагональная точка ЛКМ без привязки ("на глаз")
;													Или:
;														ПКМ - для указания 2-й диагональной точки
;														W,Ц - для указания ширины прямоугольника
;														H,Р - для указания высоты прямоугольника
;														A,Ф - для указания угла наклона прямоугольника
;														R,К - для указания площади, при указанной ширине или высоте
;														O,Щ - для указания 1-ой точки прямоугольника
;												4. Завершение команды при определённом прямоугольнике ЛКМ, ПКМ, Space, Enter

;															koMon, 26.09.2018 (1 yr m-ship)

;***************************************************************************************************************************************************

																(vl-load-com)

;***************************************************************************************************************************************************

(defun c:2_Points_Rectangle ( /
								Create_Pline rnil_to_string Calculate_Rect calculate_point_3 get_input_data write_prompt
								Acad_Object Angle_c1_c3 Distance_c1_c3 Document_Object getting_rect_point_3 Error_Ocurred
								Gread_Data Modelspace_Object Rect_Angle
								Vlax_Executed Lisp_Executed
								X_Rotated Y_Rotated Rect_Height Rect_Width
								pline_created
								Height_Fixed Rect_Area Width_Fixed
								ucs_X_Angle ucs_Y_Angle symmetry_multiplier
							)

	;***********************************************************************************************************************************************

	(defun create_pline (point_1 point_2 point_3 point_4 pline_exists / pline_coordinates_array Pline_Coordinates_List)
    	(setq pline_coordinates_array (vlax-make-safearray vlax-vbDouble (cons 1
																			   (length
																			   			(setq pline_coordinates_list
																													(append
																															(append (list (* symmetry_multiplier (car (trans point_1 1 0)))) (cdr (trans point_1 1 0)))
																															(append (list (* symmetry_multiplier (car (trans point_2 1 0)))) (cdr (trans point_2 1 0)))
																															(append (list (* symmetry_multiplier (car (trans point_3 1 0)))) (cdr (trans point_3 1 0)))
																															(append (list (* symmetry_multiplier (car (trans point_4 1 0)))) (cdr (trans point_4 1 0)))
																												  	)
																						)
																				)
																		 )
									  )
		)
    	(vlax-safearray-fill pline_coordinates_array pline_coordinates_list)
		(if (null pline_exists)
			(progn
    			(setq pline_Object (vla-AddPolyline modelSpace_object pline_coordinates_array)
					  pline_created t
				)
				(vla-put-closed pline_object :vlax-true)
			)
    		(vla-put-coordinates pline_Object pline_coordinates_array)
		)
	)

	;***********************************************************************************************************************************************

	(defun rnil_to_string (input_value is_radians /)
		(if (or (null input_value)
				(zerop input_value)
			)
				""
			(cond
				(
					is_radians
						(angtos input_value 0 (getvar 'auprec))
				)
				(
					t
						(rtos input_value)
				)
			)
		)
	)

	;***********************************************************************************************************************************************

	(defun calculate_rect (point_1 point_3 / angle_c1_c3 x_rotated y_rotated)
		(setq distance_c1_c3 (distance point_1 point_3)
			  angle_c1_c3 (angle point_1 point_3)
			  x_rotated (* distance_c1_c3 (cos (- angle_c1_c3 rect_angle)))
			  y_rotated (* distance_c1_c3 (sin (- angle_c1_c3 rect_angle)))
			  rect_point_2 (polar point_1 (+ rect_angle (* 0.5 pi)) y_rotated)
			  rect_point_4 (polar point_1 rect_angle x_rotated)
		)
	)

	;***********************************************************************************************************************************************

	(defun calculate_point_3 (base_point /)
		(cond
			(
				(and width_fixed (null height_fixed))
					(setq rect_point_3 (inters base_point
											   (polar base_point rect_angle 5.0)
											   (polar rect_point_1 rect_angle rect_width)
											   (polar (polar rect_point_1 rect_angle rect_width) (- rect_angle (* 0.5 pi)) 5.0)
											   nil
									   )
					)
			)
			(
				(and (null width_fixed) height_fixed)
					(setq rect_point_3 (inters base_point
											   (polar base_point (+ rect_angle (* 0.5 pi)) 5.0)
											   (polar rect_point_1 (+ rect_angle (* 0.5 pi)) rect_height)
											   (polar (polar rect_point_1 (+ rect_angle (* 0.5 pi)) rect_height) rect_angle 5.0)
											   nil
									   )
					)
			)
			(
				(and width_fixed height_fixed)
					(setq rect_point_3 (polar (polar rect_point_1 rect_angle rect_width) (+ rect_angle (* 0.5 pi)) rect_height))
			)
			(
				t
					(setq rect_point_3 base_point)
			)
		)
	)

	;***********************************************************************************************************************************************

	(defun get_input_data (parsed_function parsed_parameter_list / get_data)
		 (progn
		  		(while
		  				(or
		  					(not (setq get_data (vl-catch-all-apply parsed_function parsed_parameter_list)))
							(= 'vl-catch-all-apply-error (type get_data))
						)
				)
				get_data
		 )
	)

	;***********************************************************************************************************************************************

	(defun write_prompt (parsed_width_fixed parsed_height_fixed /)
		(if (and parsed_width_fixed parsed_height_fixed)
			(prompt "\nПрямоугольник определён. Завершите команду или обнулите один из размеров.")
			(prompt "\nУкажите 2-й угол прямоугольника: ")
		)
	)

	;***********************************************************************************************************************************************


	(setq acad_Object (vlax-get-acad-object)
	  	  document_object (vla-get-ActiveDocument acad_Object)
	      modelSpace_object (vla-get-ModelSpace document_object)
		  vlax_executed (vla-startUndoMark document_object)
		  rect_point_1 (get_input_data 'getpoint (list "\nУкажите 1-й угол прямоугольника: "))
		  rect_angle (get_input_data 'getangle (list rect_point_1 (strcat "\nУкажите угол наклона прямоугольника [" (rnil_to_string rect_angle t) "]: ")))
		  rect_point_3 nil
		  getting_rect_point_3 t
		  width_fixed nil
		  height_fixed nil
		  pline_created nil
		  rect_width nil
		  rect_area nil
		  ucs_X_Angle (if (zerop (setq ucs_X_Angle (angle '(0 0 0) (getvar 'ucsxdir)))) (* 2 pi) ucs_X_Angle)
		  ucs_Y_Angle_normalized (if (minusp (setq ucs_Y_Angle_normalized (- (setq ucs_Y_Angle (angle '(0 0 0) (getvar 'ucsydir))) ucs_X_Angle))) (+ (* 2 pi) ucs_Y_Angle_normalized) ucs_Y_Angle_normalized)
		  symmetry_multiplier (if (equal ucs_Y_Angle_normalized (* 0.5 pi) 1e-6) 1 -1)
	)
	(write_prompt width_fixed height_fixed)
	(while getting_rect_point_3
		(setq error_ocurred (if (vl-catch-all-error-p (setq gread_data (vl-catch-all-apply 'grread (list t 8 0)))) t nil))
    	(cond
			(
				error_ocurred
					(prompt "\nНеверно!")
			)
			(
			   	(= 25 (car gread_data))				;Mouse Right Click
					(if (and width_fixed height_fixed)
							(setq getting_rect_point_3 nil)
							(setq rect_point_3 (get_input_data 'getpoint (list rect_point_1 "\nУкажите 2-й угол прямоугольника: "))
								  getting_rect_point_3 nil
							)
					)
					(calculate_point_3 rect_point_3)
					(calculate_rect rect_point_1 rect_point_3)
					(create_pline rect_point_1 rect_point_2 rect_point_3 rect_point_4 pline_created)
			)
			(
			   	(= 5 (car gread_data))				;Mouse Moving
					(calculate_point_3 (cadr gread_data))
					(calculate_rect rect_point_1 rect_point_3)
					(create_pline rect_point_1 rect_point_2 rect_point_3 rect_point_4 pline_created)
			)
			(
			 	(= 3 (car gread_data))				;Mouse Left Click
					(setq getting_rect_point_3 nil)
					(if getting_rect_point_3
						(setq rect_width (- (car rect_point_3) (car rect_point_1))
							  rect_height (- (cadr rect_point_3) (cadr rect_point_1))
						)
					)
					(calculate_rect rect_point_1 rect_point_3)
					(create_pline rect_point_1 rect_point_2 rect_point_3 rect_point_4 pline_created)
			)
			(
				(or
					(equal gread_data (quote (2 111)))		;O
					(equal gread_data (quote (2 1097)))     ;Щ
				)
					(setq rect_point_1 (get_input_data 'getpoint (list rect_point_1 "\nУкажите точку 1-го угла прямоугольника: ")))
			)
			(
				(or
					(equal gread_data (quote (2 97)))		;A
					(equal gread_data (quote (2 1092)))     ;Ф
				)
					(setq rect_angle (get_input_data 'getangle (list rect_point_1 (strcat "\nУкажите угол наклона прямоугольника [" (rnil_to_string rect_angle t) "]: "))))
					(write_prompt width_fixed height_fixed)
			)
			(
				(or
					(equal gread_data (quote (2 119)))		;W
					(equal gread_data (quote (2 1094)))     ;Ц
				)
					(setq rect_width (get_input_data 'getdist (list rect_point_1 (strcat "\nУкажите длину прямоугольника [" (rnil_to_string rect_width nil) "]: "))))

					(if (zerop rect_width)
						(setq width_fixed nil)
						(setq width_fixed t
							  rect_width (abs rect_width)
						)
					)
					(write_prompt width_fixed height_fixed)
			)
			(
				(or
					(equal gread_data (quote (2 104)))		;H
					(equal gread_data (quote (2 1088)))     ;Р
				)
					(setq rect_height (get_input_data 'getdist (list rect_point_1 (strcat "\nУкажите высоту прямоугольника [" (rnil_to_string rect_height nil) "]: "))))

					(if (zerop rect_height)
						(setq height_fixed nil)
						(setq height_fixed t
							  rect_height (abs rect_height)
						)
					)
					(write_prompt width_fixed height_fixed)
			)
			(
				(or
					(equal gread_data (quote (2 114)))		;R
					(equal gread_data (quote (2 1082)))     ;К
				)
					(if
						(and
							(not (and width_fixed height_fixed))
							(or (null width_fixed) (null height_fixed))
							(or width_fixed height_fixed)
						)
							(progn
								(while (zerop (setq rect_area (get_input_data 'getreal (list (strcat "\nУкажите площадь прямоугольника [" (rnil_to_string rect_area nil) "]: "))))))
								(if width_fixed
									(setq rect_height (/ rect_area rect_width)
										  height_fixed t
									)
								)
								(if height_fixed
									(setq rect_width (/ rect_area rect_height)
										  width_fixed t
									)
								)
								(write_prompt width_fixed height_fixed)
							)
							(progn
								(prompt "\nДля указания площади должна быть задана ширина или высота прямоугольника")
								(write_prompt width_fixed height_fixed)
							)
					)
			)
			(
				(or
					(equal gread_data (quote (2 32)))		;Space
					(equal gread_data (quote (2 13)))     	;Enter
				)
					(if (and width_fixed height_fixed)
						(progn
							(setq getting_rect_point_3 nil)
							(calculate_point_3 rect_point_3)
							(calculate_rect rect_point_1 rect_point_3)
							(create_pline rect_point_1 rect_point_2 rect_point_3 rect_point_4 pline_created)
						)
						(prompt "\nНеверно!")
					)
			)
			(
			 	t
					(prompt "\nНеверно!")
			)
		)
	)
	(vla-EndUndoMark document_object)
	(foreach variable '(Rect_Point_1 Rect_Point_2 Rect_Point_3 Rect_Point_4 pline_object)
		(set variable nil)
	)
	(princ "\nКоманда завершена")
	(princ)
)

;***************************************************************************************************************************************************


Последний раз редактировалось koMon, 08.10.2018 в 11:26. Причина: Динамически изменяется созданный прямоугольник. Добавлены опции по заданию размеров прямоугольника.
koMon вне форума  
 
Непрочитано 09.10.2018, 14:15
#590
kacugu

начинающий инженер-гидротехник
 
Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 887


Autocad 2015 SP2. При использовании PL-VxRdc Autocad предлагает заменить "command" на "command-s". Использую вариант с панелями поэтому нет возможности внести изменения в файл pltools.fas
Цитата:
Невозможно вызвать (command) из *error* без предварительного вызова (*push-error-using-command*).
Рекомендуется преобразовать (command) в (command-s).
kacugu вне форума  
 
Непрочитано 25.01.2019, 16:47
#591
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,664


Цитата:
Сообщение от kacugu Посмотреть сообщение
нет возможности внести изменения в файл pltools.fas
но ведь можно внести изменения в лисп, который в шапке, да и компильнуть его?!

;******************************************
Это их худые черти бермутят воду во пруду,
Это все придумал Черчилль в восемнадцатом году.
Мы про взрывы, про пожары сочиняли ноту ТАСС,
Тут примчались саNETары и зафиксировали нас.
;******************************************

fas так fas)
check_pline.fas
проверка и оптимизация LW полилинии.
Миниатюры
Нажмите на изображение для увеличения
Название: Check_Pline.gif
Просмотров: 50
Размер:	879.1 Кб
ID:	210318  
Вложения
Тип файла: rar Check_Pline.fas.rar (11.9 Кб, 26 просмотров)
koMon вне форума  
 
Непрочитано 15.02.2019, 13:33
1 | #592
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,085


Хочу примазаться к высокому искусству .
Недавно пришлось работать с чертежом, содержащим множество отрезков и полилиний с текстовым типом линий (например ----В---- или -----К----).
В результате всяких манипуляций на многих из них тип линий отображался "вверх ногами", что не есть хорошо. Т.к. команды ENTREV и ENTREVS сами не определяют, нормально ли отображается тип линии и нужен ли реверс, а выделять подлежащих реверсированию вручную неинтересно, написал небольшую модификацию Entrev. Она автоматически определяет отрезки, у которых тип линии "вверх ногами" и только для них выполняет реверс.
Работает только для отрезков - для полилиний из прямолинейных сегментов дуг и сплайнов бессмысленно, т.к. реверсируется весь объект целиком, а в случае поворота на 90 град. и более разные сегменты будут выглядеть по-разному - одни нормально, другие "вверх ногами". И реверсирование полилинии в таком случае для одних сегментов исправит ситуацию, а для других - испортит.
Поэтому в фильтр выбора включены только отрезки, строки для работы с полилиниями и сплайнами закомментированы.

Код:
[Выделить все]
(defun C:Entrev1 ( / int:i e1 ed list:pt *error* )
(setq *error* pltool-err)
  (or *kpblc-activedoc*
       (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object))))
  (vla-endundomark *kpblc-activedoc*)
  (vla-startundomark *kpblc-activedoc*)
    (kpblc-error-save-sysvar
      (list '("osmode")	'("CLAYER") '("QAFLAGS" 0) '("CMDECHO" 0)))
  (princ "\nВыберите Полилинии, Сплайны и Отрезки для реверса  ")
  (setq PICK1 nil
	PICK1 (ssget "_:L" '((0 . "LINE") )))
  (setq int:i 0)
  (while (and PICK1 (setq e1 (ssname PICK1 int:i)))
    (setq list:pt nil)
    (setq ed (entget e1))
    (cond ((and (>= (vla-get-angle (vlax-ename->vla-object (cdar ed))) (* pi 0.7501)) (<= (vla-get-angle (vlax-ename->vla-object (cdar ed))) (* pi 1.501)))
	   (setq e1 (vlax-ename->vla-object e1))
	   (setq list:pt (mapcar '(lambda (x) (vlax-get e1 x))
			   '(StartPoint EndPoint))
		 list:pt  (reverse list:pt))
	   (vla-put-StartPoint e1 (vlax-3d-point (car list:pt)))
	   (vla-put-EndPoint e1 (vlax-3d-point (cadr list:pt)))
	  )
;;;	  ((= (cdr(assoc 0 ed)) "LWPOLYLINE")
;;;	   (lib:plineLW-reverse e1)
;;;          ;(entdel e1)
;;;	   )
;;;	  ((= (cdr(assoc 0 ed)) "SPLINE")(vla-reverse (vlax-ename->vla-object e1))) 
;;;  	  ((= (cdr(assoc 0 ed)) "POLYLINE")
;;;	   (ru-geom-polyline-revers e1))
	  (t nil)
    )	  
    (setq int:i (1+ int:i))
  )
   (if (= (getvar "DWGCODEPAGE") "ANSI_1251")
        (princ (strcat "\nВыполнен реверс " (itoa int:i) " объектов"))
        (princ (strcat "\nThe reverser of " (itoa int:i) " object is executed")))
  (setq PICK1 nil)
(kpblc-error-restore-sysvar)
(vla-endundomark *kpblc-activedoc*)
  (princ))

Последний раз редактировалось kp+, 19.02.2019 в 23:17.
kp+ вне форума  
 
Автор темы   Непрочитано 19.02.2019, 21:30
1 | #593
VVA

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


Цитата:
Сообщение от kp+ Посмотреть сообщение
для полилиний, дуг и сплайнов бессмысленно, т.к. реверсируется весь объект целиком, а в случае поворота на 90 град. и более разные сегменты будут выглядеть по-разному - одни нормально, другие "вверх ногами". И реверсирование полилинии в таком случае для одних сегментов исправит ситуацию, а для других - испортит.
Для полилиний не все так безрадостно. Почитай пост #79 (ссылка дана в #1)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 19.02.2019, 23:25
#594
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,085


Спасибо, прочитал. Действительно работает для полилиний с дуговыми сегментами. А для полилиний с хитровыкрученными линейными сегментами - не очень.
kp+ вне форума  
 
Автор темы   Непрочитано 20.02.2019, 09:08
2 | #595
VVA

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


kp+, По моему, с 2010 Автокада есть другое решение. В описании типа линий появился параметр флаг поворота U ("вертикальный")
Загрузи этот тип линий и попробуй порисовать слева-направо, справа-налево и хитровыкрученными линейными сегментами
Цитата:
*-В1(7 ед),---- В1 ---- В1 (7 ед)
A,2.0,-1.0,["В1",STANDARD,S=1.6,Y=-0.8,U=0.0],-3.1
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 20.02.2019, 16:17
#596
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,085


Хм, интересно. Жаль, что не с 2010 (на котором работаю), а только с 2011. 2010 ругается на неверное определение и сообщает, что "в выражении должны присутствовать R, A, S, X, или Y"

Последний раз редактировалось kp+, 20.02.2019 в 16:37.
kp+ вне форума  
 
Непрочитано 20.02.2019, 17:46
#597
posetitel


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


товарищи, при установке архива с программами для работы с полилиниями загрузил меню, как написано в файле ридми, и у меня все мои менюшки слетели, а главное мое настроенное рабочее пространство я не могу загрузить.
что делать? как так получилось?
posetitel вне форума  
 
Непрочитано 21.02.2019, 09:22
#598
posetitel


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


Прилагаю скриншот
Такого у меня еще не было, если слетает, то что-то одно. а тут вообще все слетело, даже меню только "файл" "окно" и "справка" доступны
Миниатюры
Нажмите на изображение для увеличения
Название: Автокад.jpg
Просмотров: 33
Размер:	153.1 Кб
ID:	211182  
posetitel вне форума  
 
Автор темы   Непрочитано 21.02.2019, 09:57
1 | #599
VVA

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


найди acad.cuix.bak и верни обратно. А вообще надо начинать с версии винды, прав, версии Автокада.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 21.02.2019, 10:14
#600
posetitel


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


Уф, вроде восстановилось
Добавляю меню с помощью _menuload и выбираю файл .mnu (а то файлы .cuix сносят все нафик и опустошают настроенное пространство)
Но теперь в строке меню нет раздела pltools (см скриншот п.1, обвел куда нужно добавить меню работы с полилиниями)
Пытался сделать: сервис - адаптация - интерфейс - перевести, отдельно открыл файл pltools.cuix в правом окне, но в нем когда разворачиваю колонку "меню" ничего не раскрывается, т.е. перенести тупо нечего
(см скриншот п.2)
версия винды 8.1, автокад 2014.
Миниатюры
Нажмите на изображение для увеличения
Название: Настройка менюшек автокада.jpg
Просмотров: 39
Размер:	210.9 Кб
ID:	211200  

Последний раз редактировалось posetitel, 21.02.2019 в 13:12.
posetitel вне форума  
 
Автор темы   Непрочитано 22.02.2019, 19:26
#601
VVA

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


подгрузи через menuload файл pltools.mnu или pltools.mns. После строки "Предыдущая версия" появится стока "Файлы частичной адаптации"

__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 08.04.2019, 08:05
#602
Svetlana2020


 
Регистрация: 06.04.2019
Сообщений: 5
Отправить сообщение для Svetlana2020 с помощью Skype™


Уважаемые профи, подскажите, можно ли сделать, чтобы PLTOOLS прореживала вершины сглаженной полилинии? Файл с деталью прикрепляю. Если убрать сглаживание и выполнить прореживание - все ок, но потом после применения сглаживания деталь принимает причудливые формы (острые углы портятся). Но по задаче требуется оставить сглаживание, проредить вершины, затем полилиния разобьется на отрезки и дуги, и режется на станке. Без дуг решение не подходит.
Вложения
Тип файла: dwg
DWG 2013
list_rez.dwg (119.8 Кб, 18 просмотров)
Svetlana2020 вне форума  
 
Непрочитано 08.04.2019, 08:09
1 | #603
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Цитата:
Сообщение от Svetlana2020 Посмотреть сообщение
Файл с деталью прикрепляю.
Файла нет.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.04.2019, 11:59
#604
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,664


Цитата:
Сообщение от Svetlana2020 Посмотреть сообщение
прореживала вершины сглаженной полилинии
а что было до полилинии, сплайн?
koMon вне форума  
 
Непрочитано 08.04.2019, 12:26
#605
Svetlana2020


 
Регистрация: 06.04.2019
Сообщений: 5
Отправить сообщение для Svetlana2020 с помощью Skype™


Цитата:
Сообщение от koMon Посмотреть сообщение
а что было до полилинии, сплайн?
Абсолютно верно, до полилинии был сплайн, который был преобразован в полилинию. А сплайн пришел из Corel, источника бед, как обычно.

Последний раз редактировалось Svetlana2020, 08.04.2019 в 12:37.
Svetlana2020 вне форума  
 
Непрочитано 08.04.2019, 12:39
#606
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,664


Цитата:
Сообщение от Svetlana2020 Посмотреть сообщение
был сплайн
можно сплайн посмотреть?!
koMon вне форума  
 
Непрочитано 08.04.2019, 12:45
#607
Svetlana2020


 
Регистрация: 06.04.2019
Сообщений: 5
Отправить сообщение для Svetlana2020 с помощью Skype™


Прикрепляю ту же деталь из сплайнов
Вложения
Тип файла: dwg
DWG 2013
list_rez_spline.dwg (34.2 Кб, 16 просмотров)
Svetlana2020 вне форума  
 
Непрочитано 08.04.2019, 13:07
1 | #608
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,664


дуги и отрезки
Вложения
Тип файла: dwg
DWG 2013
list_rez_spline_.dwg (37.6 Кб, 20 просмотров)
koMon вне форума  
 
Непрочитано 08.04.2019, 13:37
#609
Svetlana2020


 
Регистрация: 06.04.2019
Сообщений: 5
Отправить сообщение для Svetlana2020 с помощью Skype™


Цитата:
Сообщение от koMon Посмотреть сообщение
дуги и отрезки
А как сделать так мало дуговых секторов? Секрет в чем?
Svetlana2020 вне форума  
 
Автор темы   Непрочитано 08.04.2019, 14:03
#610
VVA

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


Svetlana2020, 2 варианта
LISP. Как преобразовать выделенные сплайны в полилинии?
и
spline to plyline (flatten)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 08.04.2019, 20:48
#611
Svetlana2020


 
Регистрация: 06.04.2019
Сообщений: 5
Отправить сообщение для Svetlana2020 с помощью Skype™


Цитата:
Сообщение от koMon Посмотреть сообщение
дуги и отрезки
Немного уточнить можно? Конвертировали SP в PLINE чем? Затем прополку вершин делали?
Svetlana2020 вне форума  
 
Непрочитано 09.04.2019, 10:48
#612
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,664


Цитата:
Сообщение от Svetlana2020 Посмотреть сообщение
А как сделать так мало дуговых секторов? Секрет в чем?
нет секрета. написал конвертер сплайна в дуги и линии. на лиспе
Цитата:
Сообщение от Svetlana2020 Посмотреть сообщение
Немного уточнить можно? Конвертировали SP в PLINE чем? Затем прополку вершин делали?
никакой прополки, см. выше. да и едва ли какая прополка поможет с таким безобразием, которое получается штатно при конвертации сплайна в плинию.
koMon вне форума  
 
Непрочитано 29.05.2019, 09:59
#613
yuger_ser


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


Всем привет

PLTools многократно облегчает работу. Есть идея по созданию команды которая может быть очень полезна. Смысл в следующем:

Объединить в одну команду ConvTo2d + PL-JOIN + _Wipeout ( по контуру полилинии ) + срытие маскировки на задний план + объедение всего объекта в блок (желательно с вводом имени блока).

Господа эксперты, как такое возможно сделать?
yuger_ser вне форума  
 
Непрочитано 29.05.2019, 14:08
#614
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,085


Offtop:
Цитата:
Сообщение от yuger_ser Посмотреть сообщение
Объединить в одну команду ConvTo2d + PL-JOIN + _Wipeout ( по контуру полилинии ) + срытие маскировки на задний план + объедение всего объекта в блок (желательно с вводом имени блока).

Господа эксперты, как такое возможно сделать?
Не эксперт, но отвечу: можно с помощью макроса, можно на LISP; теоретически можно на VBA или с помощью "тяжелой артиллерии" типа .net или ARX (но тогда без PLTOOLS, которые изначально на LISP). А что Вы уже сделали в этом направлении, что получилось, что не получается?
kp+ вне форума  
 
Непрочитано 30.05.2019, 09:06
#615
yuger_ser


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


Цитата:
Сообщение от kp+ Посмотреть сообщение
Offtop:
Не эксперт, но отвечу: можно с помощью макроса, можно на LISP; теоретически можно на VBA или с помощью "тяжелой артиллерии" типа .net или ARX (но тогда без PLTOOLS, которые изначально на LISP). А что Вы уже сделали в этом направлении, что получилось, что не получается?
Пробовал создать макрос, но наткнулся на ряд проблем. Команда ConvTo2D криво преобразовывает примитывы в полилинии, либо не замкнутый контур, либо вообще обрезает дугу. Есть идея заменить команду на создание области при помощи команды КПОЛИ и далее взорвать ее и PL-JOIN. Еще одна проблема это создание макроса для выбора объектов. Существует ли подробный макрос для команды _qselect?
yuger_ser вне форума  
 
Непрочитано 30.05.2019, 15:47
#616
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,085


Цитата:
Сообщение от yuger_ser Посмотреть сообщение
Пробовал создать макрос
В студию.

Цитата:
Сообщение от yuger_ser Посмотреть сообщение
Есть идея заменить команду на создание области при помощи команды КПОЛИ и далее взорвать ее и PL-JOIN
Месье знает толк... Лучше тогда использовать стандартную _pedit с соответствующими опциями. Там можно задать и допуск для объединения, и замыкание результирующей полилинии.

Цитата:
Сообщение от yuger_ser Посмотреть сообщение
Еще одна проблема это создание макроса для выбора объектов. Существует ли подробный макрос для команды _qselect?
Не знаю, по каким признакам Вы собираетесь выбирать объекты, но есть выбор с помощью фильтра (опция 'filter). Там, правда, выскакивает окошко, но настройки фильтра можно сохранить заранее.
kp+ вне форума  
 
Непрочитано 30.05.2019, 16:24
#617
yuger_ser


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


Вот такой макрос получился. Правда все ровно пару кликов приходится сделать вначале. Также его можно допилить созданием блока в конце.

^C^C-слой;с;Редактор1;;_rectang;\\-слой;с;Редактор2;;КПОЛИ;\;(sssetfirst nil (ssget "_x" '((0 . "LWPOLYLINE")(8 . "Редактор1"))));_.erase;_.erase;\;(sssetfirst nil (ssget "_x" '((0 . "REGION")(8 . "Редактор2"))));слойотд;расчленить;все;_ai_selall;CONVTO2D;_ai_selall;pl-join;_ai_selall;_wipeout;п;д;(sssetfirst nil (ssget "_x" '((0 . "WIPEOUT")(8 . "Редактор2"))));_draworder;А;(command "_.-layer" "_m" "0" "");_laycur;все;;СЛОЙОТДОТМ;(command "_.-layer" "_m" "0" "");^C^C(command "слойудал" "И" "редактор2" "" "д");(command "слойудал" "И" "редактор1" "" "д");

С простыми объектами работает на ура. С объектами посложнее ругается на замкнутость полилинии. С сложными объектами также ругается на замкнутость и создает много ненужных областей и примитивов которые необходимо чистить.
yuger_ser вне форума  
 
Непрочитано 31.05.2019, 10:28
#618
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,085


Цитата:
Сообщение от yuger_ser Посмотреть сообщение
Вот такой макрос получился
Месье действительно знает толк... Что мешало написать сразу все на LISP'е?
kp+ вне форума  
 
Непрочитано 31.05.2019, 11:58
#619
yuger_ser


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


Цитата:
Сообщение от kp+ Посмотреть сообщение
Месье действительно знает толк... Что мешало написать сразу все на LISP'е?
Мешает отсутствие опыта написания LISP'ов. Посоветуйте полезный справочник или литературу.
yuger_ser вне форума  
 
Непрочитано 31.05.2019, 12:28
1 | #620
Сергей812


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


Н.Н.Полещук. "AutoLISP и Visual LISP в среде AutoCAD" - академическая справка по сути, не смотря на год - актуальна до сих пор)
А потом поисковик. Нет такого ресурса - чтобы открыли и сразу готовые решения в виде кода получили, все собирается из справки, форумов и работы головой.
Сергей812 вне форума  
 
Непрочитано 31.05.2019, 13:20
#621
Семёныч


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


Цитата:
Сообщение от yuger_ser Посмотреть сообщение
Есть идея по созданию команды
Эта идея не для этой темы. А поводу макроса - за такой макрос даже Vova не взялся бы.
Семёныч вне форума  
 
Непрочитано 31.05.2019, 13:31
#622
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,085


Цитата:
Сообщение от yuger_ser Посмотреть сообщение
Мешает отсутствие опыта написания LISP'ов
Так Вы уже написали 80% своего макроса на ЛИСПе. Для начала можно переписать оставшиеся "макросные" вызовы команд через функции command или vl-cmdf (синтаксис мало отличается от макросного) и объединить все в одну функцию. Хотя бы будет читаемо
А там уже будет о чем поговорить...в отдельной теме.
kp+ вне форума  
 
Непрочитано 12.08.2019, 09:39
#623
Cfytrr

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


Авторы, можно ли добавить функцию:
От указанной точки на полилинии (вершины) отложить в указанную сторону расстояние заданной длины (по полилинии) и в этом месте на полилинии поставить точку (только одну, а не серию)?
__________________
...переменная FILEDIA создана для привлечения пользователей к форумам.
Cfytrr вне форума  
 
Непрочитано 12.08.2019, 14:34
1 | #624
wepp

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


Цитата:
Сообщение от Cfytrr Посмотреть сообщение
отложить в указанную сторону расстояние заданной длины (по полилинии) и в этом месте на полилинии поставить точку
Попробуй делин.
wepp вне форума  
 
Непрочитано 12.08.2019, 14:46
#625
Cfytrr

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


Спасибо, то что нужно
__________________
...переменная FILEDIA создана для привлечения пользователей к форумам.
Cfytrr вне форума  
 
Непрочитано 08.03.2020, 11:59
#626
Ramil777


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


Доброго времени суток!
Помогите, пожалуйста, разобраться с проблемой:

1 Вроде бы файлы в папку, прописанную в путе доступа к вспомогательным файлам
(Сервис->Настройка->Файлы->Путь доступа к вспомогательным файлам)

2 командой _menuload подгрузил файл pltools.mnu


При запуске команды пишет: "Неизвестная команда"...
Ramil777 вне форума  
 
Непрочитано 09.03.2020, 01:28
1 | 1 #627
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Еще надо там, где Сервис -> Приложения, нажать на портфель и добавить этот файл в автозагрузку
skkkk вне форума  
 
Непрочитано 29.01.2021, 12:24
#628
posetitel


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


товарищи, пытаюсь загрузить приложение, но не получается.
прописал путь к папке pltools во вспомогательных файлах
загрузил через _menuload файл pltools.cuix, в ленте появилась вкладка pltools, но она не открывается.
пытаюсь загрузить через _menuload файлы pltools.mnu,pltools.mnx, пишет "в разрешении на запись отказано. не удалось создать c:\program files\autodesk\autocad 2020\pltools\pltools.cuix"
posetitel вне форума  
 
Непрочитано 29.01.2021, 12:56
1 | #629
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,772


Помести в другой каталог, куда имеешь право на запись.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 29.01.2021, 13:16
#630
Петр-и-Алекс


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


На ген планах часто встречаются трассы, состоящие из отдельных line, отстоящих друг от друга на некоторое расстояние, но выглядящими в целом как единая полилиния "штриховая".
Хотелось бы функцию, объединяющую такие line в полилинию. Притом мне лень предварительно выбирать все line, хотелось бы указать одну, а комп пусть сам найдет ее продолжающие и присоединит их.
В этой ветке 32 страницы, это очень много, что бы последовательно искать решение. А в титульном перечне такой функции не обнаружил.
Никто не помнит, не решена ли эта задача в теле данной ветки? или может быть в другой какой ни будь...
Петр-и-Алекс вне форума  
 
Непрочитано 29.01.2021, 13:31
#631
Nike

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


Петр-и-Алекс, PL-CSE с допуском.
Nike вне форума  
 
Непрочитано 31.01.2021, 18:38
#632
Петр-и-Алекс


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


Спасибо! посмотрим
Петр-и-Алекс вне форума  
 
Непрочитано 02.02.2021, 08:38
#633
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Приветствую, коллеги.
На досуге переоформил немного иконки pl-tools, что бы на темной теме смотрелось юзабельней.
з.ы. Имена большинства иконок изменены относительно оригинальных.
Миниатюры
Нажмите на изображение для увеличения
Название: pl-tools icons dark.PNG
Просмотров: 192
Размер:	3.6 Кб
ID:	234065  
Вложения
Тип файла: rar pl-tools icon dark.rar (4.9 Кб, 103 просмотров)
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 30.07.2021, 01:43
#634
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,029


Хорошо бы для ConvTo2d, ConvTo3d и для других команд, в которых заменяются оригиналы на другое, сделать сохранение-передачу полезной информации из оригиналов. Хотя бы XData.
Но хорошо бы и для Object Data из Map/Civil, и Property Sets из Civil, Architecture, MEP. Возможна ли вне этих вертикальных приложений передача Object Data и Property Sets - не знаю, увы.
Но и в вертикальных приложениях многие пользуются PlTools. Или, наоборот, не могут воспользоваться.

Кстати, сейчас при преобразованиях теряются Гиперссылки, а они как раз есть XData. И еще есть некие пользовательские Примечания, но не знаю, что они суть внутри. Тоже теряются.
__________________
количество моих сообщений не говорит о знании Автокада

Последний раз редактировалось АлексЮстасу, 31.07.2021 в 19:40.
АлексЮстасу вне форума  
 
Непрочитано 04.08.2021, 15:22
#635
posetitel


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


товарищи, команды PL-CW и PL-CCW почему-то не работают на полилиниях с изломами, а на прямых полилиниях работают как-то через раз. не могу понять в чем дело.
суть проблемы: сделал полилинию с буквой через определенный интервал (для обозначения сетей на плане), в некоторых местах буква получается вверх ногами, хочу с помощью лиспа перевернуть этот участок полилинии, но ничего не выходит. Генерацию типа линии, как указано в шапке, включал, но не помогает.
в чем может быть дело?
файл прилагаю, линия вот от сюда https://dwg.ru/dnl/13129
Вложения
Тип файла: dwg
DWG 2013
На форум.dwg (46.2 Кб, 16 просмотров)
posetitel вне форума  
 
Непрочитано 06.08.2021, 06:26
#636
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


posetitel, дело не в командах, они то работают, а вашем типе линии.
В этом же файле поменял тип линии, все ворочается как надо.
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Непрочитано 06.08.2021, 08:37
#637
posetitel


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


Vladimir_Sergeevich, а в чем может быть проблема с линией?
Как ее можно перечертить, чтобы она поворачивалась?
posetitel вне форума  
 
Непрочитано 06.08.2021, 10:00
#638
AlexCondor

инженер
 
Регистрация: 03.08.2007
Сообщений: 1,324


posetitel, Попробуйте изменить описание и перезагрузить линию:
Код:
[Выделить все]
*електрокабель,   ----W----W----W----W----W----W--
A,5,-0.5,["W",STANDARD,S=0.7,R=0.0,X=0,Y=-0.35],-1
Удалить U=0. Должно сработать.

Последний раз редактировалось AlexCondor, 06.08.2021 в 10:09.
AlexCondor вне форума  
 
Непрочитано 06.08.2021, 10:54
#639
posetitel


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


AlexCondor, сделал, не помогает.
меняется направление буквы на вертикальном участке, на горизонтальном все остается как было (буквы смещаются, т.е. что-то с линией на горизонтальном участке происходит, но не поворачиваются)
Вложения
Тип файла: dwg
DWG 2013
На форум 2.dwg (47.2 Кб, 13 просмотров)
posetitel вне форума  
 
Непрочитано 06.08.2021, 11:28
#640
AlexCondor

инженер
 
Регистрация: 03.08.2007
Сообщений: 1,324


posetitel, Не знаю, у меня работает.
Вложения
Тип файла: zip електрокабель.zip (17.9 Кб, 15 просмотров)
AlexCondor вне форума  
 
Непрочитано 06.08.2021, 11:32
#641
posetitel


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


в Вашем файле и у меня работает) чудеса...
posetitel вне форума  
 
Непрочитано 02.03.2022, 12:13
#642
Misha_E


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


Добрый день. подскажите, пожалуйста, можно ли как-нибудь изменить LISP PL-DIVAll, чтобы расстояния проставлялись произвольной длины в заданных пределах (т.е. , к примеру программа спрашивает от какого мин и макс расстояния и сама делит линию на произвольную длину вписывающуюся в эти мин и макс. расстояния)? Спасибо.
Misha_E вне форума  
 
Непрочитано 04.09.2023, 14:43
#643
Ingpro


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


Небольшая неточность в описании команд PLTOOLS пост #1

Эти строки
PL-A2L -Замена линейного сегмента в полилинии дуговым сегментом.
PL-L2A -Замена дугового сегмента в полилинии линейным сегментом.
Надо читать так:
PL-L2A -Замена линейного сегмента в полилинии дуговым сегментом.
PL-A2L -Замена дугового сегмента в полилинии линейным сегментом.

Команда: PL-A2L
Выберите нужный дуговой сегмент в полилинии

Команда: PL-L2A
Выберите нужный линейный сегмент в полилинии

Возможно ли для замкнутой полилинии построить среднюю полилинию, выбрав этот контур, а контур удалить?
Миниатюры
Нажмите на изображение для увеличения
Название: Image 8.png
Просмотров: 44
Размер:	7.4 Кб
ID:	258479  

Последний раз редактировалось Ingpro, 04.09.2023 в 14:49.
Ingpro вне форума  
 
Непрочитано 04.09.2023, 16:12
#644
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,085


Цитата:
Сообщение от Ingpro Посмотреть сообщение
Возможно ли для замкнутой полилинии построить среднюю полилинию, выбрав этот контур, а контур удалить?
Только надо сначала одну замкнутую полилинию превратить в две незамкнутых, для чего:
- подорвать (_explode);
- удалить крайние сегменты;
- пересобрать оставшиеся обломки с помощью pl-join.
kp+ вне форума  
 
Непрочитано 04.09.2023, 16:49
#645
Ingpro


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


Цитата:
Сообщение от kp+ Посмотреть сообщение
Только надо сначала одну замкнутую полилинию превратить в две незамкнутых, для чего:
- подорвать (_explode);
- удалить крайние сегменты;
- пересобрать оставшиеся обломки с помощью pl-join.
Объектов больше сотни...
Ingpro вне форума  
 
Непрочитано 04.09.2023, 17:47
#646
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,085


Можно, конечно, худо-бедно объяснить Акаду вышеописанные действия...на лиспе, например.
Но если это разовая работа, не вижу смысла.
Другое дело, если таких файлов, где "объектов больше сотни..." тоже больше сотни...
kp+ вне форума  
 
Непрочитано 07.09.2023, 09:47
#647
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от kp+ Посмотреть сообщение
Только надо сначала одну замкнутую полилинию превратить в две незамкнутых, для чего:
- подорвать (_explode);
- удалить крайние сегменты;
- пересобрать оставшиеся обломки с помощью pl-join.
Не проще ли для этого использовать команду _TRIM с опцией _ALL, раз уж о ручном варианте речь?
skkkk вне форума  
 
Непрочитано 18.09.2023, 11:16
#648
wepp

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


Цитата:
Сообщение от Ingpro Посмотреть сообщение
Возможно ли для замкнутой полилинии построить среднюю полилинию, выбрав этот контур, а контур удалить?
Если объекты как на картинке, то напрашивается разрушение и удаление линий меньше определённой длины (ширины объекта) с последующим объединением скопом на все объекты.
wepp вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Новые команды для работы с полилинией

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

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