Как выбрать полилинии по определенным значениям высот (Elevation)? - Страница 2
Реклама i
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как выбрать полилинии по определенным значениям высот (Elevation)?

Как выбрать полилинии по определенным значениям высот (Elevation)?

Ответ
Поиск в этой теме
Непрочитано 10.06.2013, 17:31
Как выбрать полилинии по определенным значениям высот (Elevation)?
mankurt
 
геодезист
 
Москва
Регистрация: 25.10.2011
Сообщений: 45

Есть куча горизонталей-полилиний - утолщенных, основных, дополнительных, построенных через 0.25м. Они на своей высоте - в elevation забиты значения. Надо вычленить только дополнительные, то есть оканчивающиеся на .25 и .75. Фильтром не получается с помощью*. Может есть какое-то несложное решение без лиспов?
Спасибо.
Просмотров: 5969
 
Непрочитано 13.06.2013, 11:06
#21
skkkk


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


Еще вопрос: если введено (или выбрано) 2 (четные), а также 5, то должны ли выбираться ХХ0.00?
Думаю, нет.

Последний раз редактировалось skkkk, 13.06.2013 в 11:11.
skkkk вне форума  
 
Непрочитано 13.06.2013, 11:11
#22
Krovlaf

геология, геодезия
 
Регистрация: 29.05.2009
Хабаровск
Сообщений: 185


Да, "нули" тоже четные.
Krovlaf вне форума  
 
Непрочитано 13.06.2013, 11:24
#23
skkkk


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


Krovlaf, просьба продумать хорошенечко алгоритм и написать подробнее (вводим 2 -> выбирается то-то и то-то). Дабы переделывать несколько раз не приходилось.

Тут похоже нужен будет определенный порядок работы, вроде такого:
К примеру, у нас все горизонтали имеют вес 0.25
1. Выбираем четные, присваиваем вес, к примеру 0.30
2. Выбираем кратные 5-ти - вес 0.40
3. Выбираем "десятки" - вес 0.50
4. Выбираем 0.5 - вес 0.20
5. Выбираем 0.25/0.75 - вес 0.18
Остальные (целые, судя по всему, оканчивающиеся на 1.00, 3.00, 7.00 и 9.00) остаются 0.25
Так или нет?
skkkk вне форума  
 
Непрочитано 13.06.2013, 11:52
#24
Krovlaf

геология, геодезия
 
Регистрация: 29.05.2009
Хабаровск
Сообщений: 185


Я считаю, что в посте 19, Вами сформулирован предельно точный алгоритм выбора горизонталей (если у следящих за веткой есть дополнения/уточнения/поправки - поправьте):
Цитата:
ХХХ.00(целые)
ХХ2.00(чётные ""и нулевые"")
ХХ5.00(кратные 5, кроме целых)
ХХХ.50(кратные 0.5, кроме целых, четных и ХХ5.00)
ХХХ.Х5(кратные 0.25 кроме ХХХ.50 и ХХХ.00).
Либо, предложить ему вводить цифры с клавиатуры, но допустимыми оставить только значения 0, 2, 5, 0.25
Цель лиспа - выбор. Что делать дальше с выбранными горизонталями - дело пользователя (разбросать по слоям, присвоить вес, цвет, тип линии или другое свойство) иногда требуется сделать жирными только четные, иногда только "0" и "5", иногда раскидать по разным слоям основные и вспомогательные (0.5, 0.25) горизонтали, вариантов - масса
Krovlaf вне форума  
 
Непрочитано 13.06.2013, 12:24
#25
skkkk


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


Я ошибся там чуть:
Цитата:
ХХХ.00(целые)
ХХ2.00(чётные ""и нулевые"")
ХХ5.00(кратные 5, кроме целых)
ХХХ.50(кратные 0.5, кроме целых, четных и ХХ5.00)
ХХХ.Х5(кратные 0.25 кроме ХХХ.50 и ХХХ.00).
Вместо красного хотел написать (подразумевал):
ХХ0.00(целые десятки).
Но я так полагаю, что нужна возможность отдельно выбирать и целые, и целые десятки, т е. в итоге список вариантов должен быть таким:
ХХХ.00 (целые) 'или вводим цифру 1
ХХ2.00 (чётные, в том числе десятки ХХ0.00) 'или вводим цифру 2
ХХ5.00 (кратные 5, кроме десятков) - или включая десятки - уточнить 'или вводим цифру 5
ХХ0.00 (десятки) 'или вводим 10
ХХХ.50 (кратные 0.5, кроме целых, четных и ХХ5.00) 'или вводим .5
ХХХ.Х5 (кратные 0.25 кроме ХХХ.50 и ХХХ.00) 'или вводим .25

