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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Редактирование атрибута дин. блока по двойному нажатию мышью.

Редактирование атрибута дин. блока по двойному нажатию мышью.

Ответ
Поиск в этой теме
Непрочитано 03.08.2016, 21:08 #1
Редактирование атрибута дин. блока по двойному нажатию мышью.
Enik
 
ГИП
 
Регистрация: 07.06.2015
Сообщений: 1,254

Здравствуйте, форумчане!

Сейчас делаю исполнительную геодезическую документацию. В ней нужно указать множество точек на плане и дать их координаты. Сварганил простенький динамический блок отметки на плане со скрытыми атрибутами. С выгрузкой координат в таблицу - всё отлично. Два щелчка - и каталог координат готов. Но вот незадача: вводить имя каждой точки приходится через свойства дин. блока. Очень неудобно.

Кто знает, как сделать редактирование текста атрибута "Name" по двойному нажатию мышкой, как для мультивыноски?

Динамический блок прилагается.

PS. В блоке координаты X и Y я поменял местами специально. Такая вот у нас система координат.

PSS. А если ещё и автообновление координат при перемещении блока удастся сделать - будет вообще шикарно.

Вложения
Тип файла: dwg
DWG 2013
Плановая отметка.dwg (39.8 Кб, 70 просмотров)


Последний раз редактировалось Enik, 03.08.2016 в 21:13.
Просмотров: 9444
 
Непрочитано 04.08.2016, 05:29
1 | #2
Gmk17

САПРовод
 
Регистрация: 22.01.2013
Красноярск
Сообщений: 290


Ctrl зажимаешь и даблкликаешь на атрибуте.

P.S. А зачем атрибут NAME сделан многострочным?
Gmk17 вне форума  
 
Автор темы   Непрочитано 04.08.2016, 09:18
#3
Enik

ГИП
 
Регистрация: 07.06.2015
Сообщений: 1,254


Цитата:
Сообщение от Gmk17 Посмотреть сообщение
trl зажимаешь и даблкликаешь на атрибуте.
Спасибо! Работает.

Цитата:
Сообщение от Gmk17 Посмотреть сообщение
P.S. А зачем атрибут NAME сделан многострочным?
На тот случай, если
а) под точкой идёт примечание, чем она является. Например, "Т. 1/Врезка в существующую сеть".
б) если у одной и той же точки есть два обозначения. Например, когда наш колодец также относится к другой сети: "Л-1/К-86.5-1".

Я пока что до этих точек не дошёл. Но вроде бы такой многострочный текст должен экспортироваться в таблицу без проблем.
Enik вне форума  
 
Непрочитано 19.08.2016, 17:08
#4
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от Gmk17 Посмотреть сообщение
Ctrl зажимаешь и даблкликаешь на атрибуте.
Сначала мне этот способ тоже понравился, но на некоторых блоках, где есть атрибуты в других наборах параметра видимости частенько вылезает не тот атрибут, на который "контрольно даблкликнул", а другой, скрытый в данном состоянии видимости; после этого вылезший атрибут больше не пропадает - приходится отменять сделанное. Глюк, в общем, какой-то. Кто знает из-за чего он и как победить - буду признателен за рассказ.

Я нашел другое решение.
В адаптации (_CUI) в операциях при двукратном нажатии на атрибут динамического блока ставим макрос (не для LT):
Код:
[Выделить все]
^C^C_ATTIPEDIT;(cadr (grread T))
Правда, если нужно исправить атрибут, содержащий пробел, по нему кликнуть не получится - придется вызывать окно редактора атрибутов вручную (_EATTEDIT) или с кнопки. Запилить бы даблклик с контролом на вызов этой команды было бы здорово, но как - пока ума не приложу.

И вдогонку: если не нравится штатный редактор атрибутов (а он, мягко говоря, слегка кастрирован - уж не знаю, зачем), назначаем переменной ATTIPE значение 1 и работаем в удобном и привычном редакторе м-текста.
skkkk вне форума  
 
Непрочитано 22.08.2016, 16:09
#5
sertor

Геодезист
 
Регистрация: 23.05.2012
Ухта
Сообщений: 1,374


