Помогите в перенумерации выносок

Тема в разделе "Autocad", создана пользователем OlgaStadnik, 25 июл 2016.

  1. Хелп ми!!!
    Помогите разрешить наболевшее. Мы рисуем выноски. Очень конкретные. Линия, на конце блок из круга и номера внутри. Все. Чертеж состоит из набора деталей, мы их помечаем каждую. Эти выноски можно «тягать» за центр круга, что собственно нам и нужно. Таких выносок бывает на чертеже до 100 шт. Но! В какой-то момент (прозевал детальку) возникает необходимость изменить числа в кружке. Очень хотелось бы автоматизировать вот это изменение значений в блоке в выноске. Выбрать сколько-то выносок, и всем числам прибавить какое-то значение. Например, выбрали выноски 3, 4, 5 и превратили их в 6, 7, 8 Может, есть уже что-то готовое или кто может помочь? Спасибо.
    Да, AutoCAD 2010.
     
  2. Philin

    Philin Форумчанин

    Без примера чертежа с вашими блоками (хоть несколько штук на пустом чертеже)... врядли кто-то даже пытаться будет что-то делать.
     
  3. Сер-гео

    Сер-гео Форумчанин

    Я думаю их устроит меню ГЕО, работа с текстом.
     
  4. sergtor

    sergtor Форумчанин

    OlgaStadnik, а какие у Вас выноски:? Быстрые или мультивыноски?
     
  5.  

    Вложения:

  6. sergtor

    sergtor Форумчанин

    OlgaStadnik, попробуйте этот вариант.
     

    Вложения:

  7. мультивыноски, файл-пример прилагаю
    --- Сообщения объединены, 25 июл 2016, Оригинальное время сообщения: 25 июл 2016 ---
    Я пробовала, после выбора выноски выдает сообщение:
    error: Automation Error. Description was not provided.
    --- Сообщения объединены, 25 июл 2016 ---
    Мне в общем-то не надо префиксы-суффиксы, мне только поменять число в кружочке :-)
     

    Вложения:

  8. sergtor

    sergtor Форумчанин

    OlgaStadnik, с обычными мультивыносками этот лисп работает безотказно. По всей видимости проблема в аннотативности, или использование выносок с атрибутами. И страница разработчика, к сожалению закрыта.
     
  9. Спасибо. Да, нам важна аннотативность. Я все думаю, может эти наши выноски каким-то другим способом изображать, например, динамическим блоком. Я пробовала его создавать, но важна привязка окружности к концу линии, а тогда видна часть линии в круге. Вот вроде и несложная задачка, а никак не решается
     
  10. sergtor

    sergtor Форумчанин

    OlgaStadnik, а посмотрите этот нумератор. Может устроит.
     
  11. Всем огромное спасибо. Мне уже помогли на другом форуме
     
  12. sergtor

    sergtor Форумчанин

    Ну, и в дополнение, для логического завершения темы, нужно бы показать Решение вопроса. Может кто-то еще столкнется с этой проблемой. Или через Поиск будет разыскивать.
     
    MaxKal нравится это.
  13. ;; Изменил немного код Lee Maca под твой тип мультивыносок

    (defun c:ML_Inc (/ *error* ParseNumbers uFlag ss attname)
    (vl-load-com)
    ;; Инкремент мультивыносок, у которых блок-источник имеет атрибут с тагом, хранящимся в переменной attname
    (setq attname "TAGNUMBER") ;_Имя аттрибута блока-источника, хранящего значение
    (defun *error* (msg)
    (setvar 'NOMUTT 0)
    (and uFlag (vla-EndUndoMark *doc))
    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
    (princ (strcat "\n** Error: " msg " **")))
    (princ))
    (defun ParseNumbers (str / lst Num Aph x rtn)
    ;; Lee Mac ~ 20.09.09
    (setq lst (vl-string->list str) Num "" Aph "")
    (while (setq x (car lst))
    (setq lst (cdr lst))
    (cond ( (and (/= "" Num) (= 46 x))
    (setq Num (strcat Num (chr x))))
    ( (< 47 x 58)
    (setq Num (strcat Num (chr x))
    rtn (cons Aph rtn) Aph ""))
    (t (setq Aph (strcat Aph (chr x))
    rtn (cons (read Num) rtn) Num ""))))
    (vl-remove nil
    (vl-remove "" (reverse (cons Aph (cons (read Num) rtn))))))
    (setvar 'NOMUTT 0)
    (setq *inc* (cond (*inc*) (1)))
    (setq *inc* (cond ((getint (strcat "\nSpecify Increment <"
    (vl-princ-to-string *inc*) "> : ")))
    (*inc*)))
    (setq *doc (cond (*doc) ((vla-get-ActiveDocument (vlax-get-acad-object)))))
    (setvar 'NOMUTT 1)
    (princ "\nSelect Text to Increment <All> : ")
    (if (or (ssget "_:L" '((0 . "MULTILEADER")))
    (ssget "_X" '((0 . "MULTILEADER"))))
    (progn
    (setq uFlag (not (vla-StartUndoMark *doc)))
    (vlax-for obj (setq ss (vla-get-ActiveSelectionSet *doc))
    (if (= 1 (vla-get-ContentType obj)) ;;_Мультивыноски имеют блок-источник
    (LM:SetMLeaderBlockAttributeValue obj attname
    (apply (function strcat)
    (mapcar
    (function
    (lambda (x) (if (vl-position (type x) '(INT REAL))
    (mip-conv-to-str (+ x *inc*)) x)))
    (ParseNumbers (LM:SetMLeaderBlockAttributeValue obj attname nil)))))))
    (vla-delete ss)
    (setq uFlag (vla-EndUndoMark *doc))))
    (setvar 'NOMUTT 0)
    (princ))
    ;;---------=={ Set MLeader Block Attribute Value }==----------;;
    ;; ;;
    ;; Sets the value of the specified tag for the specified ;;
    ;; MLeader ;;
    ;;------------------------------------------------------------;;
    ;; Author: Lee McDonnell, 2010 ;;
    ;; ;;
    ;; Copyright © 2010 by Lee McDonnell, All Rights Reserved. ;;
    ;; Contact: Lee Mac @ TheSwamp.org, CADTutor.net ;;
    ;;------------------------------------------------------------;;
    ;; Arguments: ;;
    ;; mleader - ename/VLA-Object MLeader with attributed block ;;
    ;; tag - Tagstring of the attribute to change ;;
    ;; value - Value to which attribute will be set or nil ;;
    ;; (if value eq nil, then return current value ) ;;
    ;;------------------------------------------------------------;;
    ;; Returns: T if successful, else nil ;;
    ;;------------------------------------------------------------;;
    (defun LM:SetMLeaderBlockAttributeValue ( mleader tag value / def id )
    (vl-load-com)
    ;; © Lee Mac 2010
    (if
    (and
    (eq "AcDbMLeader"
    (vla-get-Objectname
    (setq mleader
    (cond
    ( (eq 'VLA-OBJECT (type mleader)) mleader)
    ( (vlax-ename->vla-object mleader) )
    )
    )
    )
    )
    (= 1 (vla-get-ContentType mleader))
    (setq def
    (LM:Itemp
    (vla-get-Blocks
    (vla-get-ActiveDocument
    (vlax-get-acad-object)
    )
    )
    (vla-get-ContentBlockName mleader)
    )
    )
    )
    (if
    (progn
    (vlax-for obj def
    (if (and (eq "AcDbAttributeDefinition" (vla-get-Objectname obj))
    (eq (strcase tag) (strcase (vla-get-TagString obj))))
    (setq id (vla-get-ObjectID obj))
    )
    )
    id
    )
    (if value
    (not (vla-SetBlockAttributeValue mleader id value))
    (vla-GetBlockAttributeValue mleader id)
    )
    )
    )
    )
    ;;-----------------------=={ Itemp }==------------------------;;
    ;; ;;
    ;; Retrieves the item with index 'item' if present in the ;;
    ;; specified collection, else nil ;;
    ;;------------------------------------------------------------;;
    ;; Author: Lee McDonnell, 2010 ;;
    ;; ;;
    ;; Copyright © 2010 by Lee McDonnell, All Rights Reserved. ;;
    ;; Contact: Lee Mac @ TheSwamp.org, CADTutor.net ;;
    ;;------------------------------------------------------------;;
    ;; Arguments: ;;
    ;; coll - the VLA Collection Object ;;
    ;; item - the index of the item to be retrieved ;;
    ;;------------------------------------------------------------;;
    ;; Returns: the VLA Object at the specified index, else nil ;;
    ;;------------------------------------------------------------;;

    (defun LM:Itemp ( coll item )
    ;; © Lee Mac 2010
    (if
    (not
    (vl-catch-all-error-p
    (setq item
    (vl-catch-all-apply
    (function vla-item) (list coll item)
    )
    )
    )
    )
    item
    )
    )
    (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)))
    ) ;_ end of cond
    ) ;_ end of defun
     
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление