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

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

Сквозная нумерация динамических блоков

Ответ
Поиск в этой теме
Непрочитано 18.09.2007, 17:45 #1
Сквозная нумерация динамических блоков
zenon
 
Остекляем!!! Алюминим!!!
 
Москва
Регистрация: 21.02.2005
Сообщений: 3,824

Назрело!
В связи с введением динамических блоков начиная с AutoCAD2006, по роду моей деятельности появилась возможность рисовать монтажную схему стоек с указание ее длины в аттрибуте, с автоматическим изменением аттрибута в зависимости от удлинения стойки.
Поэтому назрел вопрос о сквозной нумерации, то бищь присвоении 2му аттрибуту номера стойки в зависимости от ее длины.
см. чертеж
[ATTACH]1190123036.dwg[/ATTACH]
Можно ли расстановку позиций реализовать программно?
ps предварительно расставив стойки.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
Просмотров: 88201
 
Непрочитано 18.09.2007, 23:17
#2
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


конечно можно, самому нуно но пока еще руки не дошли.
Sleekka вне форума  
 
Автор темы   Непрочитано 19.09.2007, 10:57
#3
zenon

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


Просто я лиспом не занимался некогда, вот поэтому и прошу помощи.
Для себя вроде алгоритм работы программы вроде сложил
1. Расстановка стоек(дин. блоков)
2. Регенерировать чертеж.
3. Запуск функции обсчета длин и количества стоек, с соответвующим привязками к блокам.
4. Нумерация поз. стоек.
5. Обратная вставка в атрибут поз. соответвующего блока

ps команда _attout из ЕТ [ATTACH]1190184972.jpg[/ATTACH] выкидывает тхт файл с значением атрибутов дин.блоков,
Код:
[Выделить все]
HANDLE	BLOCKNAME	DLINA
'2FB	*U15	1864.3
'2ED	*U15	1864.3
'2DF	*U15	1864.3
'2D1	*U15	1864.3
'2C3	*U15	1864.3
'2B5	*U17	541.8
'2A7	*U17	541.8
'299	*U17	541.8
'28B	*U17	541.8
'27D	*U9	3229.6
'26F	*U9	3229.6
'261	*U9	3229.6
'253	*U9	3229.6
'17E	*U17	541.8
'170	*U15	1864.3
'162	*U13	953.9
'154	*U11	1193.3
'88	*U9	3229.6
вот как бы загнать обратно с позициями??
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 19.09.2007, 11:53
#4
Кулик Алексей aka kpblc
Moderator

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


Стоп, так задача какая получается? Юзер меняет длину дин.блока, внутрь блока в атрибуты (к примеру, LEN и NUM):
- LEN -> вбить значение линейного параметра
- NUM -> вбить номер позиции:?:
Если с первой частью в общем-то трудности никакой, то со второй - проблема. Как определять номер позиции? Допустим, стоит 2 стойки, у одной длина 100, у другой - 101. Какие номера и по какому закону назначать?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.09.2007, 12:40
#5
zenon

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


Цитата:
Сообщение от Кулик Алексей aka kpblc
Стоп, так задача какая получается? Юзер меняет длину дин.блока, внутрь блока в атрибуты (к примеру, LEN и NUM):
- LEN -> вбить значение линейного параметра
- NUM -> вбить номер позиции:?:
Если с первой частью в общем-то трудности никакой, то со второй - проблема. Как определять номер позиции? Допустим, стоит 2 стойки, у одной длина 100, у другой - 101. Какие номера и по какому закону назначать?
Немного не так, юзер не меняет длину сам он тока тянет за ручку, а при обновлении атрибут отвечающий за длину сам пересчитывается,
1 пункт - LEN -> вбить значение линейного параметра отпадает сам. ( в чертеже можно посмотреть реализацию данного пункта)
а вот программка должная сама вставлять номер поз. в зависимости от полученной длины (зависимость можно по возрастанию или убыванию длины)
то бишь
LEN 1000 - 5шт, прогамма NUM - 1
LEN 1454 - 5шт, прогамма NUM - 2
LEN 2111 - 5шт, прогамма NUM - 3
LEN 5252 - 5шт, прогамма NUM - 4
LEN 2222 - 5шт, прогамма NUM - 5
LEN 5555 - 5шт, прогамма NUM - 6

