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

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

Возможно ли привести к модулю координаты всех точек чертежа автокада

Ответ
Поиск в этой теме
Непрочитано 14.09.2010, 17:59 #1
Возможно ли привести к модулю координаты всех точек чертежа автокада
megabeton
 
Регистрация: 03.12.2009
Сообщений: 84

Есть необходимость привести координаты всех точек чертежа автокада к одному модулю, например 1 метр или милиметр (неважно). Чертеж начерчен "кривыми" руками с размерами линий типа "2351,9613591" - причем все размеры линий такого "некруглого" плана. Решать проблему понижением точности чертежа или размеров очень не хочется, т.к. со временем начнут вылезать ненужные (ошибочные) округления и сумма размеров в цепи не даст правильного общего размера.
По моему было бы очень удобно из архитектурных чертежей (тех же планов), начерченных "на глаз" быстро делать точные чертежи для конструктива.

Возможно ли решение такой проблемы средствами автокада, лиспом или сторонними программами?
Просмотров: 7406
 
Непрочитано 14.09.2010, 18:07
#2
Profan


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


Что, архитекторы чертят в AutoCAD'е "на глаз"? Уволить таких архитекторов.
Profan вне форума  
 
Непрочитано 14.09.2010, 18:30
#3
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от megabeton Посмотреть сообщение
По моему было бы очень удобно из архитектурных чертежей (тех же планов), начерченных "на глаз" быстро делать точные чертежи для конструктива.
"По моему, было бы очень удобно" (с) не извращаться изначально, а чертить точно. Надо было изначально думать головой, а не пилоткой принимая работу. Написать можно много чего (я о программах), но писать проги под каждую откровенную лажу (подобную той, что вам передали архитекторы) - это не дело (имхо). Либо сами переделывайте, либо их пинайте.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 14.09.2010, 19:35
#4
VVA

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


Округление координат объектов
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 15.09.2010, 10:52
#5
megabeton


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


VVA, СУПЕР ГРАНД МЕРСИ !!!
То что надо - конец кривым рукам архитекторов )))
P.S. VVA и kpblc просто Боги програмирования
megabeton вне форума  
 
Непрочитано 07.01.2015, 22:48
#6
Frandibola

Уже не студент
 
Регистрация: 22.05.2013
Москва
Сообщений: 11


Цитата:
Сообщение от VVA Посмотреть сообщение
Тоже понадобилось исправить кривые чертежи архитекторов, но по ссылке от V V A, lisp в 2011 Акаде не работает, да и форум там от 2005 года... а тема- то актуальная, постоянно приходится биться с архитекторами.
Может кто разбирается в Lisp'e и сможет подправить код, чтоб пахал на 2011 или более поздних версиях Акада?
с меня бутылка
Frandibola вне форума  
 
Непрочитано 07.01.2015, 23:02
#7
Кулик Алексей aka kpblc
Moderator

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


Проверил на ACAD2014. Возможно, возникла проблема при копировании лиспа. <...> Удалил.