Цитата:
Сообщение от skkkk Посмотреть сообщение
В адаптации (_CUI) в операциях при двукратном нажатии на атрибут динамического блока ставим макрос (не для LT):
Код:
Код:
[Выделить все]
^C^C_ATTIPEDIT;(cadr (grread T))
А как быть, если нужно удалить какой-нибудь атрибут?
__________________
Как-то так.
sertor вне форума  
 
Непрочитано 23.08.2016, 00:30
#6
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от sertor Посмотреть сообщение
А как быть, если нужно удалить какой-нибудь атрибут?
Не понятен вопрос. Разве его можно как-то удалить при помощи стандартного варианта редактирования атрибутов? Я имею в виду операцию при двукратном нажатии по умолчанию. Насколько я понимаю, удалить атрибут надо войдя в редактор блока. Или речь не об этом?
skkkk вне форума  
 
Непрочитано 23.08.2016, 08:29
#7
sertor

Геодезист
 
Регистрация: 23.05.2012
Ухта
Сообщений: 1,374


Цитата:
Сообщение от skkkk Посмотреть сообщение
Не понятен вопрос. Разве его можно как-то удалить при помощи стандартного варианта редактирования атрибутов? Я имею в виду операцию при двукратном нажатии по умолчанию. Насколько я понимаю, удалить атрибут надо войдя в редактор блока. Или речь не об этом?
Я пытался прикрутить Ваш макрос для редактирования атрибутов блока при двукратном нажатии в чертеже. По-умолчанию, появляется окно стандартного редактора (скрин 1). Иногда, некоторые атрибуты необходимо удалить. В этом случае удаление происходит безболезненно. А при использовании макроса удалить значение атрибута невозможно, хотя на мой взгляд, работать с ним удобнее.
Миниатюры
Нажмите на изображение для увеличения
Название: Image 1.png
Просмотров: 132
Размер:	12.6 Кб
ID:	175072  Нажмите на изображение для увеличения
Название: Image 3.png
Просмотров: 107
Размер:	6.7 Кб
ID:	175073  
__________________
Как-то так.
sertor вне форума  
 
Непрочитано 23.08.2016, 09:34
1 | #8
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Теперь понял - удалить значение атрибута (содержимое). Действительно, при попытке стереть текст в редакторе м-текста и выходе из него содержимое восстанавливается. Один из вариантов - добавить кнопку или сочетание клавиш на вызов стандартного окна редактирования. Я же в таких случаях ставлю просто пробел.
skkkk вне форума  
 
Непрочитано 22.08.2017, 21:12
#9
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


