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

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

Автоматическое изменение атрибутов блоков

Ответ
Поиск в этой теме
Непрочитано 30.09.2010, 16:19 #1
Автоматическое изменение атрибутов блоков
Zaghim
 
Регистрация: 01.07.2010
Сообщений: 521

Добрый день. Тема уже была, но ответа там, к сожалению, не было.
Как при помощи лиспа сделать так, что бы при вставке блока, автоматически заполнялись его атрибуты. Скажем порядковый номер - вставляем блок первый раз, соответственно атрибут - Блок 1, второй - Блок 2 и тд. Ну и таким же образом некоторые другие параметры. И самое главное реально ли, что, если я вышел из программы вставки блоков и закончил, например, на 10 блоке, что-то порисовал на чертеже, и теперь хочу продолжить вставлять блоки - запускаю заново прогу и блок у меня вставляется с номер 11, т.е. след по списку. Заранее всем спасибо!
Просмотров: 22698
 
Непрочитано 30.09.2010, 16:23
1 | #2
Кулик Алексей aka kpblc
Moderator

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


Поиск по словам "автонумерация" и ему подобным. Вариантов решения - тьма.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.09.2010, 16:30
#3
hwd

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Поиск по словам "автонумерация" и ему подобным. Вариантов решения - тьма.
Offtop: Топики Zaghim меня ещё не разу не удивили своей новизной...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 30.09.2010, 16:38
#4
Zaghim


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


Естественно, у новичка типичные тупые вопросы))) у людей с опытом вопросы по-интереснее)
Zaghim вне форума  
 
Непрочитано 30.09.2010, 16:41
1 | #5
hwd

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


Цитата:
Сообщение от Zaghim Посмотреть сообщение
Естественно, у новичка типичные тупые вопросы))) у людей с опытом вопросы по-интереснее)
Offtop: Быть новичком и лениться юзать поиск - это не одно и то же. Кроме того, язык и версию автокада желательно указывать (на будущее).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 30.09.2010, 16:43
#6
Zaghim


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


У меня вкладок 20 этого сайта открыто и толком ничего похожего не нашел... С автонумерацией разберусь. А как быть, с так скажем, автопродолжением?
Zaghim вне форума  
 
Непрочитано 30.09.2010, 16:48
1 | #7
hwd

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


дубль 2: язык и версия акада.

Offtop:
Некоторое время спустя...
п.с.моё уточнение настолько сильно призадумало автора топика? подсказка: под языком подразумевается язык программирования, на котором он ищет решение, а не что-то иное.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 30.09.2010 в 17:16. Причина: делаю предположение по поводу молчания автора топика
hwd вне форума  
 
Непрочитано 30.09.2010, 17:18
1 | #8
Supermax

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


Я тоже тьму тем читал на эту тему, а решения по автонумерации так и не нашел. Мне тоже надо в атрибутах блока проставлять автоматически номер блока с префиксом и суффиксом. Я даже знаю принцип как это надо делать, да только лень самому писать.
Собрали набор блоков по какому-то признаку и в соотвествии расположением блока в наборе (а он там расположен по порядку создания) пронумеровали.
Вот такой проги, которая создает набор блоков, просит указать имя атрибута в них и пронумеровывает не видел.
Supermax вне форума  
 
Непрочитано 30.09.2010, 17:20
1 | #9
hwd

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


Цитата:
Сообщение от Supermax Посмотреть сообщение
Я тоже тьму тем читал на эту тему, а решения по автонумерации так и не нашел.
Я не понимаю, какая сложность в алгоритме реализации этого? Пример, в котором используется так вами желаемая автонумерация с произвольным начальным значением.
Offtop: А Zaghim так и молчит как рыба об лёд, насчёт языка и версии акада...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 30.09.2010, 17:38
1 | #10
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,989


