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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Автонумерация LISP (Autocad)

Автонумерация LISP (Autocad)

Ответ
Поиск в этой теме
Непрочитано 29.07.2013, 21:18 #1
Автонумерация LISP (Autocad)
DrBianko
 
Разработка КМ, КМД, КЖ
 
Москва
Регистрация: 18.09.2011
Сообщений: 103

Может кто знает, существования LISPа авто нумерации в таком стиле:

Есть номера 1, 2, 3, 4, 5 ....... на чертеже.

Удаляю номер 3, и дальше 4ый стает 3им, 5ый - 4ым и т.д.
Просмотров: 25856
 
Непрочитано 29.07.2013, 21:57
2 | #2
Кулик Алексей aka kpblc
Moderator

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


Поиск "нумератор" или наподобие - это создание. Для удаления не все так просто будет, думаю...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 29.07.2013, 22:03
#3
DrBianko

Разработка КМ, КМД, КЖ
 
Регистрация: 18.09.2011
Москва
Сообщений: 103
Отправить сообщение для DrBianko с помощью Skype™


Спасибо, сейчас еще так поищу.

Не для удаления, а просто значения что бы все по-порядку были. Что то типа функции если значение младшее удалено, тогда от всех остальных "-1" )

Не знаю насколько сложно это реализовать в коде, поэтому трудно судить о возможности существования его....
DrBianko вне форума  
 
Непрочитано 29.07.2013, 22:51
1 | #4
b@r@b@n

проектирование КМ и КМД из ЛСТК
 
Регистрация: 15.04.2011
Украина, Запорожье
Сообщений: 256
Отправить сообщение для b@r@b@n с помощью Skype™


Алгоритм
1. Нужна переменная последнего значения (NUM_END).
2. Функция вставки текста (NUM_END+1), вместе с этим необходимо к тексту прицепить расширенные данные по которым мы сможем этот текст найти среди остальных текстов.
3. Функция поиска нашего текста и сортировки его по возрастанию результат точечная пара ("значение" . "имя объекта").
4. Функция проверки значений по порядку с исправлениями выпавших номеров и изменением NUM_END

Вместо текста может быть блок с атрибутом.

Хочу такую авто нумерацию на рамки сделать все руки не доходят )))
b@r@b@n вне форума  
 
Автор темы   Непрочитано 29.07.2013, 23:55
#5
DrBianko

Разработка КМ, КМД, КЖ
 
Регистрация: 18.09.2011
Москва
Сообщений: 103
Отправить сообщение для DrBianko с помощью Skype™


ага, именно такое мне нужно))))
DrBianko вне форума  
 
Непрочитано 30.07.2013, 00:03
2 | #6
AndruxaZ


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


Можешь тут глянуть http://www.lee-mac.com/autolabelattributes.html
AndruxaZ вне форума  
 
Непрочитано 30.07.2013, 00:51
#7
b@r@b@n

проектирование КМ и КМД из ЛСТК
 
Регистрация: 15.04.2011
Украина, Запорожье
Сообщений: 256
Отправить сообщение для b@r@b@n с помощью Skype™


Цитата:
Сообщение от AndruxaZ Посмотреть сообщение
Можешь тут глянуть http://www.lee-mac.com/autolabelattributes.html
Супер!!! Здесь в коде надо вставить только имя блока и Tag атрибута.
Спасибо!
b@r@b@n вне форума  
 
Автор темы   Непрочитано 30.07.2013, 02:13
#8
DrBianko

Разработка КМ, КМД, КЖ
 
Регистрация: 18.09.2011
Москва
Сообщений: 103
Отправить сообщение для DrBianko с помощью Skype™


Спасибо))) Именно так как я и хотел)

Все работает)) Спасибо большое)

Последний раз редактировалось DrBianko, 30.07.2013 в 02:21.
DrBianko вне форума  
 
Непрочитано 30.07.2013, 02:30
#9
b@r@b@n

проектирование КМ и КМД из ЛСТК
 
Регистрация: 15.04.2011
Украина, Запорожье
Сообщений: 256
Отправить сообщение для b@r@b@n с помощью Skype™


Цитата:
Сообщение от DrBianko Посмотреть сообщение
А получилось разобраться с ним?) А то что-то попробовал только "1" нумерует а дальше значение не изменяются.
У меня все работает )))
Только после изменений надо регенерацию делать тогда все значения перерисовываются
b@r@b@n вне форума  
 
Непрочитано 30.07.2013, 11:28
#10
Serghei


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


