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

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

Сортировка блоков в алфовитном порядке

Ответ
Поиск в этой теме
Непрочитано 27.08.2007, 12:58 #1
Сортировка блоков в алфовитном порядке
ERN
 
Регистрация: 01.02.2005
Сообщений: 11

Уважаемые, прошу совета; Есть порядка 3000 файлов профилей (столярных и мебельных изделий) 1 файл -1 профиль, я их объединил через «_xattach» в один фаил далее убил ссылки на чертежи, и они стали независимыми блоками, но точка вставки у них одна, то есть они в одной куче. Мне нужно эту кучу блоков рассортировать по алфавиту, хотя бы в одну строку, по имени блока (это унаследованное имя файла). Пробовал командой «align» не получается, так как она сортирует не по имени блока.
В идеале, я думаю это должно быть так:
При выполнении «_xattach», (там можно выделить массив файлов в алфавитном порядке) нужно как то ввести параметр, при котором точка вставки следующего блока будет смещена на 100мм по оси Х., и ещё бы под блоком поиметь имя блока , в общем не знаю как это сделать,,, если сделаю, то выложу для общего скачивания.
Просмотров: 2303
 
Непрочитано 27.08.2007, 13:11
#2
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


Запихать их нужно в палитру инструментов '_ToolPalettes и задать порядок сортировки по имени
Хмурый вне форума  
 
Непрочитано 27.08.2007, 13:41
#3
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(defun c:blockarray (/         adoc      *error*   selset    count_x
                     dist_x    dist_y    ins       row_count col_count
                     minp      maxp      txt_height loc:getname
                     )

  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (defun loc:getname (ent)
    (cond
      ((vlax-property-available-p ent 'effectivename)
       (vla-get-effectivename ent)
       )
      ((vlax-property-available-p ent 'name)
       (vla-get-name ent)
       )
      (t "")
      ) ;_ end of cond
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (if
    (and
      (not (vl-catch-all-error-p
             (vl-catch-all-apply
               '(lambda () (setq selset (ssget "_:L" '((0 . "INSERT")))))
               ) ;_ end of vl-catch-all-apply
             ) ;_ end of vl-catch-all-error-p
           ) ;_ end of not
      selset
      (not
        (vl-catch-all-error-p
          (vl-catch-all-apply
            '(lambda ()
               (setq dist_x (getdist "\nРасстояние по горизонтали <Отмена> : "))
               ) ;_ end of lambda
            ) ;_ end of vl-catch-all-apply
          ) ;_ end of vl-catch-all-error-p
        ) ;_ end of not
      dist_x
      (not (vl-catch-all-error-p
             (vl-catch-all-apply
               '(lambda ()
                  (setq dist_y (getdist "\nРасстояние по вертикали <Отмена> : "))
                  ) ;_ end of lambda
               ) ;_ end of vl-catch-all-apply
             ) ;_ end of vl-catch-all-error-p
           ) ;_ end of not
      dist_x
      (not (vl-catch-all-error-p
             (vl-catch-all-apply
               '(lambda ()
                  (setq
                    count_x (getdist "\nКоличество по горизонтали <Отмена> : ")
                    ) ;_ end of setq
                  ) ;_ end of lambda
               ) ;_ end of vl-catch-all-apply
             ) ;_ end of vl-catch-all-error-p
           ) ;_ end of not
      count_x
      (not (vl-catch-all-error-p
             (vl-catch-all-apply
               '(lambda ()
                  (cond
                    ((member (setq txt_height
                                    (getdist
                                      (strcat
                                        "\nВысота текста наименований блоков <"
                                        (if
                                          (equal 0.
                                                 (vla-get-height
                                                   (vla-get-activetextstyle adoc)
                                                   ) ;_ end of vla-get-Height
                                                 1e-2
                                                 ) ;_ end of equal
                                           "3.5"
                                           (rtos (vla-get-height
                                                   (vla-get-activetextstyle adoc)
                                                   ) ;_ end of vla-get-Height
                                                 2
                                                 ) ;_ end of rtos
                                           ) ;_ end of if
                                        "> : "
                                        ) ;_ end of strcat
                                      ) ;_ end of getdist
                                   ) ;_ end of setq
                             '("" nil)
                             ) ;_ end of member
                     (setq txt_height 3.5)
                     )
                    (t txt_height)
                    ) ;_ end of cond
                  ) ;_ end of lambda
               ) ;_ end of vl-catch-all-apply
             ) ;_ end of vl-catch-all-error-p
           ) ;_ end of not
      txt_height
      ) ;_ end of and
     (progn
       (setq col_count 0
             row_count 0
             ) ;_ end of setq
       (foreach item
                (vl-sort
                  (mapcar 'vlax-ename->vla-object
                          (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
                          ) ;_ end of mapcar
                  '(lambda (a b) (< (loc:getname a) (loc:getname b)))
                  ) ;_ end of vl-sort
         (vla-put-insertionpoint
           item
           (vlax-3d-point
             (list (if (<= col_count count_x)
                     (* (1- (setq col_count (1+ col_count))) dist_x)
                     (setq row_count (1- row_count)
                           col_count 0.
                           ) ;_ end of setq
                     ) ;_ end of if
                   (* row_count dist_y)
                   ) ;_ end of list
             ) ;_ end of vlax-3d-point
           ) ;_ end of vla-put-insertionpoint
         (vla-getboundingbox item 'minp 'maxp)
         (setq minp (vlax-safearray->list minp))
         (vla-addtext
           (vla-objectidtoobject adoc (vla-get-ownerid item))
           (loc:getname item)
           (vlax-3d-point
             (list (if (= 0. col_count)
                     0.
                     (* (1- col_count) dist_x)
                     ) ;_ end of if
                   (- (cadr minp) (+ txt_height 1.))
                   ) ;_ end of list
             ) ;_ end of vlax-3d-point
           txt_height
           ) ;_ end of vla-addtext
         ) ;_ end of foreach
       ) ;_ end of progn
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Накидал по-быстрому, почти без проверок. Так что если что-то не будет работать, сообщи.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 27.08.2007, 23:29
#4
ERN


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


. Просто супер, огромное спасибо, всё работает,,,,,
ERN вне форума  
 
Непрочитано 27.08.2007, 23:39
#5
Кулик Алексей aka kpblc
Moderator

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


Мало того что без проверок, так еще и с ошибкой (хотя и некритичная, но неприятно все равно). Код исправил.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Сортировка блоков в алфовитном порядке