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

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

Помогите плиз с программкой по автоматической нумерации

Ответ
Поиск в этой теме
Непрочитано 26.12.2005, 08:34
Помогите плиз с программкой по автоматической нумерации
Diman111
 
промышл проектант
 
Изовсехщелей
Регистрация: 26.05.2005
Сообщений: 307

Доброе время суток.
Ситуация:
есть набор блоков с изменяемым атрибутом. скажем - геометрический жлемент (круг) и рядом цифра - атрибут.
таких атрибутов на листе порядка 2 тыс. шт. требуется их все пронумеровать. т.е. дуб клик на блоке пишем 1; клик на другом- пишем 2 и т.д.
Просьба такая:
автоматизировать процесс следующим образом:
указываем начальную цифру нумерации - скажем 1;

выделяем набор блоков скажем слева на право жмем ентер и блоки нумеруются с лево на право;

выделяем набор блоков справо на лево жмем ентер и блоки нумеруются с право на лево;
(т.е. должен идти контроль по нумерации по оси х или y по желанию (в принципе и по х достаточно но для универсальности можно и по y));

и так повторяем пока все блоки не пронумеруем.
Выжеляем по 1 ряду.

Если не сложно помогите пожалуйста господа профи.
[ATTACH]1135575294.jpg[/ATTACH]
[ATTACH]1135575325.jpg[/ATTACH]
Просмотров: 41257
 
Непрочитано 28.01.2013, 17:16
#81
d.mOnII

Проектирование
 
Регистрация: 22.01.2013
Минск
Сообщений: 109
Отправить сообщение для d.mOnII с помощью Skype™


2 zamtmn
прошу прощения, если кого чем обидел, но:
я могу долго писать одно и тоже, но это не решит вопроса, так что не надо переворачивать
если пользователь только вошел в тему и решил поумничать или отписаться для галочки, то ну и ладно, но это лишнее, выше написан вопрос и некоторые аспекты существующих кодов
готовые варианты предложенные ранее проверены и не подходят, поэтому и прошу помочь, оговаривая, собственно, каждые моменты
или может необходимо сосдать один пост в котором перечислить все коды, которые пробовал:? со всех сайтов

2 Nike
Цитата:
По ссылке программа, которая ваши требования выполняет.

Вставляет аналогичный выбранному блок (1) через функцию вставки (2) с помощью LISP (3) c учетом префикса и добавление порядкового номера к префиксу (4).
Все в одном флаконе.

Спасибо сказал бы, что-ли...
Вы, пожалуйста, Сами попробуйте данный код и поймете что он не выполняет те функции, которые описаны выше

Последний раз редактировалось d.mOnII, 29.01.2013 в 09:31.
d.mOnII вне форума  
 
Непрочитано 29.01.2013, 10:30
#82
Alexeipost


 
Регистрация: 07.12.2010
Уфа
Сообщений: 374
<phrase 1=


Сталину доложили, что обнаружился его двойник.
- Расстрелять! - приказал Сталин.
- А, может, сбрить усы, товарищ Сталин?
- Ну, можно и так.

Это к тому что "я так много раз делал и впредь делать буду! И по-другому меня не учите!"
Alexeipost вне форума  
 
Непрочитано 29.01.2013, 11:03
#83
Nike

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


Цитата:
Сообщение от d.mOnII Посмотреть сообщение
2 Nike

Цитата:
По ссылке программа, которая ваши требования выполняет.

Вставляет аналогичный выбранному блок (1) через функцию вставки (2) с помощью LISP (3) c учетом префикса и добавление порядкового номера к префиксу (4).
Все в одном флаконе.

Спасибо сказал бы, что-ли...

Вы, пожалуйста, Сами попробуйте данный код и поймете что он не выполняет те функции, которые описаны выше
Ну, ладно, прости меня, дурака глупого.
Читал-читал твои "те функции, которые описаны выше" и так и нихрена не понял чё надо-то? Чтобы автокад за тебя все молча нумеровал?