Цитата:
Сообщение от DrBianko Посмотреть сообщение
Спасибо))) Именно так как я и хотел)

Все работает)) Спасибо большое)
А можете пошагово расписать что Вы делаете?
Я скачал этот лисп, как и пишется в инструкции задаю имя блока (допустим созданный мной блок имеет имя page)
(setq *blockname* "block" ;; Name of Block to be Updated
*blocktag* "tag" ;; Attribute Tag to be Updated
)

А вот атрибуты. Тут у меня беда.
Что сделать чтобы программа и у меня заработала?
Serghei вне форума  
 
Непрочитано 30.07.2013, 14:14
#11
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Цитата:
Сообщение от Serghei Посмотреть сообщение
Что сделать чтобы программа и у меня заработала?
Выложить именно этот файл для общего обозрения,
указать версию Автокада и Windows (bytes) , тогда кто-то
возможно проверит.
Навскидку, может быть это динамические блоки?
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 30.07.2013, 15:35
#12
DrBianko

Разработка КМ, КМД, КЖ
 
Регистрация: 18.09.2011
Москва
Сообщений: 103
Отправить сообщение для DrBianko с помощью Skype™


Не обязательно необходимо изменять имена блоков. Если оставив все по умолчанию:





Только после этого подгружаем ЛИСП. Если загрузили до создания блока тогда все равно необходимо подгрузить заново.


После этого необходимо выполнить регенерацию модели (так же регенерацию выполнить необходимо при появление новых номеров)
Изображения
Тип файла: jpg 1.jpg (80.3 Кб, 9051 просмотров)
Тип файла: jpg 2.jpg (70.5 Кб, 9003 просмотров)
Тип файла: jpg 3.jpg (142.6 Кб, 8901 просмотров)
Тип файла: jpg 4.jpg (97.5 Кб, 8942 просмотров)

Последний раз редактировалось Кулик Алексей aka kpblc, 30.07.2013 в 16:20.
DrBianko вне форума  
 
Непрочитано 30.07.2013, 16:11
#13
Serghei


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


DrBianko Спасибо огромное. Получилось.
Serghei вне форума  
 
Непрочитано 14.11.2013, 20:02
#14
Бася


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


