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

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

Выбор по углу

Ответ
Поиск в этой теме
Непрочитано 03.10.2007, 11:18 #1
Выбор по углу
Neznayka
 
Регистрация: 24.03.2005
Сообщений: 320

Чертеж есть куча отрезков. Мне надо выбрать только те которые имеют угол ~89. Все бы ничего, но быстрый выбор выберет только те отрезки, которым задана точность в 8 знаков после запятой. А мне необходимо выбрать только те отрезки, которые расположены в интервале 88.9-89.1.
Спасибо
Где то была тема. Что кто-то жаловался, что оси не перпендикулярны, возможно те решения помогут мне.
Просмотров: 1877
 
Непрочитано 03.10.2007, 11:39 Re: Выбор по углу
#2
zenon

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


Цитата:
Сообщение от Neznayka
Чертеж есть куча отрезков. Мне надо выбрать только те которые имеют угол ~89. Все бы ничего, но быстрый выбор выберет только те отрезки, которым задана точность в 8 знаков после запятой. А мне необходимо выбрать только те отрезки, которые расположены в интервале 88.9-89.1.
Спасибо
Где то была тема. Что кто-то жаловался, что оси не перпендикулярны, возможно те решения помогут мне.
2 раза быстрый выбор, 1 раз выбрать объекты с углом > 88.9, 2 раз все выбрать объекты с углом < 89.1, ескейп не баловаться!!!
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 03.10.2007, 12:03
#3
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(defun test (ang prec / selset tmp)
            ;|
*    Выделение отрезков с углом с заданной точностью.
*    Параметры вызова:
	ang	угол, с которым сравнивается, градусов. nil Недопустим.
	prec	точность совпадения угла налона, градусов. nil -> 0.
*    Примеры вызова:
(test 90 0)
(test 90 0.1)
|;
  (vl-load-com)
  (if (and ang (setq selset (ssget '((0 . "LINE")))))
    (progn
      (setq prec (cond (prec (/ (* pi (abs prec)) 180.))
                       (t 0.)
                       ) ;_ end of cond
            ang  (/ (* pi ang) 180.)
            ) ;_ end of setq
      (foreach item (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
        (setq tmp (vla-get-angle (vlax-ename->vla-object item)))
        (if (and (not (equal tmp ang prec))
                 (not (equal tmp (+ ang pi) prec))
                 ) ;_ end of and
          (ssdel item selset)
          ) ;_ end of if
        ) ;_ end of foreach
      (sssetfirst selset selset)
      ) ;_ end of progn
    ) ;_ end of if
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.10.2007, 13:39
#4
Neznayka


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


Команда: (test)
; ошибка: В функции *error* возникла ошибка:Настройка переменной AutoCAD
отвергнута: "CMDECHO" nil
у меня 2008 рус,
было бы не трудно автоматизировать, но если жалко времени я могу советом zenonА воспользоваться (обидно мог бы сам догадаться)
ОГРОМНОЕ СПАСИБО ВАМ.
Neznayka вне форума  
 
Непрочитано 03.10.2007, 13:58
#5
Кулик Алексей aka kpblc
Moderator

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


Ээээ... Еще раз читаем комментарии:
Цитата:
* Примеры вызова:
(test 90 0)
(test 90 0.1)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.10.2007, 15:07
#6
Neznayka


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


что сказать стыдно
буду читать в другой раз, просто я всегда лиспы загружал тупо перетаскивая с тотола в автокад, и вот в командной строке появилось слово для запуска test, я и растерялся.
лисп еще и зеркальные отрезки выбирает, впрочем, мне так и лучше.
СПАСИБО.
Neznayka вне форума  
 
Непрочитано 03.10.2007, 15:27
#7
Кулик Алексей aka kpblc
Moderator

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


Если надо снять "зеркальность", достаточно поставить ";" в самом начале строки
Код:
[Выделить все]
(not (equal tmp (+ ang pi) prec))
Кривовато получится. Еще один вариант лиспа:
Код:
[Выделить все]
(defun test2 (ang prec mirr / selset tmp)
             ;|
*    Выделение отрезков с углом с заданной точностью.
*    Параметры вызова:
        ang    угол, с которым сравнивается, градусов. nil Недопустим.
        prec   точность совпадения угла налона, градусов. nil -> 0.
        mirr   учитывать (t) или нет (nil) отрезки, отрисованные "в обратном"
               направлении
*    Примеры вызова:
(test2 90 0 t)
(test2 90 0.1 nil)
|;
  (vl-load-com)
  (if (and ang (setq selset (ssget '((0 . "LINE")))))
    (progn
      (setq prec (cond (prec (/ (* pi (abs prec)) 180.))
                       (t 0.)
                       ) ;_ end of cond
            ang  (/ (* pi ang) 180.)
            ) ;_ end of setq
      (foreach item (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
        (setq tmp (vla-get-angle (vlax-ename->vla-object item)))
        (if (and (not (equal tmp ang prec))
                 (if mirr
                   (not (equal tmp (+ ang pi) prec))
                   t
                   ) ;_ end of if
                 ) ;_ end of and
          (ssdel item selset)
          ) ;_ end of if
        ) ;_ end of foreach
      (sssetfirst selset selset)
      ) ;_ end of progn
    ) ;_ end of if
  (princ)
  ) ;_ end of defun
Этот код я практически не тестировал.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Выбор по углу

Опции темы Поиск в этой теме
Поиск в этой теме:

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