А так сойдет -
Increase Size Decrease Size ???????µ???°?†???? ???·???µ?‰?°?‚?µ?»?µ??.avi
http://www.youtube.com/watch?v=-3YaCj9qu5g ?
Nike на форуме  
 
Непрочитано 29.01.2013, 12:21
#84
d.mOnII

Проектирование
 
Регистрация: 22.01.2013
Минск
Сообщений: 109
Отправить сообщение для d.mOnII с помощью Skype™


просто в офигенное русло перешел разговор
d.mOnII вне форума  
 
Непрочитано 29.01.2013, 13:25
#85
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,429
<phrase 1=


d.mOnII
>>я могу долго писать одно и тоже, но это не решит вопроса, так что не надо переворачивать
Да ты можешь. А можешь один раз нормально описать что надо и приложить пример что есть и как надо?
zamtmn вне форума  
 
Непрочитано 29.01.2013, 13:58
#86
d.mOnII

Проектирование
 
Регистрация: 22.01.2013
Минск
Сообщений: 109
Отправить сообщение для d.mOnII с помощью Skype™


Еще раз прошу прощения за оставленный ранее бардак в сообщениях

обобщаю (надеюсь так будет более понятно что я пытался спросить ранее)

Способ 1 (наверно самый сложный либо невозможный, этого я не знаю)

Цитата:
Сообщение от d.mOnII Посмотреть сообщение
а кто знает, можно ли индивидуально вшить автонумерацию в определенные блоки и что б если я просто вставлял блок любым из 4х способов срабатывала автонумерация
тричетыре способа вставки блока:
1. вставить выбранные/ADDSELECTED (вставляет аналогичный объект с полным соответствием всех свойст форматирования выделенному) [в каде появилась данная функция начиная с 2011]
2. через функцию вставка блока
3. через набор команды лисп как в кооде от VVA, описанном ранее
4. копи-паст (анализ таких же блоков с учетом префикса и добавление порядкового номера к префиксу)
полагаю это какой-то код, в котором пользователь прописывает сам имена блоков и имена атрибутов с которыми должена работать автонумерация

либо

Способ 2 (частично реализован в ранее предоставленных кодах ссылки на который размещены в данной теме от пользователей)

Цитата:
Сообщение от d.mOnII Посмотреть сообщение
1. что бы вставка блока производилось командой, например для лотка - ba_c (block add cable tray), для розетки - ba_s (block add socket) и т.д (с этим проблем нет правда библиотека лисп команд будет о-го-го ).
2. при вставке блока шел анализ существующих блоков с имеющимися префиксами (различные суфиксы для вычленения различных последовательностей автонумерации) и при наличии таковых - нумерация продолжалась (важно что бы анализ шел только в модели активного файла а не во всех открытых файлах)


Наиболее удачный код, который по моему мнению подходит для выполнения задач, от пользователя VVA "bink" из сообщения на http://www.caduser.ru ИМХО