где LEN вычисляется через поле в зависимости от длины стойки.

ps а в примере я что-то не так пояснил???
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 19.09.2007, 13:19
#6
Кулик Алексей aka kpblc
Moderator

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


Я попробовал вставить атрибут-поле, привязанное к значению линейного параметра, но не получилось. Может, что не так делал, но значения вообще не показывались - только "по умолчанию". Сейчас попробую накатать вариант (если успею, правда).
Без простановки номеров позиций получилось следующе <...> Фигня получилась из-за глюка када.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.09.2007, 14:47
#7
zenon

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


попробую поподробнее, то как это вижу я.
1. Программа вытаскивает из блоков значение длинн, (промежуточный файл али буфер)
2. Сортирует по возрастанию или убыванию, сортировка должна идти совместно с именем блока (он вроде анонимный), для последующей корректной вставки поз. (дублирующие длины наверно можно удалить)
3. Присваивает значение поз. по длине (на дублирующие длины поз. одинаковы)
4. И собственно присваивает атрибуту соответсвующего блока значение поз.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Автор темы   Непрочитано 19.09.2007, 15:51
#8
zenon

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


мотеж это поможет.
Как это вручную происходит
1. Создан дин.блок с 2 атрибутами:
а) - DLINA вычисляет длину стойки через поле;
б) - POZ указатель позиции
2. Вставка блоков и удлинение соотвественно.
3. Визульная сортировка по значению длин.
4. Выписка значений длин на бумажку и простановка напротив позиции, одинаковым длинам присваивается одинаковый номер позиции.
5. Присваивание атрибуту POZ блока с соответсвующей длиной значения указанного в бумажке.
6. Присваивание атрибуту POZ блока с соответсвующей длиной значения указанного в бумажке.
7. Присваивание атрибуту POZ блока с соответсвующей длиной значения указанного в бумажке.
8.
9.
10.
.
.
.
.
.
N.


Вот хотелось бы начиная с 3 пункта автоматизировать.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 19.09.2007, 16:15
#9
Кулик Алексей aka kpblc
Moderator

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


Я только что вернулся, так что сажусь за решение 2-й части. Кстати, мой вопрос сможешь решить? Как сделать внутри блока атрибут-поле, показывающее значение линейного параметра? У меня в ADT2006Rus не получилось.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.09.2007, 16:31
#10
zenon

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


Цитата:
Сообщение от Кулик Алексей aka kpblc
Кстати, мой вопрос сможешь решить? Как сделать внутри блока атрибут-поле, показывающее значение линейного параметра?
не совсем понял вопрос.
у меня, в примере, вставлен атрибут с полем, которое отслеживает длину линии.
[ATTACH]1190205108.jpg[/ATTACH]
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 19.09.2007, 16:42
#11
Кулик Алексей aka kpblc
Moderator

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


Какого ляда тогда у меня 2006-й не обновлял? Я чего и голову-то ломал. Так, ща переделаю...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 19.09.2007, 16:45
#12
zenon

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


я после изменения длины запускал _regenall
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 19.09.2007, 16:47
#13
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Да простят меня собеседники, вклинюсь.
Если есть некий элемент, у которого в зависимости от длинны меняется марка, то реализовать это можно в самом динблоке. Длины при этом фиксированные и выбираются в раскрывающемся списке, при этом изменяется и сама форма элемента и разные другие ее параметры типа вес, марка и т.п.
Далее:
Если мы имеем некоторую позицию на чертеже и ее надо обозначить номером или буквенным описанием, то тогда в дин. блок вставляются атрибуты, изменение данных в которых к изменению номера*U123 не приводят и на подсчет не влияют.
Скачайте мой 3D динамический блок трубы в ППУ изоляции ду-159 из DWG.RU Downloads/Чертежи/Библиотека элементов и посмотрите как он сделан.
Supermax вне форума  
 
Непрочитано 19.09.2007, 16:51
#14
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


