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

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

получение суммы размерных линий

Ответ
Поиск в этой теме
Непрочитано 10.06.2010, 08:39 #1
получение суммы размерных линий
Shaft
 
отдел открытых горных работ
 
Новокузнецк
Регистрация: 06.05.2009
Сообщений: 124

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

Если можно, то модифицируйте Lisp для подсчета суммы длин линий. Чтобы было 2 в 1 Можно и отдельным Lisp'ом, это уже как будет удобнее разработчику!

У самого (увы ) нету соответсвующих знаний (пока)

Последний раз редактировалось Shaft, 10.06.2010 в 08:56.
Просмотров: 3135
 
Непрочитано 10.06.2010, 09:17
#2
Neznayka


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


может можно тупо взорвать размеры и потом подсчитать. на форуме (и в автокаде) достаточно для этого инструмента
Neznayka вне форума  
 
Автор темы   Непрочитано 10.06.2010, 09:47
#3
Shaft

отдел открытых горных работ
 
Регистрация: 06.05.2009
Новокузнецк
Сообщений: 124


Цитата:
Сообщение от Neznayka Посмотреть сообщение
может можно тупо взорвать размеры и потом подсчитать. на форуме (и в автокаде) достаточно для этого инструмента
Именно так я и делаю! но это неудобно т.к. после врзыва полилиния например преобразуется в отрезки. Начало и конец которых обусловлены вершинами самой полилинии. (см. рис1)

А у меня много мест, где полилинии пересекаются (см. рис2)
И в этих местах пересечения приходится вручную ставить разрыв. А это нудная и рутиная работа, которя отнимает порой много временни. (если это время просумировать в течении всего дня)
Миниатюры
Нажмите на изображение для увеличения
Название: рис1.jpg
Просмотров: 55
Размер:	10.0 Кб
ID:	40595  Нажмите на изображение для увеличения
Название: рис2.jpg
Просмотров: 62
Размер:	18.7 Кб
ID:	40596  
Shaft вне форума  
 
Непрочитано 10.06.2010, 10:08
1 | #4
Кулик Алексей aka kpblc
Moderator

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


Суммирует реальные измерения размеров. Угловые выводятся в градусах и их десятичных долях.
Код:
[Выделить все]
(vl-load-com)

(defun c:dwgru-dim-summ (/ adoc selset res)

  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (if (= (type (setq selset (vl-catch-all-apply
                              (function
                                (lambda (/ ss tab item)
                                  (setq ss (ssget '((0 . "DIMENSION"))))
                                  (repeat (setq tab  nil
                                                item (sslength ss)
                                                ) ;_ end setq
                                    (setq tab (cons (ssname ss (setq item (1- item))) tab))
                                    ) ;_ end repeat
                                  tab
                                  ) ;_ end of lambda
                                ) ;_ end of function
                              ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
         'list
         ) ;_ end of =
    (progn
      (foreach item (vl-sort
                      (mapcar
                        (function
                          (lambda (x)
                            (setq x (vlax-ename->vla-object x))
                            (mapcar
                              (function
                                (lambda (a)
                                  (cons a (vlax-get-property x a))
                                  ) ;_ end of lambda
                                ) ;_ end of function
                              '("objectname" "measurement")
                              ) ;_ end of mapcar
                            ) ;_ end of lambda
                          ) ;_ end of function
                        selset
                        ) ;_ end of mapcar
                      (function
                        (lambda (a b)
                          (< (cdr (assoc "objectname" a)) (cdr (assoc "objectname" b)))
                          ) ;_ end of lambda
                        ) ;_ end of function
                      ) ;_ end of vl-sort
        (setq res
               (if (member (cdr (assoc "objectname" item))
                           (mapcar (function
                                     (lambda (x)
                                       (cdr (assoc "objectname" x))
                                       ) ;_ end of lambda
                                     ) ;_ end of function
                                   res
                                   ) ;_ end of mapcar
                           ) ;_ end of member
                 (subst
                   (cons
                     (assoc "objectname" item)
                     (list
                       (cons
                         "measurement"
                         (+ (cdr
                              (assoc "measurement"
                                     (car (vl-remove-if-not
                                            '(lambda (x) (= (cdr (assoc "objectname" x)) (cdr (assoc "objectname" item))))
                                            res
                                            ) ;_ end of vl-remove-if-not
                                          ) ;_ end of car
                                     ) ;_ end of assoc
                              ) ;_ end of cdr
                            (cdr (assoc "measurement" item))
                            ) ;_ end of +
                         ) ;_ end of cons
                       ) ;_ end of list
                     ) ;_ end of cons
                   (car
                     (vl-remove-if-not '(lambda (x) (= (cdr (assoc "objectname" x)) (cdr (assoc "objectname" item))))
                                       res
                                       ) ;_ end of vl-remove-if-not
                     ) ;_ end of car
                   res
                   ) ;_ end of subst
                 (cons item res)
                 ) ;_ end of if
              ) ;_ end of setq
        ) ;_ end of foreach
      (princ "\nСумма размеров : ")
      (foreach item res
        (princ
          (strcat "\n"
                  (cdr (assoc "objectname" item))
                  " : L="
                  (vl-princ-to-string
                    (* (if (wcmatch (strcase (cdr (assoc "objectname" item)))
                                    "*ANGULARDIM*"
                                    ) ;_ end of WCMATCH
                         (/ 180. pi)
                         1.
                         ) ;_ end of if
                       (cdr (assoc "measurement" item))
                       ) ;_ end of *
                    ) ;_ end of vl-princ-to-string
                  ) ;_ end of strcat
          ) ;_ end of princ
        ) ;_ end of foreach
      (textscr)
      ) ;_ end of progn
    ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Но при чем тут пересечения полилиний - я не понимаю хоть тресни.
P.S. Код написан "на коленке", поэтому не все тут красиво. Но вроде бы работает...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 10.06.2010, 10:18
#5
Shaft

отдел открытых горных работ
 
Регистрация: 06.05.2009
Новокузнецк
Сообщений: 124


Ура! То что надо
Огромнейшее СПАСИБО Алексей!!!!!!

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Но при чем тут пересечения полилиний - я не понимаю хоть тресни.
Ну я просто пытался объяснить Neznayka что если врывать полилинию, то она преобразуется в отрезки согласно вершинам этой же полилинии. А размер может ставиться от какой-то вершины и до пересечения ( и таких мест очень много ) т.е. после взрыва полилинии мне пришлось бы искать места этих пересечений и вставлять там разрыв. И только потом использовать Lisp для суммирования отрезков.

Ps объяснил как смог
Надеюсь что понятно

Pps Еще раз ОГРОМНОЕ СПАСИБО ВАМ АЛЕКСЕЙ!!!!!! Вы помогли мне сэкономить (по грубым подсчетам чала 2 в день не меньше) кучу времени.
Может и еще кому нибудь это пригодиться.

PPPs Когда-нибудь я тоже возьмусь серьезно за этот язык. Чтобы не только свою работу упростить, но и другим помогать

PPPPs А как тему закрыть?

Последний раз редактировалось Shaft, 10.06.2010 в 10:27.
Shaft вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > получение суммы размерных линий



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP для подсчета суммы длин линий Kostinok LISP 18 26.04.2013 14:56
перемещение размерных линий X-BLIK AutoCAD 14 17.05.2012 06:15
Вес размерных линий "по умолчанию" Jonas AutoCAD 14 02.04.2009 04:35
Единые стили размерных линий Trasher AutoCAD 12 08.07.2008 20:33
Подрезка размерных линий выделенных размеров Павлов Андрей Прочее. Программное обеспечение 4 09.06.2005 16:52