----- добавлено через ~7 мин. -----
Добавлю: попробуй такой код
Код:
[Выделить все]
 (defun c:round-coord (/                        _kpblc-eval-nearest      _kpblc-ent-modify-autoregen
                      _kpblc-conv-list-to-2dpoints                      lst
                      round                    err
                      )

  (defun _kpblc-conv-list-to-2dpoints (lst / res)
    (cond
      ((not lst)
       nil
       )
      (t
       (setq res (cons (list (car lst)
                             (if (cadr lst)
                               (cadr lst)
                               0.
                               ) ;_ end of if
                             ) ;_ end of list
                       (_kpblc-conv-list-to-2dpoints (cddr lst))
                       ) ;_ end of cons
             ) ;_ end of setq
       )
      ) ;_ end of cond
    res
    ) ;_ end of defun

  (defun _kpblc-ent-modify-autoregen (ent bit value ext_regen / ent_list old_dxf new_dxf layer_dxf70)
    (if (not
          (and
            (or
              (= (strcase (cdr (assoc 0 (entget ent))) nil) "STYLE")
              (= (strcase (cdr (assoc 0 (entget ent))) nil) "DIMSTYLE")
              (= (strcase (cdr (assoc 0 (entget ent))) nil) "LAYER")
              ) ;_ end of or
            (= bit 100)
            ) ;_ end of and
          ) ;_ end of not
      (progn
        (setq ent_list (entget ent)
              new_dxf  (cons bit
                             (if (and (= bit 62) (= (type value) 'str))
                               (if (= (strcase value) "BYLAYER")
                                 256
                                 0
                                 ) ;_ end of if
                               value
                               ) ;_ end of if
                             ) ;_ end of cons
              ) ;_ end of setq
        (if (not (equal new_dxf (setq old_dxf (assoc bit ent_list))))
          (progn
            (entmod (if old_dxf
                      (subst new_dxf old_dxf ent_list)
                      (append ent_list (list new_dxf))
                      ) ;_ end of if
                    ) ;_ end of entmod
            (if ent_regen
              (entupd ent)
              (redraw ent)
              ) ;_ end of if
            ) ;_ end of progn
          ) ;_ end of if
        ) ;_ end of progn
      ) ;_ end of if
    ent
    ) ;_ end of defun

;;;*    Получение "ближайшего" к указанному числу из списка
;;;*    Параметры вызова:
;;;*  value  контрольное значение
;;; *  lst  список "проверяемых" значений
  (defun _kpblc-eval-nearest (value lst / x base)
    (if lst
      (progn
        (setq x    (car lst)
              base (abs (- value x))
              ) ;_ end of setq
        (foreach item (cdr lst)
          (if (> base (abs (- value item)))
            (setq x    item
                  base (abs (- value item))
                  ) ;_ end of setq
            ) ;_ end of if
          ) ;_ end of foreach
        ) ;_ end of progn
      (setq x value)
      ) ;_ end of if
    x
    ) ;_ end of defun

  (vl-load-com)
  (if (not *kpblc-activedoc*)
    (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of if
  (vla-startundomark *kpblc-activedoc*)
  (if (not (vl-catch-all-error-p
             (setq round (vl-catch-all-apply
                           (function
                             (lambda ()
                               (cond
                                 ((getreal "\nЗначение округления координат <Приводить к целым> : "))
                                 (t 1.)
                                 ) ;_ end of cond
                               ) ;_ end of lambda
                             ) ;_ end of function
                           ) ;_ end of vl-catch-all-apply
                   ) ;_ end of setq
             ) ;_ end of vl-catch-all-error-p
           ) ;_ end of not
    (progn
      (foreach ent
                   (vl-remove-if 'listp
                                 (mapcar 'cadr (ssnamex (ssget "_:L")))
                                 ) ;_ end of vl-remove-if
        (if (vl-catch-all-error-p
              (setq err (vl-catch-all-apply
                          (function
                            (lambda ()
                              (cond
                                ((member (cdr (assoc 0 (entget ent))) '("POINT" "INSERT"))
                                 (_kpblc-ent-modify-autoregen
                                   ent
                                   10
                                   (mapcar '(lambda (x)
                                              (_kpblc-eval-nearest
                                                x
                                                (list (* round (fix (/ x round)))
                                                      (* round (1+ (fix (/ x round))))
                                                      ) ;_ end of list
                                                ) ;_ end of _kpblc-eval-nearest
                                              ) ;_ end of lambda
                                           (cdr (assoc 10 (entget ent)))
                                           ) ;_ end of mapcar
                                   t
                                   ) ;_ end of _kpblc-ent-modify-autoregen
                                 )
                                ((member (cdr (assoc 0 (entget ent))) '("ARC" "CIRCLE"))
                                 (mapcar
                                   '(lambda (y)
                                      (_kpblc-ent-modify-autoregen
                                        ent
                                        y
                                        ((lambda (/ res)
                                           (setq res
                                                  (mapcar '(lambda (x)
                                                             (_kpblc-eval-nearest
                                                               x
                                                               (list (* round (fix (/ x round)))
                                                                     (* round (1+ (fix (/ x round))))
                                                                     ) ;_ end of list
                                                               ) ;_ end of _kpblc-eval-nearest
                                                             ) ;_ end of lambda
                                                          (if (= (type (cdr (assoc y (entget ent)))) 'list)
                                                            (cdr (assoc y (entget ent)))
                                                            (list (cdr (assoc y (entget ent))))
                                                            ) ;_ end of if
                                                          ) ;_ end of mapcar
                                                 ) ;_ end of setq
                                           (if (/= (type (cdr (assoc y (entget ent)))) 'list)
                                             (setq res (car res))
                                             ) ;_ end of if
                                           res
                                           ) ;_ end of lambda
                                         )
                                        t
                                        ) ;_ end of _kpblc-ent-modify-autoregen
                                      ) ;_ end of lambda
                                   '(10 40)
                                   ) ;_ end of mapcar
                                 ) ;_ end of cond
                                ((= (cdr (assoc 0 (entget ent))) "LINE")
                                 (mapcar '(lambda (y)
                                            (_kpblc-ent-modify-autoregen
                                              ent
                                              y
                                              (mapcar '(lambda (x)
                                                         (_kpblc-eval-nearest
                                                           x
                                                           (list (* round (fix (/ x round)))
                                                                 (* round (1+ (fix (/ x round))))
                                                                 ) ;_ end of list
                                                           ) ;_ end of _kpblc-eval-nearest
                                                         ) ;_ end of lambda
                                                      (cdr (assoc y (entget ent)))
                                                      ) ;_ end of mapcar
                                              t
                                              ) ;_ end of _kpblc-ent-modify-autoregen
                                            ) ;_ end of lambda
                                         '(10 11)
                                         ) ;_ end of mapcar
                                 )
                                ((= (cdr (assoc 0 (entget ent))) "LWPOLYLINE")
                                 (vla-put-coordinates
                                   (vlax-ename->vla-object ent)
                                   (vlax-make-variant
                                     (vlax-safearray-fill
                                       (vlax-make-safearray
                                         vlax-vbdouble
                                         (cons 0
                                               (1- (length (setq lst
                                                                  (mapcar
                                                                    '(lambda (x)
                                                                       (_kpblc-eval-nearest
                                                                         x
                                                                         (list (* round (fix (/ x round)))
                                                                               (* round (1+ (fix (/ x round))))
                                                                               ) ;_ end of list
                                                                         ) ; _ end of
                                                                       ) ;_ end of lambda
                                                                    (vlax-safearray->list
                                                                      (vlax-variant-value
                                                                        (vla-get-coordinates
                                                                          (vlax-ename->vla-object ent)
                                                                          ) ;_ end of vla-get-coordinates
                                                                        ) ;_ end of vlax-variant-value
                                                                      ) ;_ end of vlax-safearray->list
                                                                    ) ;_ end of mapcar
                                                                 ) ;_ end of setq
                                                           ) ;_ end of length
                                                   ) ;_ end of 1-
                                               ) ;_ end of cons
                                         ) ;_ end of vlax-make-safearray
                                       lst
                                       ) ;_ end of vlax-safearray-fill
                                     ) ;_ end of vlax-make-variant
                                   ) ;_ end of vla-put-Coordinates
                                 )
                                ) ;_ end of cond
                              ) ;_ end of lambda
                            ) ;_ end of function
                          ) ;_ end of vl-catch-all-apply
                    ) ;_ end of setq
              ) ;_ end of vl-catch-all-error-p
          (princ (strcat "\nОшибка при обработке примитива "
                         (cdr (assoc 0 (entget ent)))
                         " : "
                         (vl-catch-all-error-message err)
                         ) ;_ end of strcat
                 ) ;_ end of princ
          ) ;_ end of if
        ) ;_ end of foreach
      ) ;_ end of progn
    ) ;_ end of if
  (vla-endundomark *kpblc-activedoc*)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.01.2015, 23:11
#8
Frandibola

Уже не студент
 
Регистрация: 22.05.2013
Москва
Сообщений: 11


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
----- добавлено через ~7 мин. -----
Добавлю: попробуй такой код
Пробую на ACade 2011, не хочет работать, судя по всему с нумерацией строк по левому краю 001...245. удаляю вручную из тхт
Frandibola вне форума  
 
Непрочитано 07.01.2015, 23:13
#9
Кулик Алексей aka kpblc
Moderator

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


Я в свое время делал ролик:
Increase Size Decrease Size Нажмите для просмотра
http://www.youtube.com/watch?v=wFKc6EfRofo&list=UU1jn1ymHK2jAxsyIg5r799A
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.01.2015, 23:22
#10
Frandibola

Уже не студент
 
Регистрация: 22.05.2013
Москва
Сообщений: 11


Спасибо, разобрался с форматированием текста, все заработало.
Огромное спасибо! куда бутылку отправлять?)
Frandibola вне форума  
 
Непрочитано 08.08.2016, 11:41
#11
Зодчий1989


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Проверил на ACAD2014.
Спасибо огромное. На автокаде 2016 тоже работает.
Зодчий1989 вне форума  
 
Автор темы   Непрочитано 07.02.2017, 18:24
#12
megabeton


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


А есть возможность докрутить лисп, чтобы при приведении к координатам соблюдалось ортогональность отрезков?
Т.е. точки [к примеру] отрезков не просто перемещались бы к ближайшему модулю, а с учетом того, чтобы отрезки оставались ортогональными относительно пск.
megabeton вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Возможно ли привести к модулю координаты всех точек чертежа автокада

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите, гуру! Можно ли в разделенном на 2 части окне автокада открыть два разных чертежа? Или это возможно только в 2 запущенных копиях АВТОКАДА? Ridder AutoCAD 5 22.07.2010 06:02
координаты точек линии uzun AutoCAD 3 17.04.2010 00:26
Как из готового чертежа вытащить координаты точек? АлександрМихайлович Программирование 1 23.05.2005 08:29