И Господа! Не смешивайте атрибуты блока со свойсвами изделия представленными в виде данных 3D элемента!
Одно дело мы присваиваем 3D элементу характеристики изделия и совсем другое, когда мы ему присваиваем данные о принадлежности и месторасположении в моделе.
Supermax вне форума  
 
Автор темы   Непрочитано 19.09.2007, 16:54
#15
zenon

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


Цитата:
Сообщение от Supermax
Да простят меня собеседники, вклинюсь.
Если есть некий элемент, у которого в зависимости от длинны меняется марка, то реализовать это можно в самом динблоке. Длины при этом фиксированные и выбираются в раскрывающемся списке, при этом изменяется и сама форма элемента и разные другие ее параметры типа вес, марка и т.п.
Далее:
Если мы имеем некоторую позицию на чертеже и ее надо обозначить номером или буквенным описанием, то тогда в дин. блок вставляются атрибуты, изменение данных в которых к изменению номера*U123 не приводят и на подсчет не влияют.
Скачайте мой 3D динамический блок трубы в ППУ изоляции ду-159 из DWG.RU Downloads/Чертежи/Библиотека элементов и посмотрите как он сделан.
1 - ну а если неизвестно какие длины? и их количество, каждый раз рисовать и присваивать?? Хорошо кода есть несколько типоразмеров!!
2 - как известно измененный блок через лисп видится как *Unnn, а вдруг вставлено несколько блоков у которых длина одинакова, но имя разное?? что тогда??
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 19.09.2007, 17:03
#16
Кулик Алексей aka kpblc
Moderator

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