Уважаемые гуру, подскажите тем, кто на бронепоезде, как функцию запустить?
Сам лисп скачала с сайта (http://www.lee-mac.com/autolabelattributes.html), подгрузила и тэг с именем файла изменила.
Но вот не могу найти, как вызвать данную штуку. Я так поняла, что из коммандной строки она не запускается, а вот как тогда?

Заранее спасибо.

----- добавлено через ~26 мин. -----
ну вот, теперь получила сообщение
Цитата:
Command: APPLOAD
AutoLabelAttributesV1-0.lsp successfully loaded.
Command: ; error: too many arguments
Command:
что значит, много аргументов? блоков? у меня их около 600, не так уж и много
Бася вне форума  
 
Автор темы   Непрочитано 15.11.2013, 03:03
#15
DrBianko

Разработка КМ, КМД, КЖ
 
Регистрация: 18.09.2011
Москва
Сообщений: 103
Отправить сообщение для DrBianko с помощью Skype™


Да я вроде расписал как работает макрос 2 поста выше....
В пустом чертеже у вас работает макрос?

Если не работает конкретно в вашем чертеже, то если не секретный он, выложите его, так думаю быстрее помогут в чем проблема.
DrBianko вне форума  
 
Непрочитано 02.09.2015, 16:18
#16
sfynks


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


Спасибо, все работает. Прикольная штуковина
sfynks вне форума  
 
Непрочитано 02.09.2015, 19:28
#17
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Не могу молчать!(с)

Я, наверное ретроград, и отстал от жизни, но, однако, не понимаю, почему мой выложенный здесь несколько лет назад лисп для перенумеровеи блоков не востребован.

Код:
[Выделить все]
 (defun vu (bk / ov nv sl)
  (foreach at (vlax-safearray->list (vlax-variant-value (vla-getattributes bk)))
    (if (apply '= (mapcar '(lambda (x) (vla-get-TagString x)) (list att at)))
      (progn (setq ov (vla-get-TextString at))
	(if (= kw "Number") (setq nv (itoa (+ n dn)) ov (if (null ov) "XXX" ov))
	  (setq nv (itoa (+ (atoi ov) dn))));if
	(setq sl (mapcar 'strlen (list ov nv))
	      nv (cond ((= (apply '- sl) 2) (strcat "00" nv))
		       ((= (apply '- sl) 1) (strcat "0" nv))
		       (T nv)));setq
	(vla-put-TextString at nv))));foreach
);defun
; 
(defun C:AN-E ( / adoc ass util att bk n dn)
  (vl-load-com)
  (setq adoc (vla-get-ActiveDocument (vlax-get-Acad-object)))
  (mapcar '(lambda (x y) (set x (vlax-get-property adoc y))) '(ass util) '(ActiveSelectionSet Utility))
  (if (> (vla-get-count ass) 0) (vla-clear ass))
  (setq	cmd (getvar "CMDECHO") pca (getvar "PICKAUTO") n 0 )
  (setvar "CMDECHO" 0)
  (vla-InitializeUserInput util 128 "Number Renumber")
  (setq kw (vla-getKeyWord util "\n[Number/Renumber]? <Number>"))
  (if (= kw "") (setq kw "Number"))
  (setvar "PICKAUTO" (if (= kw "Number") 0 1))
  (vla-getSubentity util 'att nil nil nil "\nSelect Attribute")
  (if (vl-catch-all-error-p (vl-catch-all-apply '(lambda ()
             (setq dn (vla-getInteger util
			(strcat "\nInput " (if (= kw "Number") "start number" "number offset: <1>"))))))) (setq dn 1))
  (prompt (strcat "\nSelect Blocks for " kw "ing: "))
  (vla-SelectOnScreen ass (vlax-safearray-fill (vlax-make-safearray vlax-vbinteger '(0 . 0)) '(0))
      (vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 0)) (list "*Insert")))
  (vlax-for bk ass
    (if (= (vla-get-HasAttributes bk) :vlax-true)
      (if (= kw "Number") (progn (vu bk) (setq n (1+ n))) (vu bk))));vlax-for
 (setvar "CMDECHO" cmd)
 (setvar "PICKAUTO" pca)
 (princ)
);end 
Описание работы:
1. Выбираем режим Number/Renumber (Нумеровать/Перенумеровать)
2. Указываем на атрибут, с которым работать
3. Выбираем блоки, которые хотим. В случае нумерования - в соотв. порядке. В случае перенумерования - как угодно.
4. Наслаждаемся результатом.
Лентяй вне форума  
 
Непрочитано 02.09.2015, 19:54
#18
Andrey_nadym


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


Ув. Лентяй
Я пользуюсь Вашим кодом и очень давно.
Спасибо Вам.
Andrey_nadym вне форума  
 
Непрочитано 03.09.2015, 19:50
#19
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Пожалуйста! Пользуйся на радость себе и другим.
Лентяй вне форума  
 
Непрочитано 27.10.2016, 22:24
#20
СерJант

Инженер
 
Регистрация: 12.10.2007
Россия, Энгельс
Сообщений: 40


У меня проблема (((( может кто нибудь подробно расписать что и куда надо вбивать ? Я с блоками оч плохо дружу ((
помогите пожалуйста!

----- добавлено через 42 сек. -----
для этой штуковины что VBA нужно устанавливать?

----- добавлено через ~13 ч. -----
ув. Лентяй, если бы вы еще инструкцию к этому приложили что да как ....

с AutoLabelAttributes разобрался по инструкции DrBianko, только вставил значения как на сайте MyTag, myblock тогда заработало, потом из той инструкции не понятно где найти Определение атрибута, ведь не все этим гребаным риббоном пользуются, для акада логичнее классический вид, а там этой кнопки нет.

Найти эту кнопку можно в Адаптации - там в поиске конопок набрать Атрибут, найти кнопку с названием Блок задание Атрибутов - ее команда _attdef (ну это для тех у кого классический вид и не знает где найти эту кнопку, что бы время не тратить на поиски так сказать)

----- добавлено через ~13 ч. -----
кстати а что что бы обновлялись цифры надо все время вводить в командную строку autolabelon ??? Через регенерацию не работает

Последний раз редактировалось СерJант, 28.10.2016 в 13:33.
СерJант вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Автонумерация LISP (Autocad)

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автозаполнение ведомости чертежей и автонумерация листов в спдс 6 Кукурузо_Джон_Горыныч ПО от CSoft 34 15.02.2019 08:13
Автонумерация на пользу слаботочнику. есть идеи? zastroishik Программирование 3 14.06.2013 15:48
Одинаковые блоки с различными значениями одного и того же атрибута (автонумерация) Саид Программирование 3 03.08.2009 15:41
Модификация эксперессовского лиспа acettxt.lsp (автонумерация текста) Neznayka LISP 3 31.03.2009 01:11