skkk (#4), можно попробовать команду, про которую мало кто помнит, Называлась она TEDIT и принадлежала к экспрессам старых автокадов, а затем исчезла.
Я ее лисп все время тащил в каждую новую версию ибо она работает несколько по-другому чем стандартная команда DDEDIT редактирования текста. Затем в 2016 имя TEXTEDIT появилось в основном автокаде заменив имя сущ. команды DDEDIT, ничего не изменив по сути. Экспрессовский лисп перестал работать. Выкладываю подправленный лисп. Попробуй для своей задачи Вот этот лисп Он покажет все атрибуты блока, насчет невидимых не проверял, попробуй.
Кстати, не проверял лисп на версиях старше 2016. Если не сработает, надо разыскать (поиском по форуму) старую версию TEDIT
Код:
[Выделить все]
 ;;
;;  tedit.lsp - generic text editing
;;
;;  Copyright © 1999 by Autodesk, Inc.
;;
;;  Your use of this software is governed by the terms and conditions of the
;;  License Agreement you accepted prior to installation of this software.
;;  Please note that pursuant to the License Agreement for this software,
;;  "[c]opying of this computer program or its documentation except as
;;  permitted by this License is copyright infringement under the laws of
;;  your country.  If you copy this computer program without permission of
;;  Autodesk, you are violating the law."
;;
;;  AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
;;  AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
;;  MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE.  AUTODESK, INC.
;;  DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
;;  UNINTERRUPTED OR ERROR FREE.
;;
;;  Use, duplication, or disclosure by the U.S. Government is subject to
;;  restrictions set forth in FAR 52.227-19 (Commercial Computer
;;  Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
;;  (Rights in Technical Data and Computer Software), as applicable.
;;
;;  ----------------------------------------------------------------
;;
;;  DESCRIPTION
;;  The TEDIT command provides a single command for editing all 
;;  forms of annotation objects.
;;
;;  ----------------------------------------------------------------
 
(defun C:TEDIT (/ noll filter ss idx ename elist kind)
  ;;  remove objects on locked layers from ss
  (defun noll (ss / i d ename)
    (setq i 0
          d 0 )
    (while (and ss
                (setq ename (ssname ss i)) )
      (if (acet-layer-locked (cdr (assoc 8 (entget ename))))
        (progn
          (ssdel ename ss)
          (setq d (1+ d))
        )
        (setq i (1+ i))
      )
    )
    (if (/= 0 d)
      (princ (acet-str-format "%1 %2 on a locked layer.\n"
                              d
                              (if (< 1 d) "were" "was") ) )
    )
    ss
  )
 
  (acet-error-init '(("CMDECHO" 0) T))
 
  ;;  make object filter
  (setq filter (list
        (cons 410 (if (and (= 0 (getvar "TILEMODE"))
                           (/= 1 (getvar "CVPORT")) )
                    "Model"
                    (getvar "CTAB") ) )
        '(-4 . "<OR")
          '(0 . "TEXT,MTEXT,RTEXT,ARCALIGNEDTEXT,DIMENSION,ATTDEF")
          '(-4 . "<AND")
            '(0 . "INSERT")
            '(66 . 1)
          '(-4 . "AND>")
        '(-4 . "OR>") ) )
 
  ;;  pick objects
  (if (not (and (= 1 (logand 1 (getvar "PICKFIRST")))
                (setq ss (noll (ssget "_I" filter))) ) )
    (setq ss (ssget "_:L" filter))
  )
 
  ;;  process ss
  (if ss
    (progn
      (setq idx -1)
      (acet-ui-progress "Editing:" (sslength ss))
      (sssetfirst)
      (redraw)
      (while (setq ename (ssname ss (setq idx (1+ idx))))
      (redraw ename 3)
      (redraw)
        (setq elist (entget ename)
              kind (cdr (assoc 0 elist)) )
        (cond
          ((or (= kind "TEXT")
               (= kind "MTEXT")
               (= kind "DIMENSION")
               (= kind "ATTDEF") )
            (command "_.TEXTEDIT" ename "") )
          ((= kind "INSERT")
            (command "_.DDATTE" ename) )
          ((= kind "ARCALIGNEDTEXT")
            (command "_.ARCTEXT" ename) )
          ((= kind "RTEXT")
            (if (or (= 'USUBR AcetRText:edit) (load "rtext" nil))
              (AcetRText:edit elist)
              (princ "TEDIT: Cannot edit RTEXT objects.\n")
            )
          )
        )
        (entupd ename)
        (redraw ename 4)
        (acet-ui-progress -1)
      )
      (acet-ui-progress)
      (sssetfirst nil ss)
    )
  )
 
  (acet-error-restore)
  (princ)
)


(acet-autoload2	'("Rtext.lsp"	(AcetRText:edit ent)))
(princ)

Последний раз редактировалось Vova, 23.08.2017 в 20:46. Причина: в 2016 имя TEDIT (CHANGED TO TEXTEDIT) появилось в основном автокаде....
Vova вне форума  
 
Непрочитано 23.08.2017, 18:59
#10
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Vova, спасибо, правда не знал о такой команде.
Попробовал TEDIT и не понял разницы. При клике на блок с атрибутом она выдает то же окно, что и _ATTEDIT.
Не понял, какую задачу лисп должен решить?
skkkk вне форума  
 
Непрочитано 23.08.2017, 20:47
#11
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Да, attedit и tedit выдают одинаковое диал. окно, оно называется Edit attributes. Разница в том, что первая выдает диал окно сразу после клика на блок а вторая позволяет заселектировать много блоков (и текстов) последовательно и редактирование начинается после нажатия Enter. Диал. окна появляются в той же последовательности в которой проходило селектирование, что весьма удобно. Но это не столько важно для твоей задачи как то что если у блока неск. атрибутов, то в окне они видны все (про скрытые параметром видимости я не проверял)
Команда DDEDIT (в автокадах до 2016) и Textedit (от 2016) выдает окно Enhanced Attribute Editor, более сложное и менее удобное для твоей, как мне кажется, задачи (если я ее правильно понял)
Vova вне форума  
 
Непрочитано 23.08.2017, 21:12
#12
sertor

Геодезист
 
Регистрация: 23.05.2012
Ухта
Сообщений: 1,374


Offtop: Vova, в последнее время не часто можно видеть Вас на форуме. Пользуясь случаем, хочу сказать Вам спасибо за Вашу книгу. Уже больше десятка лет она у меня настольная.
И не в качестве "мебели", а именно востребованной справочной литературы, которая очень "упростила мне жизнь"! В сочетании с "Секретами... Д.Эббота
Миниатюры
Нажмите на изображение для увеличения
Название: DSC_0013.jpg
Просмотров: 144
Размер:	193.9 Кб
ID:	192637  
__________________
Как-то так.
sertor вне форума  
 
Непрочитано 24.08.2017, 02:42
1 | #13
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от Vova Посмотреть сообщение
позволяет заселектировать много блоков (и текстов) последовательно и редактирование начинается после нажатия Enter. Диал. окна появляются в той же последовательности в которой проходило селектирование
Vova, да, интересный функционал. Так бы ни за что не догадался, что можно сразу много блоков выбрать. При этом изменяемый в данный момент блок подсвечивается. Жаль, что окно вылетает каждый раз в центре, загораживает вид под собой, приходится каждое отодвигать, если надо контролировать процесс визуально. Интересно, многим мог бы быть этот функционал полезен?

Набросал "макролиспик" (можно оформить в лисп-команду или просто в строке макросов вбить), который можно закрепить за операцией при двукратном нажатии на атрибут блока (и атрибут динамического блока):
Код:
[Выделить все]
(initdia)(if (= (length (nentselp (cadr (grread t)))) 2)(vl-cmdf "_ATTIPEDIT" (cadr (grread t))) (vl-cmdf "_ATTEDIT" (cadr (grread t))))
Если двойной клик будет по атрибуту, то он откроется в редакторе атрибутов (или текстовом, при ATTIPE=1), а если нет, то откроется вышеупомянутое окно.
Вместо этого окна можно реализовать, например, открытие блока в редакторе блоков. Или его расчленение
skkkk вне форума  
 
Непрочитано 24.08.2017, 16:27
#14
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Поставил это лисп-выражение в макрос, и ничего не получилось: сначала после однократного клика на атрибут он подсветился синим (то есть готов для редактирования). Затем при всех других попытках однократного и двойного клика как по атрибуту так и по блоку но мимо атрибута выдается диал. окно. Иногда все-таки подсвечивается синим но чаще диал окно...
Vova вне форума  
 
Непрочитано 24.08.2017, 17:21
#15
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Vova,
1. Макрос вбили в операцию при двукратном нажатии на атрибут блока или на атрибут дин.блока?
2. Нажимаете двойной клик с зажатым Ctrl? Надо без него. А синим атрибут подсвечивается при одном клике с Ctrl вроде? Я проверял на 2011-м.
Позже смогу проверить на 2015-м.
skkkk вне форума  
 
Непрочитано 24.08.2017, 19:44
#16
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Ctrl не влияет. Второй клик (из двойного) вообще не получается: после первого выводится окно. А ведь первые пробы давали подсветку синим... АС 2017
Vova вне форума  
 
Непрочитано 24.08.2017, 20:33
#17
sertor

Геодезист
 
Регистрация: 23.05.2012
Ухта
Сообщений: 1,374


У меня, (AutoCAD Civil 3D 2014 x64), лисп работает исправно, в точности так, как заявлено skkkk. Спасибо, на мой взгляд очень удобно!
Миниатюры
Нажмите на изображение для увеличения
Название: 2.gif
Просмотров: 104
Размер:	814.3 Кб
ID:	192704  
__________________
Как-то так.
sertor вне форума  
 
Непрочитано 25.08.2017, 00:03
#18
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Цитата:
Сообщение от skkkk Посмотреть сообщение
1. Макрос вбили в операцию при двукратном нажатии на атрибут блока....?
Я не понимаю выражения "Макрос вбили в операцию..."
Я создал команду с данным выражением на палете. Что не так?
У Sertor в ролике данное выражение работает точно также как здесь
Vova вне форума  
 
Непрочитано 25.08.2017, 05:46
1 | #19
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от Vova Посмотреть сообщение
Я создал команду с данным выражением на палете
Вот это и не так.
Смысл всего в том, чтобы данный макрос (точнее, в нашем случае макро-лисп) вызывался при двойном клике на блоке. И в зависимости от того, где именно на блоке был произведен даблклик, последуют разные события: если на атрибуте, то этот атрибут откроется в текстовом редакторе, а если на линии внутри блока или круге, то откроется окно редактирования всех атрибутов. Этот макро-лисп не рассчитан на вызов из палитры, поскольку при двойном клике происходит считывание координат курсора и анализ подобъекта блока, который находится в момент клика под курсором.


Цитата:
Сообщение от Vova Посмотреть сообщение
Я не понимаю выражения "Макрос вбили в операцию..."
В _CUI есть пункт "Операции при двукратном нажатии" ("Double Click Actions"), там из списка надо выбрать "Атрибут блока" (боюсь ошибиться в точном английском написании), раскрыть его и выбрать подпункт. Справа среди прочих появится окно для ввода макроса. Туда и вставляем это выражение.

Уж и не припомню сейчас, почему я решил выложить это выражение в виде макроса, то ли потому что тут Vova и я машинально подался к макросам, то ли потому что первые более простые предложенные мной решения были в виде макросов, то ли не хотелось возиться с локализацией переменных, но посмотрев видео sertor'а и увидев столько шума в командной строке, я решил исправиться и оформить всё это дело в функцию:
Код:
[Выделить все]
 ;;;    http://forum.dwg.ru/showthread.php?t=133685
(defun blc_dblclck_actions ( / pt_pick)
  (vl-load-com)
  (initdia)
  (setq pt_pick (cadr (grread t))) ;;; запоминаем координаты точки указания (двойного клика)
  (if (= (length (nentselp pt_pick)) 2) ;;; если в точке указания атрибут,
	(vl-cmdf "_ATTIPEDIT" pt_pick) ;;; то открываем его в текстовом редакторе или в редакторе атрибутов (переменная ATTIPE)
	(vl-cmdf "_ATTEDIT" pt_pick) ;;; а если не атрибут, то откроется окно редактора всех атрибутов
	;;; вместо вызова редактора всех атрибутов можно сделать тут что-то другое
  ) 
)
В операцию при двукратном нажатии в _CUI на атрибут блока и на атрибут динамического блока прописываем макрос:
Код:
[Выделить все]
(blc_dblclck_actions)
Добавление в макрос ^C^C (эмуляция Esc) не имеем смысла, поскольку если выбрано более одного объекта, то операция на двойное нажатие не сработает, а вместо этого откроется окно свойств (если было закрыто).
skkkk вне форума  
 
Непрочитано 25.08.2017, 17:06
#20
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Цитата:
Сообщение от skkkk Посмотреть сообщение
И в зависимости от того, где именно на блоке был произведен даблклик, последуют разные события: если на атрибуте, то этот атрибут откроется в текстовом редакторе, а если на линии внутри блока или круге, то откроется окно редактирования всех атрибутов.
На макросе из н-р 13, введенном в CUI, у меня получилось, но после давлклика на атрибут синяя подсветка выходит с некоторой задержкой что раздражает. (простая команда _Attipedit с заданным ей алиасом АЕ работает мгновенно).
Что касается функции лиспа (н-р 19) то как ее использовать?
Получается, даблклик не дает возможность использовать окно EATTEDIT, необходимое для большинства стандартных работ в автокаде. Для его вызова теперь надо вызывать команду _eattedit (например, из меню на правой кнопке). Поэтому работа с даблкликом является полезной только для тех кто чаще всего редактирует только текст атрибутов, а не размеры или цвет, стиль и др., заложенное в EATTEDIT.
Vova вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Редактирование атрибута дин. блока по двойному нажатию мышью.

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выключение редактирование атрибута блока ArtyLight AutoCAD 10 16.10.2019 15:28
Запрет на редактирование значения атрибута в составе вхождения блока hwd AutoCAD 10 26.01.2016 12:02
Lisp. авто-нумерация атрибута блока. DonJad LISP 10 26.10.2014 02:04
Присвоение атрибуту блока значения атрибута другого блока. shartal Программирование 4 14.11.2013 14:02
Непонятное поведение многострочного атрибута блока Нитонисе AutoCAD 2 11.09.2010 17:35