Цитата:
Сообщение от Zaghim Посмотреть сообщение
С автонумерацией разберусь. А как быть, с так скажем, автопродолжением?
Ну если с автонумерацией разберешься (как, кстати?) - то и с ее продолжением справишься.
Подсчитал сколько блоков уже стоит, вставил новый и нумернул с приращением к количеству. Или перенумеровал весь набор, включая вновь вставленный.
Я так нумерую блоки штампов последующих листов - у тебя не та же задача случайно?
Nike вне форума  
 
Непрочитано 30.09.2010, 17:46
1 | #11
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от Nike Посмотреть сообщение
Подсчитал сколько блоков уже стоит, вставил новый и нумернул с приращением к количеству. Или перенумеровал весь набор, включая вновь вставленный.
По моему правильней взять все блоки и инкрементировать максимальный атрибут.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 30.09.2010, 17:47
1 | #12
VVA

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


Последние версии Binc BincA ApNum ApNumA
можно ли автоматизировать нумерацию блоков
автоматическая нумерация в атрибутах блока
Автоматическая нумерация в AutoCad 2006
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 30.09.2010, 17:50
1 | #13
hwd

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


Цитата:
Сообщение от Zaghim Посмотреть сообщение
И самое главное реально ли, что, если я вышел из программы вставки блоков и закончил, например, на 10 блоке, что-то порисовал на чертеже, и теперь хочу продолжить вставлять блоки - запускаю заново прогу и блок у меня вставляется с номер 11, т.е. след по списку.
Было уже по форуму, причём недавно (я помню, просто лень искать). Что в этом сложного? Вот пример глянь.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 30.09.2010, 18:04
#14
Zaghim


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


Жарко дискуссия развернулась))) Стараюсь писать пока только на Автолиспе, задачи которые себе ставил, все пока что получались именно при помощи его.... Автокад предпочтительно 2008, но есть и 10.
Вообще я думал это делать так, вначале вставил блок, потом entnext получить его свойства и как я думаю там будут эти самые атрибуты. Потом каким-то образом их заменить (кстати как это сделать не знаю, всегда только что то выдергивал, а втыкать назад не пробовал). В общем-то нужна будет не только нумерация, а еще и некоторые другие параметры, высотная отметка, например.
А как выбрать все блоки программно? Понятно, что они должны быть все в одном слое, иначе возьмется лишнее. QuickSelect? Просто в лиспе не пробовал данный метод...
У меня не блоки штампов, у меня колодцы)))
Zaghim вне форума  
 
Непрочитано 30.09.2010, 18:18
1 | #15
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,989