Код:
[Выделить все]
(defun c:binc (/ oldStart oldPref oldSuf oldEcho oldInc
        oldSize oldBlock temBl *error* att attr apnum:tag pt)
  ;====================================================================
  (setq apnum:Block "BlockName") ;_Впиши имя блока здесь (Enter a name of the block here )
  (setq apnum:tag "Nomer")       ;_Впиши имя тага атрибута (Enter a tag name of attribute)
  ;===================================================================
;==== Local functions ============
  (defun *error* (msg)(setvar "CMDECHO" oldEcho)(setvar "ATTDIA" att)(setvar "ATTREQ" attr)(princ)); end *error*
  (defun mip-conv-to-str (dat)
  (cond ((= (type dat) 'INT)(setq dat (itoa dat)))
         ((= (type dat) 'REAL)(setq dat (rtos dat 2 12)))
        ((null dat)(setq dat ""))
        (t (setq dat (vl-princ-to-string dat)))))
;; obj - Ename or Vla object of block
;; att_list - list ((Tag_Name1 . Value1)(Tag_Name2 . Value2) ...)
;;                 Tag_Name - string
;;                    Value - string
(defun mip-block-setattr-bylist (obj att_list / txt lst)
(if (= (type obj) 'ENAME)(setq obj (vlax-ename->vla-object obj)))
(setq att_list (mapcar '(lambda(x)(cons (strcase (mip-conv-to-str(car x)))(mip-conv-to-str(cdr x)))) att_list))
  (if (and obj
           (not(vlax-erased-p obj))
           (= (vla-get-ObjectName obj) "AcDbBlockReference")
      (eq :vlax-true (vla-get-HasAttributes obj))
      (vlax-property-available-p obj 'Hasattributes)
      (vlax-write-enabled-p obj)
      )
    (vl-catch-all-apply
      (function
   (lambda   ()
          (foreach at (vlax-invoke obj 'Getattributes)
            (if (setq lst (assoc(strcase(vla-get-TagString at)) att_list))
              (vla-put-TextString at (cdr lst))
            )
            )
          )
        )
      )
    )
  )
;==== Local functions END ============
  (if(not apnum:Size)(setq apnum:Size 1.0))
  (if(not apnum:Num)(setq apnum:Num 1))
  (if(not apnum:Inc)(setq apnum:Inc 1))
  (if(not apnum:Pref)(setq apnum:Pref ""))
  (if(not apnum:Suf)(setq apnum:Suf ""))
  (setq  oldStart apnum:Num oldSize apnum:Size oldInc apnum:Inc
         oldPref apnum:Pref oldSuf apnum:Suf
         apnum:Block (mip-conv-to-str apnum:Block)
         apnum:tag (mip-conv-to-str apnum:tag)
         oldEcho (getvar "CMDECHO")
         att (getvar "ATTDIA") attr (getvar "ATTREQ")); end setq
  (setvar "ATTDIA" 0)(setvar "ATTREQ" 0)
  (setvar "CMDECHO" 0)
    (setq apnum:Pref
    (getstring T
      (strcat "\nType prefix:(If you want to delete prefix type ' ' (press SPACE key on keyboard) <"apnum:Pref"> :")))
  (if(= "" apnum:Pref)(setq apnum:Pref oldPref))
  (if(= " " apnum:Pref)(setq apnum:Pref ""))
  (setq apnum:Suf
    (getstring T
       (strcat "\nType suffix:(If you want to delete prefix type ' ' (press SPACE key on keyboard) <"apnum:Suf"> :")))
  (if(= "" apnum:Suf)(setq apnum:Suf oldSuf))
  (if(= " " apnum:Suf)(setq apnum:Suf ""))
  (setq apnum:Num
    (getint
      (strcat "\nSpecify start number <"(itoa apnum:Num)">: ")))
  (if(null apnum:Num)(setq apnum:Num oldStart))
  (setq apnum:Inc
    (getint
      (strcat "\nSpecify increment <"(itoa apnum:Inc)">: ")))
  (if(null apnum:Inc)(setq apnum:Inc oldInc))
  (setq apnum:Size
    (getreal
      (strcat "\nSpecify block scale <"(rtos apnum:Size)">: ")))
  (if(null apnum:Size)(setq apnum:Size oldSize))
  (if apnum:Block(setq oldBlock apnum:Block))
;;;  (setq temBl
;;;     (entsel(strcat "\nSelect block <"
;;;         (if apnum:Block apnum:Block "not difined") "> > "))); end setq
  (cond
    ((null (tblsearch "BLOCK" apnum:Block))
     (alert (strcat "Block " apnum:Block " not found"))
     (setq apnum:Block nil)
     ); end condition #0
    ((and apnum:Block(not temBl)(tblsearch "BLOCK" apnum:Block))
    (setq apnum:Block oldBlock)
     ); end condition #1
    ((and tembl (= 1 (cdr(assoc 66(entget(car temBl))))))
    (setq apnum:Block(cdr(assoc 2(entget(car temBl)))))
    ); end condition #2
    (t
     (princ "\nBlock not contains attribute! ")
     (setq apnum:Block nil)
     ); end condition #3
    ); end cond
  (if apnum:Block
    (progn
(while T
  (princ "\n>>> Pick insertion point or press Esc to quit <<<\n")
  (command "_-insert" apnum:Block "_s" apnum:Size pause "0")
   (mip-block-setattr-bylist (entlast)
     (list(cons (strcase (mip-conv-to-str apnum:tag))
                (strcat apnum:Pref(itoa apnum:Num)apnum:Suf))))
    (setq apnum:Num (+ apnum:Num apnum:Inc))
  ); end while
); end progn
    ); end if
  (setvar "ATTDIA" att)(setvar "ATTREQ" attr)
  (princ)
  )
З.Ы. возможно ли как-то решить вопрос с появлением дыр в последовательности при удалении того или иного блока - не обязательно
возможно ли как-то решить вопрос с тем, что код не анализирует существующие блоки и автонумерацию поддерживает только в пределах одной сесси (такое не со всеми кодами), потом необходимо заново искать последний номер последовательности и стартовую цифру вводить самому


=========================06.02.2013=====================================

Прошу прощения, что не дожидаясь ответа снова пишу, но хотелось бы уточнить, я что-то в данном посте снова не так написал:? или просто вопросы не решаемы?

Последний раз редактировалось d.mOnII, 06.02.2013 в 20:34. Причина: уточнение решаемости вопроса
d.mOnII вне форума  
 
Непрочитано 21.08.2013, 14:31
#87
gest

GEODATA Engineering S.p.A.
 
Регистрация: 11.02.2005
Монино
Сообщений: 668


Уважаемый VVA не подскажете по sn из поста №40, идет такая нумерация
Рамка сверху-влево-вниз
http://forum.dwg.ru/attachment.php?a...1&d=1377080396
Рамка сверху-справа-вниз
http://forum.dwg.ru/attachment.php?a...1&d=1377080396

Версия sn1 расставляет нумерацию нормально, но нет возможности выбора рамкой
http://forum.dwg.ru/attachment.php?a...1&d=1377081089
Миниатюры
Нажмите на изображение для увеличения
Название: 2013-08-21_141753.png
Просмотров: 244
Размер:	3.4 Кб
ID:	110207  Нажмите на изображение для увеличения
Название: 2013-08-21_141846.png
Просмотров: 134
Размер:	3.4 Кб
ID:	110208  Нажмите на изображение для увеличения
Название: 2013-08-21_143236.png
Просмотров: 160
Размер:	3.5 Кб
ID:	110210  
gest вне форума  
 
Непрочитано 04.10.2015, 11:48
#88
Ilez

Техник АС, КЖ
 
Регистрация: 24.09.2013
Ingushetiya
Сообщений: 383


Цитата:
Сообщение от Alan Посмотреть сообщение
Вообще-то количество букв ограничено...
Но никто вам не мешает использовать список Букв
Код:
[Выделить все]
(setq MList  '(А Б В Г Д Е Ж И К Л М Н П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я))
;;;с последовательным выбором из списка
(setq marka (nth i Mlist))
;;; ,где i - счетчик цикла
за место чего вставлять этот код, чтобы нумеровать по буквам? Меня интересует обычный нумератор текста, например из #43.
Offtop: Вообще не разбираюсь в лиспе
Ilez вне форума  
 
Непрочитано 04.10.2015, 15:45
#89
san40

начинающий конструктор
 
Регистрация: 05.04.2012
Сообщений: 121


Для нумерации пользуюсь бесплатным расширением автокада "increment" с оф. сайта, для большинства базовых задач - вполне.
Вот здесь подробнее:
https://apps.autodesk.com/ACD/ru/Det...increment%3aen
san40 вне форума  
 
Непрочитано 04.10.2015, 20:45
#90
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,779
<phrase 1=


Цитата:
Сообщение от Ilez Посмотреть сообщение
за место чего вставлять этот код, чтобы нумеровать по буквам?
Я отвечал на п.46
Цитата:
Сообщение от v_alex Посмотреть сообщение
но не нашел возможности нумеровать атрибуты буквами А, Б, В и так далее... в общем хочется блоки осей нумеровать...
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 04.10.2015, 22:51
#91
Ilez

Техник АС, КЖ
 
Регистрация: 24.09.2013
Ingushetiya
Сообщений: 383


Цитата:
Сообщение от san40 Посмотреть сообщение
Для нумерации пользуюсь бесплатным расширением автокада "increment" с оф. сайта, для большинства базовых задач - вполне.
Вот здесь подробнее:
https://apps.autodesk.com/ACD/ru/Det...increment%3aen
Спасибо, посмотрел - интересный функционал, но насколько я понял там последовательность А, Б, В, Г, Д, ... не задаётся, только английская А...Z.

Цитата:
Сообщение от Alan Посмотреть сообщение
Я отвечал на п.46
Да я знаю. Я имел ввиду куда бы подставить ваш массив (в какой части нумератора, хоть простейшего), чтобы им воспользоваться. Сам я вообще не ориентируюсь в коде, поэтому задаю столь элементарный вопрос.
Ilez вне форума  
 
Непрочитано 01.12.2016, 14:44
#92
greyser


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


Цитата:
Сообщение от VVA Посмотреть сообщение
tryba22,
Добавил с другого нумератора. Не проверял, но должно работать. Перевод, если нужно, сделаешь сам.
Код:
[Выделить все]
(defun C:SN (/ *error* adoc att_list axss blk_list fpt num oaq oat oqa osm sort_list spt test_list cm blkname attname e1 oldPref oldSuf)
;;; Vladimir Azarko (VVA) for dwr.ru  
;;;http://forum.dwg.ru/showthread.php?t=5059&page=2
;;; 11.04.20112 Добавлен префикс суффикс
;;; 17.11.2008 Добавлена обработка динамических блоков (эффективное имя)
;;; Модификация кода Лентяй, опубликованного
;;; http://dwg.ru/f/showpost.php?p=50584&postcount=37
;;; В переменные blkname и attname вынесены названия блока и атрибута для хранения номера
;;; Полезные ссылки:
;;; Нумерация, перенумерация
;;; http://www.caduser.ru/cgi-bin/f1/boa...33416cQ&page=1
;;; Как правильно загрузить этот лисп
;;; http://dwg.ru/art/8
  (setq blkname "СВАЯ"  ;_ Имя блока сваи
 attname "NUM"   ;_ Имя аттрибута
  )
  (vl-load-com) 
  (defun *error* (error) 
    (cond ((not error)) 
          ((wcmatch (strcase error) "*QUIT*,*CANCEL*")) 
          (1 (princ (strcat "\nERROR: " error)))) 
    (setvar "osmode" osm)  (setvar "attdia" oat) 
    (setvar "attreq" oaq) (setvar "qaflags" oqa) 
    (setvar "cmdecho" 1) (vla-endundomark adoc) 
    (princ));defun 
  (setq adoc (vla-get-activedocument (vlax-get-acad-object))) 
  (vla-endundomark adoc) 
  (vla-startundomark adoc) 
  (setvar "cmdecho" 0) 
  (setq oat (getvar "attdia") osm (getvar "osmode") 
        oaq (getvar "attreq") oqa (getvar "qaflags")) 
  (setvar "attdia" 0);Выводятся запросы в командной строке (окно подавляется) 
  (setvar "attreq" 0);Для каждого атрибута не выдается запрос значения    
  (setvar "qaflags" 0);Запрет вывода на экран окон предупреждений, перенос их в командную строку  
  (setvar "osmode" 0) 
  (setq fpt (getpoint "\nПервый угол рамки выбора >> \n") 
               spt (getcorner fpt "\nВторой угол рамки выбора >> \n"))
  
    (if  (setq axss (ssget "_W" fpt spt (list (cons 0 "INSERT")(cons 66 1))))
      (progn
 (setq num '-1)
 (repeat (sslength axss)
   (setq blk_list (cons (vlax-ename->vla-object(ssname axss (setq num (1+ num)))) blk_list))
   )
(or rnm:Pref(setq rnm:Pref ""))(or rnm:Suf(setq rnm:Suf ""))
(setq oldPref rnm:Pref oldSuf rnm:Suf); end setq
(setq rnm:Pref (getstring T
		 (strcat "\nType prefix:(If you want to delete prefix type ' ' (press SPACE key on keyboard) <" rnm:Pref "> :")))
(if(= "" rnm:Pref)(setq rnm:Pref oldPref))(if(= " " rnm:Pref)(setq rnm:Pref ""))
(setq rnm:Suf (getstring T
                (strcat "\nType suffix:(If you want to delete prefix type ' ' (press SPACE key on keyboard) <"rnm:Suf"> :")))
(if(= "" rnm:Suf)(setq rnm:Suf oldSuf))(if(= " " rnm:Suf)(setq rnm:Suf ""))
 (initget 4) 
        (setq num (getint "\n\t >> Начальный номер [Enter для продолжения] : ")) 
        (if (not num) (setq num (if *last_number* *last_number* 
                            (getint "\n\t >> Первый раз номер задается обязательно  : "))))
        (initget "Вперед Назад") 
        (setq dir (getkword "\nНаправление [Вперед/Назад]: <Вперед>")) 
        (if (null dir) (setq dir "Вперед")) 
        (if (= dir "Вперед") (setq cm <) (setq cm >))  
        (setq test_list (mapcar '(lambda (x) (vlax-get x 'Insertionpoint)) blk_list) 
              sort_list (vl-sort blk_list '(lambda (e1 e2) 
                          (if (vl-every '(lambda (x) (equal (cadr x) (cadar test_list) 0.1)) test_list) 
                            (cm (abs (- (car fpt) (car (vlax-get e1 'Insertionpoint)))) 
                               (abs (- (car fpt) (car (vlax-get e2 'Insertionpoint))))) 
                            (cm (abs (- (cadr fpt) (cadr (vlax-get e1 'Insertionpoint)))) 
                               (abs (- (cadr fpt) (cadr (vlax-get e2 'Insertionpoint)))))))));setq 
        (foreach blk_obj sort_list 
          (if (and (vlax-property-available-p blk_obj 'Hasattributes) 
                   (vlax-read-enabled-p blk_obj) (vlax-write-enabled-p blk_obj)
     (= (strcase blkname)
        (strcase
   (cond
     ((and (vlax-property-available-p blk_obj 'isdynamicblock)
    (= (vla-get-isdynamicblock blk_obj) :vlax-true)
    ) ;_ end of and
      (vla-get-effectivename blk_obj)
      )
     (t (vla-get-name blk_obj))
     )
   )
        )
     )
            (progn (setq att_list (vlax-invoke blk_obj 'Getattributes)) 
              (foreach at att_list 
                (if (eq (strcase(vla-get-tagstring at))(strcase attname))
                  (progn (vla-put-textstring at (strcat rnm:Pref (itoa num) rnm:Suf)) 
                    (vla-update at) (vla-update blk_obj))))));if 
          (setq num (1+ num)));foreach 
        (setq axss nil) 
        (setq blk_list nil)));if 
  (setq *last_number* num) 
  (vla-regen adoc acactiveviewport) 
  (*error* nil) 
  (princ) 
);end 
(prompt "\nВ командной строке набери SN \n") 
(princ)


Спасибо большое за нумератор!
Можно ли модифицировать программу, чтобы при выполнении она запрашивала блок и атрибут. А то при нумерации разных блоков приходится каждый раз править код

upd
нашел тут #29 http://forum.dwg.ru/showthread.php?t=46382&page=2

Последний раз редактировалось greyser, 01.12.2016 в 15:31.
greyser вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите плиз с программкой по автоматической нумерации

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

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