Постараюсь по мере возможности набросать код.
__________________________________________
Добавлено 1:
Вот, собственно, набросал:
Код:
[Выделить все]
  (defun C:TEST ( / kr ss1 ss2 n oldDIMZIN)
(vl-load-com)
    (defun *error*(msg)
        (if oldDIMZIN (setvar "DIMZIN" oldDIMZIN))
    )
    (sssetfirst nil nil)
    (setvar "DIMZIN" 0)
    (while (and
            (/= kr "1")
            (/= kr "2")
            (/= kr "5")
            (/= kr "10")
            (/= kr ".5")
            (/= kr ".25")
           )
        (princ "\nНеверный ввод")
        (initget 128 "ХХХ.00 ХХ2.00 ХХ5.00 ХХ0.00 ХХХ.50 ХХХ.Х5_1 2 5 10 .5 .25")
        (setq kr (getkword "\nУкажите или введите критерий выбора: [ХХХ.00 целые (1)/ХХ2.00 целые четные (2)/ХХ5.00 пятерки (5)/ХХ0.00 десятки (10)/ХХХ.50 половинные (.5)/ХХХ.Х5 четвертные (.25)]"))
    ) ;while
    (setq ss1 (ssget (list (cons 0 "LWPOLYLINE")))
          ss2 (ssadd)
          n 0
          oldDIMZIN (getvar "DIMZIN")
    ) ;setq
    (cond 
      ((= kr "1")
            (repeat (sslength ss1)
                (if (wcmatch (rtos (vla-get-Elevation (vlax-ename->vla-object (ssname ss1 n))) 2 2) "*.00")
                    (ssadd (ssname ss1 n) ss2)
                )
                (setq n (1+ n))
            )
      ) ;kr "1"    
      ((= kr "2")
            (repeat (sslength ss1)
                (if (or
                        (wcmatch (rtos (vla-get-Elevation (vlax-ename->vla-object (ssname ss1 n))) 2 2) "*0.00")
                        (wcmatch (rtos (vla-get-Elevation (vlax-ename->vla-object (ssname ss1 n))) 2 2) "*2.00")
                        (wcmatch (rtos (vla-get-Elevation (vlax-ename->vla-object (ssname ss1 n))) 2 2) "*4.00")
                        (wcmatch (rtos (vla-get-Elevation (vlax-ename->vla-object (ssname ss1 n))) 2 2) "*6.00")
                        (wcmatch (rtos (vla-get-Elevation (vlax-ename->vla-object (ssname ss1 n))) 2 2) "*8.00")
                    )
                    (ssadd (ssname ss1 n) ss2)
                )
                (setq n (1+ n))
            )
      ) ;kr "2"    
      ((= kr "5")
            (repeat (sslength ss1)
                (if (or (wcmatch (rtos (vla-get-Elevation (vlax-ename->vla-object (ssname ss1 n))) 2 2) "*5.00")
                        (wcmatch (rtos (vla-get-Elevation (vlax-ename->vla-object (ssname ss1 n))) 2 2) "*0.00")
                    )
                    (ssadd (ssname ss1 n) ss2)
                )
                (setq n (1+ n))
            )
      ) ;kr "5"
      ((= kr "10")
            (repeat (sslength ss1)
                (if (wcmatch (rtos (vla-get-Elevation (vlax-ename->vla-object (ssname ss1 n))) 2 2) "*0.00")
                    (ssadd (ssname ss1 n) ss2)
                )
                (setq n (1+ n))
            )
      ) ;kr "10"
      ((= kr ".5")
            (repeat (sslength ss1)
                (if (wcmatch (rtos (vla-get-Elevation (vlax-ename->vla-object (ssname ss1 n))) 2 2) "*.50")
                    (ssadd (ssname ss1 n) ss2)
                )
                (setq n (1+ n))
            )
      ) ;kr ".5"
      ((= kr ".25")
            (repeat (sslength ss1)
                (if (or
                        (wcmatch (rtos (vla-get-Elevation (vlax-ename->vla-object (ssname ss1 n))) 2 2) "*.25")
                        (wcmatch (rtos (vla-get-Elevation (vlax-ename->vla-object (ssname ss1 n))) 2 2) "*.75")
                    )
                    (ssadd (ssname ss1 n) ss2)
                )
                (setq n (1+ n))
            )
      ) ;kr ".25"    
    ) ;cond
    (setvar "DIMZIN" oldDIMZIN)
    (if (> (sslength ss2) 0) (sssetfirst nil ss2) (princ (strcat "Нет горизонталей с указанным критерием выбора:" kr)))
    (princ)
) ;defun
Задействовал алгоритм, описанный мною в данном (#25) посте чуть выше.
Сделал командой (C:TEST) - вызывать без скобок.
При вызове команды (при включенном динамическом вводе) появится выпадающий список с вариантами фильтрации. Можно выбрать из списка, а можно ввести с клавиатуры значения, выделенные в описании алгоритма зеленым (они также обозначены подсказками в скобках в выпадающем списке).
Пустой ввод, а также ввод иных значений кроме разрешенных - недопустим.
Выход по Escape.
Тестировал на прилагаемом файле.
__________________________________________
Добавлено 2:
Подправил код так, чтоб при выборе пятерок выбирались и десятки (замеч. в #26)
Вложения
Тип файла: dwg
DWG 2010
Для dwg.ru выбор горизонталей.dwg (65.8 Кб, 736 просмотров)

Последний раз редактировалось skkkk, 13.06.2013 в 21:37. Причина: Добавил код и инструкции к нему, подправил код.
skkkk вне форума  
 
Непрочитано 13.06.2013, 16:01
#26
Krovlaf

геология, геодезия
 
Регистрация: 29.05.2009
Хабаровск
Сообщений: 185


Протестировал на своем примере (у меня до сих пор 2008 (точнее 2008++)). Наверное все возможные варианты учтены (от М 1:1000 до М 1:100000). Касаемо включения "10" в "5" - это надо сделать. Я не помню случаев когда выделялись "5" без "10". А так все работает прекрасно! Спасибо за понимание, труды и потраченное драгоценное. Надеюсь многим будет полезен. Лично для меня данный лисп очень кстати - предстоит большая работа по оцифровке топопланов.

Последний раз редактировалось Krovlaf, 13.06.2013 в 16:07.
Krovlaf вне форума  
 
Непрочитано 13.06.2013, 16:42
#27
skkkk


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


Цитата:
Сообщение от Krovlaf Посмотреть сообщение
Касаемо включения "10" в "5" - это надо сделать.
Поправил в #25.
Цитата:
Сообщение от Krovlaf Посмотреть сообщение
Я не помню случаев когда выделялись "5" без "10".
А "10" без "5" оставить?

Вот в этой теме, начиная с поста #15, обсуждали, как называются горизонтали. Нашлись условные обозначения, так в них горизонтали подразделяют на:
  • основные утолщенные
  • основные
  • дополнительные (полугоризонтали)
  • вспомогательные (на произвольной высоте)
Но думаю, в рамках этого лиспа нет смысла пользоваться данной терминологией, потому как горизонтали начинают попадать под приведенные определения уже после выбора и обработки. Если есть - пишите предложения - исправлю.

Последний раз редактировалось skkkk, 13.06.2013 в 16:55.
skkkk вне форума  
 
Непрочитано 14.06.2013, 11:26
#28
Krovlaf

геология, геодезия
 
Регистрация: 29.05.2009
Хабаровск
Сообщений: 185


"10" без "5" оставить!
Представленный лисп может выделить все типы горизонталей за исключением вспомогательных (на произвольной высоте). Обработать последние не составит труда тем же исключением. Еще раз спасибо за программку!
Krovlaf вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как выбрать полилинии по определенным значениям высот (Elevation)?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Как грамотно выбрать направление дуги у полилинии? ira228 AutoCAD 19 22.09.2012 14:47
Распределение точек по полилинии с определенным расстоянием между ними ПО ПРЯМОЙ Prestan AutoCAD 10 14.10.2010 22:54