Хелп ми!!! Помогите разрешить наболевшее. Мы рисуем выноски. Очень конкретные. Линия, на конце блок из круга и номера внутри. Все. Чертеж состоит из набора деталей, мы их помечаем каждую. Эти выноски можно «тягать» за центр круга, что собственно нам и нужно. Таких выносок бывает на чертеже до 100 шт. Но! В какой-то момент (прозевал детальку) возникает необходимость изменить числа в кружке. Очень хотелось бы автоматизировать вот это изменение значений в блоке в выноске. Выбрать сколько-то выносок, и всем числам прибавить какое-то значение. Например, выбрали выноски 3, 4, 5 и превратили их в 6, 7, 8 Может, есть уже что-то готовое или кто может помочь? Спасибо. Да, AutoCAD 2010.
Без примера чертежа с вашими блоками (хоть несколько штук на пустом чертеже)... врядли кто-то даже пытаться будет что-то делать.
мультивыноски, файл-пример прилагаю --- Сообщения объединены, 25 июл 2016, Оригинальное время сообщения: 25 июл 2016 --- Я пробовала, после выбора выноски выдает сообщение: error: Automation Error. Description was not provided. --- Сообщения объединены, 25 июл 2016 --- Мне в общем-то не надо префиксы-суффиксы, мне только поменять число в кружочке :-)
OlgaStadnik, с обычными мультивыносками этот лисп работает безотказно. По всей видимости проблема в аннотативности, или использование выносок с атрибутами. И страница разработчика, к сожалению закрыта.
Спасибо. Да, нам важна аннотативность. Я все думаю, может эти наши выноски каким-то другим способом изображать, например, динамическим блоком. Я пробовала его создавать, но важна привязка окружности к концу линии, а тогда видна часть линии в круге. Вот вроде и несложная задачка, а никак не решается
Ну, и в дополнение, для логического завершения темы, нужно бы показать Решение вопроса. Может кто-то еще столкнется с этой проблемой. Или через Поиск будет разыскивать.
;; Изменил немного код 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