Цитата:
Сообщение от Zaghim Посмотреть сообщение
как выбрать все блоки программно?
с помощью (ssget "_X" '((0 . "INSERT") ...
а потом перебирать их и заносить данные в атрибуты.
Примеры работы с атрибутами есть здесь: http://faqs.org.ru/progr/graph/autolisp2.htm
[22] Атрибуты блоков
[22.1] Как получать доступ к атрибутам блоков?
[22.2] Как изменить (MODIFY) атрибуты блока?
[22.3] Как подкорректировать (UPDATE) атрибуты блока?
Nike вне форума  
 
Непрочитано 30.09.2010, 18:20
1 | #16
VVA

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


Цитата:
Сообщение от Zaghim Посмотреть сообщение
Потом каким-то образом их заменить (кстати как это сделать не знаю, всегда только что то выдергивал, а втыкать назад не пробовал).
А где АКАД хранит значения атрибутов?
Извлечение значений атрибутов блоков AutoCAD Electrical с помощью AutoLisp там смотреть ф-ции get-all-atts, mip-block-setattr-bylist и примеры их использования
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 30.09.2010, 21:48
#17
Zaghim


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


Всех обнял сразу, спасибо за помощь!!!!!!!!!!!! Буду разбираться!

Немного усложнилась задача. Блок стал динамический, стало 4 визибл сета... В общем когда вставляю блок, нужно сделать так что бы во всех этих 4 сетах менялось первые два значения атрибутов. Не понял как пользоваться этим:
Код:
[Выделить все]
Используйте entmod, и список entget будет извлечен из (attele). 
;;; изменяет значение атрибута на новое, группа 1 
(defun ATTCHG (ele attname new / b) (if (setq b (attele ele attname)) (entmod (subst (cons 1 new) (getval 1 b) b))))
Куда это впихивать и как оно заметит мне значения атрибута не понятно(((Прикрепляю блок...


В общем решил проблему опять по-своему, в таком виде:
Код:
[Выделить все]
(defun c:mip ()
  (vl-load-com)
  (setq nambl "путь и имя файла")
  (command "INSERT" nambl)
  (command)
  (setq cl 1)
  (if (= num nil)
    (setq num 1)
  )  
  (while cl
    (setq pt (getpoint "\nТыкай точку или <Enter>:"))
      (if (= pt nil)
        (setq cl nil)
    (progn
      (setq numbl "Kk - ")
          (setq numm (itoa num))
          (setq numbl (strcat numbl numm))
          (setq num (1+ num))
          (vl-cmdf "INSERT" "Kk" pt 1 1 0 numbl"""""""")
    )
      )
  )

)
в данном случае, если прервать команду и вызвать в след раз нумерация продолжиться с последнего номера...
Но данные меняются только в одном визибл сете, как сделать что бы менялись во всех четырех?

И еще вопрос немного не в тему, но как сделать в блоке, что когда я его перетаскиваю в разные углы, стрелка привязывалась к разным уголкам рамки с атрибутами...что-то наподобие мультистрелки
Вложения
Тип файла: dwg
DWG 2004
Пример.dwg (65.1 Кб, 3560 просмотров)

Последний раз редактировалось Zaghim, 02.10.2010 в 13:34.
Zaghim вне форума  
 
Непрочитано 16.09.2011, 14:29
1 | #18
VVA

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


Цитата:
Сообщение от Zaghim Посмотреть сообщение
Как при помощи лиспа сделать так, что бы при вставке блока, автоматически заполнялись его атрибуты. ... И самое главное реально ли, что, если я вышел из программы вставки блоков и закончил, например, на 10 блоке, что-то порисовал на чертеже, и теперь хочу продолжить вставлять блоки - запускаю заново прогу и блок у меня вставляется с номер 11,
Более того, если удалить блок, то атрибуты перенумеруются. AutoLabel Attributes the swamp или на страничке автора AutoLabel Attributes Lee Mac



По умолчанию имя блока должно быть "block", имя тэга атрибута "tag". Никаких команд нет.
Нужно
1. Открыть файл test.dwg
2. Загрузить в него лисп
3. Просто копируйте и удаляйте блоки
Настройку имени блока и имени атрибута нужно менять в следующих строчках кода
Код:
[Выделить все]
;; [Note: Block names and Attribute Tags are *not* case-sensitive]

(setq *blockname* "block"  ;; Name of Block to be Updated
      *blocktag*  "tag"    ;; Attribute Tag to be Updated
)
Вложения
Тип файла: lsp AutoLabelAttributesV1-0.lsp (7.8 Кб, 372 просмотров)
Тип файла: dwg
DWG 2004
test.dwg (38.9 Кб, 3709 просмотров)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 29.11.2012 в 12:09. Причина: добавил url странички автора
VVA вне форума  
 
Непрочитано 22.09.2011, 16:37
#19
angel-fear

инженер-электрик
 
Регистрация: 21.10.2010
Краснодар
Сообщений: 134


VVA, можно выложить это непосредственно на форум?
angel-fear вне форума  
 
Непрочитано 23.09.2011, 10:14
1 | #20
VVA

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


Добавил к #18
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Автоматическое изменение атрибутов блоков

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массовое редактирование свойств атрибутов блоков kgb Программирование 11 13.06.2023 14:39
Как поменять цвет атрибутов уже вставленных в чертёж блоков? МишаИнженер Программирование 5 09.10.2012 20:55
Тормозит команда расчленения набора блоков batmax Программирование 4 31.08.2010 17:37
Автоматическое заполнение атрибутов блоков. TheBuTeK Программирование 8 24.12.2007 17:22