Попробуйте
Код:
[Выделить все]
(defun try-to-renum (source
                     res
                     /
                     selset
                     adoc
                     pos
                     ent_lst
                     _kpblc-conv-vla-to-list
                     _kpblc-block-attr-get-pointer-mask
                     _kpblc-is-ent-block-with-attr
                     _kpblc-is-ent-block-with-constant-attr
                     _kpblc-property-get
                     _kpblc-property-set
                     _kpblc-conv-value-to-string
                     )
                    ;|
*    Простановка позиций с повторами для блоков
*    Параметры вызова:
   source   тэг атрибута, критичного к простановке (например, DLINA)
   res   тэг атрибута, куда устанавливается значение позиции
*    Примеры вызова:
(try-to-renum "dlina" "pos")
|;

  (defun _kpblc-conv-value-to-string (value /)
                                     ;|
*    конвертация значения в строку.
|;
    (if value
      (vl-princ-to-string value)
      ""
      ) ;_ end of if
    ) ;_ end of defun

  (defun _kpblc-error-catch (protected-function
                             on-error-function
                             /
                             catch_error_result
                             )
                            ;|
*** Функция взята из книжной версии ruCAD'a без каких бы то ни было переделок,
*** кроме переименования.
*    Оболочка отлова ошибок.
*    Параметры вызова:
*   protected-function   - "защищаемая" функция
*   on-error-function   - функция, выполняемая в случае ошибки
|;
    (setq catch_error_result (vl-catch-all-apply protected-function))
    (if (and (vl-catch-all-error-p catch_error_result)
             on-error-function
             ) ;_ end of and
      (apply on-error-function
             (list (vl-catch-all-error-message catch_error_result))
             ) ;_ end of apply
      catch_error_result
      ) ;_ end of if
    ) ;_ end of defun

  (defun _kpblc-error-print (func-name msg)
                            ;|
*    Функция вывода сообщения об ошибке для (_kpblc-error-catch)
*    Параметры вызова:
*   func-name   имя функции, в которой возникла ошибка
*   msg      сообщение об ошибке
|;
    (princ (strcat "\n ** "
                   (strcase func-name t)
                   " ERROR #"
                   (if msg
                     (strcat
                       (_kpblc-conv-value-to-string (getvar "errno"))
                       ": "
                       (_kpblc-conv-value-to-string msg)
                       ) ;_ end of strcat
                     ": undefined"
                     ) ;_ end of if
                   "\n"
                   ) ;_ end of strcat
           ) ;_ end of princ
    (princ)
    ) ;_ end of defun

  (defun _kpblc-property-set (obj property value / res)
                             ;|
*    Установка значения свойства объекта.
*    Параметры вызова:
*   obj      указатель на объект
*   property   наименование свойства
*   value      устанавливаемое значение
|;
    (_kpblc-error-catch
      (function
        (lambda ()
          (if (and obj
                   (vlax-property-available-p
                     obj
                     property
                     t
                     ) ;_ end of vlax-property-available-p
                   (vlax-read-enabled-p obj)
                   (vlax-write-enabled-p obj)
                   (not (vlax-erased-p obj))
                   ) ;_ end of and
            (progn
              (vlax-put-property
                obj
                property
                (cond
                  ((or (= (type value) (type (vlax-get-property obj property)))
                       (and (member (type value) (list 'int 'real))
                            (member (type (vlax-get-property obj property))
                                    (list 'int 'real)
                                    ) ;_ end of member
                            ) ;_ end of and
                       ) ;_ end of or
                   value
                   )
                  ((and (= (type (vlax-get-property obj property)) 'variant)
                        (member (type (car (_kpblc-conv-vla-to-list value)))
                                (list 'int 'real)
                                ) ;_ end of member
                        ) ;_ end of and
                   (vlax-3d-point (_kpblc-conv-vla-to-list value))
                   )
                  ((= (type (vlax-get-property obj property)) 'variant)
                   ((lambda (/ temp value_type)
                      (setq temp (_kpblc-conv-vla-to-list value))
                      (vlax-make-variant
                        (vlax-safearray-fill
                          (vlax-make-safearray
                            (cond ((= (type (car temp)) 'real) vlax-vbdouble)
                                  ((= (type (car temp)) 'int) vlax-vbinteger)
                                  ((= (type (car temp)) 'str) vlax-vbstring)
                                  (t vlax-vbobject)
                                  ) ;_ end of cond
                            (cons 0 (1- (length temp)))
                            ) ;_ end of vlax-make-safearray
                          temp
                          ) ;_ end of vlax-safearray-fill
                        ) ;_ end of vlax-make-variant
                      ) ;_ end of lambda
                    )
                   )
                  ) ;_ end of cond
                ) ;_ end of vlax-put-property
              ) ;_ end of if
            (setq res (vlax-get-property obj property))
            ) ;_ end of if
          ) ;_ end of lambda
        ) ;_ end of function
      '(lambda (x)
         (_kpblc-error-print
           (strcat
             "_kpblc-property-set :"
             " obj->"
             (_kpblc-conv-value-to-string (_kpblc-property-get obj 'objectname))
             " property->"
             (_kpblc-conv-value-to-string property)
             " value-> "
             (_kpblc-conv-value-to-string value)
             ) ;_ end of strcat
           x
           ) ;_ end of _kpblc-error-print
         ) ;_ end of lambda
      ) ;_ end of _kpblc-error-catch
    res
    ) ;_ end of defun

  (defun _kpblc-property-get (obj property / res)
                             ;|
*    Получение значения свойства объекта
|;
    (_kpblc-error-catch
      (function
        (lambda ()
          (if (and obj
                   (vlax-property-available-p
                     obj
                     property
                     ) ;_ end of vlax-property-available-p
                   ) ;_ end of and
            (setq res (vlax-get-property obj property))
            ) ;_ end of if
          ) ;_ end of lambda
        ) ;_ end of function
      '(lambda (x)
         (if (_kpblc-is-debug-mode)
           (_kpblc-error-print
             (strcat "_kpblc-property-get :"
                     " obj->"
                     (_kpblc-conv-value-to-string
                       (if (vlax-property-available-p
                             obj
                             'objectname
                             ) ;_ end of vlax-property-available-p
                         (vla-get-objectname obj)
                         obj
                         ) ;_ end of if
                       ) ;_ end of _kpblc-conv-value-to-string
                     " property->"
                     (_kpblc-conv-value-to-string property)
                     ) ;_ end of strcat
             x
             ) ;_ end of _kpblc-error-print
           ) ;_ end of if
         ) ;_ end of lambda
      ) ;_ end of _kpblc-error-catch
    res
    ) ;_ end of defun

  (defun _kpblc-is-ent-block-with-attr (ent)
                                       ;|
*    Функция проверяет, является ли переданный указатель блоком и есть ли в нем
* изменяемые атрибуты
*    ent   указатель на проверяемый примитив
|;
    (and
      (= (strcase (vla-get-objectname ent) t) "acdbblockreference")
      (= (_kpblc-property-get ent 'hasattributes) :vlax-true)
      (> (vlax-safearray-get-u-bound
           (vlax-variant-value (vla-getattributes ent))
           1
           ) ;_ end of vlax-safearray-get-u-bound
         -1
         ) ;_ end of >
      ) ;_ end of and
    ) ;_ end of defun

  (defun _kpblc-is-ent-block-with-constant-attr (ent)
                                                ;|
*    Функция проверяет, является ли переданный указатель блоком с постоянными атрибутами
*    Параметры вызова:
*   ent   указатель на вхождение блока
|;
    (and (= (strcase (vla-get-objectname ent) t) "acdbblockreference")
         (vlax-method-applicable-p ent 'getconstantattributes)
         (> (vlax-safearray-get-u-bound
              (vlax-variant-value (vla-getconstantattributes ent))
              1
              ) ;_ end of vlax-safearray-get-u-bound
            -1
            ) ;_ end of >
         ) ;_ end of and
    ) ;_ end of defun

  (defun _kpblc-block-attr-get-pointer-mask (blk mask / res)
                                            ;|
*    Получение списка атрибутов блока по маске. Учитываются также постоянные атрибуты.
*    Параметры вызова:
*   blk   указатель на вставку блока
*   mask   строка с маской тэга атрибута
|;
    (if (_kpblc-is-ent-block-with-attr blk)
      (setq res
             (vl-sort
               (vl-remove-if-not
                 '(lambda (x)
                    (wcmatch (strcase (_kpblc-property-get x 'tagstring))
                             (strcase mask)
                             ) ;_ end of wcmatch
                    ) ;_ end of lambda
                 (vlax-safearray->list (vlax-variant-value (vla-getattributes blk)))
                 ) ;_ end of vl-remove-if-not
               '(lambda (a b)
                  (< (strcase (_kpblc-property-get a 'tagstring))
                     (strcase (_kpblc-property-get b 'tagstring))
                     ) ;_ end of <
                  ) ;_ end of lambda
               ) ;_ end of vl-sort
            ) ;_ end of setq
      ) ;_ end of if
    (if (_kpblc-is-ent-block-with-constant-attr blk)
      (setq
        res
         (append res
                 (vl-sort
                   (vl-remove-if-not
                     '(lambda (x)
                        (wcmatch (strcase (_kpblc-property-get x 'tagstring))
                                 (strcase mask)
                                 ) ;_ end of wcmatch
                        ) ;_ end of lambda
                     (vlax-safearray->list
                       (vlax-variant-value (vla-getconstantattributes blk))
                       ) ;_ end of vlax-safearray->list
                     ) ;_ end of vl-remove-if-not
                   '(lambda (a b)
                      (< (strcase (_kpblc-property-get a 'tagstring))
                         (strcase (_kpblc-property-get b 'tagstring))
                         ) ;_ end of <
                      ) ;_ end of lambda
                   ) ;_ end of vl-sort
                 ) ;_ end of cons
        ) ;_ end of setq
      ) ;_ end of if
    res
    ) ;_ end of defun

  (defun _kpblc-conv-vla-to-list (value / res)
                                 ;|
*    Преобразовывает vlax-variant или vlax-safearray в список.
|;
    (cond
      ((= (type value) 'variant)
       (_kpblc-conv-vla-to-list (vlax-variant-value value))
       )
      ((= (type value) 'safearray)
       (if (>= (vlax-safearray-get-u-bound value 1) 0)
         (vlax-safearray->list value)
         ) ;_ end of if
       )
      (t value)
      ) ;_ end of cond
    ) ;_ end of defun

  (vl-load-com)
  (if (setq selset (ssget "_:L" '((0 . "INSERT") (66 . 1))))
    (progn
      (foreach ent (setq ent_lst
                          (vl-remove-if-not
                            '(lambda (x)
                               (equal (vla-get-isdynamicblock (car x)) :vlax-true)
                               ) ;_ end of lambda
                            (vl-sort
                              (mapcar
                                '(lambda (a)
                                   (cons
                                     (setq a (vlax-ename->vla-object a))
                                     (_kpblc-property-get
                                       (car (_kpblc-block-attr-get-pointer-mask
                                              a
                                              source
                                              ) ; _ end of
                                            ) ;_ end of car
                                       'textstring
                                       ) ;_ end of _kpblc-property-get
                                     ) ;_ end of cons
                                   ) ;_ end of lambda
                                (vl-remove-if
                                  'listp
                                  (mapcar 'cadr (ssnamex selset))
                                  ) ;_ end of vl-remove-if
                                ) ;_ end of mapcar
                              '(lambda (a b)
                                 (< (cdr a) (cdr b))
                                 ) ;_ end of lambda
                              ) ;_ end of vl-sort
                            ) ;_ end of vl-remove-if-not
                         ) ;_ end of setq
        (_kpblc-property-set
          (car (_kpblc-block-attr-get-pointer-mask (car ent) res))
          'textstring
          (_kpblc-conv-value-to-string
            (setq
              pos (cond
                    ((= (length ent_lst) (length (member ent ent_lst)))
                     1
                     )
                    (t
                     (if (= (cdr ent)
                            (cdr (nth (1- (- (length ent_lst)
                                             (length (member ent ent_lst))
                                             ) ;_ end of -
                                          ) ;_ end of 1+
                                      ent_lst
                                      ) ;_ end of nth
                                 ) ;_ end of cdr
                            ) ;_ end of =
                       pos
                       (setq pos (1+ pos))
                       ) ;_ end of if
                     )
                    ) ;_ end of cond
              ) ;_ end of setq
            ) ;_ end of _kpblc-conv-value-to-string
          ) ;_ end of _kpblc-property-set
        ) ;_ end of foreach
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of defun
---
Отредактировал: убрал дубликаты объявлений функций вне основной.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.09.2007, 17:27
#17
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Да хоть и то и другое.
Можно выноску зеркалить легким поглаживанием по ручке, можно и вес и марку и еще черте-что менять. Один дин. блок может заменить все типы изделий в линейке!
Вот глянь и дальше поговорим.
[ATTACH]1190208436.dwg[/ATTACH]
Supermax вне форума  
 
Непрочитано 19.09.2007, 17:37
#18
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Про разные имена и одинаковую длинну.
Есть в каде одна дырка, которую я успешно залатал. Это, когда вставляешь инсертом дин. блок, он по началу имеет скажем так "техническое" имя такое же как и то, которым вы его окрестили. Стоит только его параметры пошевелить, как он становится *Unnn. Если при этом его параметры вернуть к исходному значению он так и останется *Unnn. Вот если в этот момент опять вставить этот же блок, получается ситуация, когда в модели два одинаковых блока, но с разными именами. Я написал маленький макрос, который синхронизирует имя вставленного блока и делает его *Unnn, причем, если в модели уже есть такой U, то номер станет его. Номер этого U всегда будет привязан к состоянию его свойств (вот состояние атрибутов блока на U не влияют). Если накопировать кучу блоков, пошевелить всем параметры, а потом вернуть, у всех будет один и тот же U номер.
Supermax вне форума  
 
Непрочитано 19.09.2007, 17:49
#19
Кулик Алексей aka kpblc
Moderator

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


> Supermax : А ты обращайся не к Name, а к EffectiveName и будет счастие и благолепие.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.09.2007, 18:15
#20
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Не будет. Если динамическим блоком сделать скажем всю серию ФБС, меняя в этом блоке тип ФБС мы тем самым меняем и его сущность, а EffectiveName при этом будет называться "Блоки ФБС" Какие? - можно узнать только прочтя свойства. Или сделать столько блоков, сколько существует видов ФБС.
Supermax вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Сквозная нумерация динамических блоков

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

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