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

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

Удаление примитивов через интервал...

Ответ
Поиск в этой теме
Непрочитано 21.10.2011, 13:18 #1
Удаление примитивов через интервал...
Pavel_GP
 
Инженер-гидрограф
 
г.г. Ленинград
Регистрация: 15.09.2011
Сообщений: 170

Здравствуйте.
Подскажите плз, как удалить примитивы через "примитив" . Подскажите макрос или код.
Пример: Есть группа отрезков, необходимо удалить 5 отрезков через отрезок.
Пример прикладываю.
Красным - отрезки которые нужно удалить. Этих отрезков множество (в ручную долго удалять).
Спс.

Миниатюры
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 71
Размер:	11.4 Кб
ID:	68236  

Просмотров: 3657
 
Непрочитано 21.10.2011, 14:18
#2
Дима_

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


Удали все и массивом сделай новый
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 21.10.2011, 14:21
#3
pan

добрый человек
 
Регистрация: 23.02.2004
Глушь
Сообщений: 971


Удалить все отрезки, а вместо них использовать примерно такой тип линий:
Код:
[Выделить все]
*ОГРАЖДЕНИЕ,Ограждение  |__|__|__|__|__|__|
A,0,[TRACK1,ltypeshp.shx,s=0.5,r=0,x=0,y=0.5],5.0
__________________
Правильно сформулированный вопрос содержит 90% ответа.
pan вне форума  
 
Автор темы   Непрочитано 21.10.2011, 14:36
#4
Pavel_GP

Инженер-гидрограф
 
Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Удали все и массивом сделай новый
Расстояние между отрезками может быть разным (не обязательно одинаковым) - массивом я бы сам сделал и не обращался за советом =). Поэтому необходимо удалить отрезки только так.


Цитата:
Сообщение от pan Посмотреть сообщение
Удалить все отрезки, а вместо них использовать примерно такой тип линий:
У меня не забор. Это отрезки - соединять их нельзя.

ПыСы Жду еще советов.
Спс.

Читаю Н.Полещук, предполагаю тут можно воспользоваться функцией ssadd (добавить примитив в набор) и ssdel или ssnamex (удалить примитив из набора или извлечь по порядковому номеру). Как эти функции совместить я пока не знаю (может даже не они совсем тут применимы).
Спс

Последний раз редактировалось Pavel_GP, 21.10.2011 в 15:16. Причина: удалил "Жду решений Гуру- Lisp"
Pavel_GP вне форума  
 
Непрочитано 21.10.2011, 14:59
#5
Дима_

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


Цитата:
Сообщение от Pavel_GP Посмотреть сообщение
Жду решений Гуру- Lisp
Распорядился вроде?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 21.10.2011, 15:08
#6
Pavel_GP

Инженер-гидрограф
 
Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Распорядился вроде?
Ничего грубого своей фразой я не хотел сказать и некого напрячь.
Pavel_GP вне форума  
 
Непрочитано 21.10.2011, 15:52
#7
Дима_

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


Ладно забей (показалось):
Код:
[Выделить все]
 (vl-load-com)
(defun c:jump-delete()
  ((lambda (pt1 adoc frec)
     ((lambda (pt2)
        (vla-startundomark adoc)
        (frec nil (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget "_F" (list pt1 pt2))))))
        (vla-endundomark adoc))
      (getpoint pt1 "\nКонец ")))
   (getpoint "\nНачало ")
   (vla-get-ActiveDocument(vlax-get-acad-object))
   (lambda (x lst)
     (if lst
        (progn (if x (entdel (car lst)))
               (frec (not x) (cdr lst)))))))
Удаляет через 1 примитив пересекающий линии (первый оставляет).
p.s. запуск jump-delete
p.p.s - чуть исправил
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 21.10.2011 в 16:07.
Дима_ вне форума  
 
Непрочитано 21.10.2011, 16:01
1 | #8
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Ну с Дима_ тягаться тяжело, но вот еще вариант
Код:
[Выделить все]
 
; Пример вызова: (del-obj 1 5) - один (начиная с первого) оставить пять удалить
(defun del-obj(save_count del_count / )
  (vl-load-com)
  ((lambda(first_point actdoc)
     (vla-startundomark actdoc)
     (if (and first_point
              (not (vl-catch-all-error-p first_point))
              )
       ((lambda(end_point)
          (if (and end_point
                   (not (vl-catch-all-error-p end_point))
                   )
            ((lambda(nbr i sum)
               (if nbr
                 (foreach item (vl-remove-if 'listp (mapcar 'cadr (ssnamex nbr)))
                   (if (> i save_count)
                     (entdel item)
                     )
                   (setq i (1+ i))
                   (if (> i sum)
                     (setq i 1)
                     )
                   )
                 )
               )
              (ssget "_F" (list first_point end_point))
              1
               (+ save_count del_count)
              )
            )
          )
         (vl-catch-all-apply 'getpoint
                             (list first_point "\nУкажите последнюю точку участка разряжения: ")
                             )
         )
       )
     (vla-endundomark actdoc)
     )
    (vl-catch-all-apply 'getpoint
                        (list "\nУкажите первую точку участка разряжения: ")
                        )
    (vla-get-activedocument (vlax-get-acad-object))
    )
  (princ)
  ); end c:del-obj
__________________
cadtools

Последний раз редактировалось TararykovDG, 21.10.2011 в 16:15.
TararykovDG вне форума  
 
Непрочитано 21.10.2011, 16:29
1 | #9
Дима_

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


Ну я дал - пока не увидел что TararykovDG сделал и не понял, что может и не через 1 "прыгать":
Цитата:
как удалить примитивы через "примитив"
и все тут (а "красными -отрезки которые нужно удалить"- отдельная история - дальтоник я)
Код:
[Выделить все]
 (vl-load-com)
(defun jump-delete(jump)
  ((lambda (pt1 adoc frec)
     ((lambda (pt2)
        (vla-startundomark adoc)
        (frec 0 (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget "_F" (list pt1 pt2))))))
        (vla-endundomark adoc))
      (getpoint pt1 "\nКонец ")))
   (getpoint "\nНачало ")
   (vla-get-ActiveDocument(vlax-get-acad-object))
   (lambda (x lst)
     (if lst
        (if (zerop x)
            (frec jump (cdr lst))
            (progn (entdel (car lst))
                   (frec (1- x) (cdr lst))))))))
Запускать (jump-delete X), где X - через сколько прыгать (1 оставляет).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 21.10.2011, 17:51
#10
Pavel_GP

Инженер-гидрограф
 
Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170


Дима_ TararykovDG
ВЫ гении.
Спс огромное
Pavel_GP вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Удаление примитивов через интервал...



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Печать нестандартных размеров листа с помощью плоттера, подключенного через маршрутизатор _Nikita_ Прочее. Программное обеспечение 3 02.09.2010 10:25
AutoCAD 2011 при копировании не вставляет в другой чертеж Maxxwell AutoCAD 7 07.05.2010 14:44