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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Вопросы о буфере обмена

Вопросы о буфере обмена

Ответ
Поиск в этой теме
Непрочитано 12.11.2007, 18:55 #1
Вопросы о буфере обмена
Огурец
 
Profan
 
Москва
Регистрация: 27.04.2005
Сообщений: 6,753

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Буфером обмена при работе в каде не пользуюсь вообще Поэтому не могу согласиться с тем, что "буфер нужен".
Дорогой Алексей!

Поясните, пожалуйста, Вашу мысль. Может быть Вы что-то другое имеете в виду? Мне вот без буфера обмена (copy-paste) работать невозможно, на одних x-ref`ах далеко не уедешь.
===
Кулик Алексей aka kpblc : Начало - в теме http://dwg.ru/f/showthread.php?t=14935

Последний раз редактировалось Кулик Алексей aka kpblc, 17.11.2007 в 17:42. Причина: Разделение тем
Просмотров: 21440
 
Непрочитано 12.11.2007, 19:40
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Если честно, я бы тоже с удовольствием послушал как работать без буфера - хотя наверно это дело привычки, но все же мне кажеться, что без буфера (а если точнее без буфера с базовой точкой) - гемор.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 12.11.2007, 21:35
#3
Кулик Алексей aka kpblc
Moderator

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


Уважаемый Олег Вадимович, один меня, один Это я должен к Вам на "Вы" обращаться, но никак не наоборот.
Я имел в виду именно copy-paste. Для работы внутри одного документа проще использовать обычный _.copy (ну в крайнем случае - создать группу и ее таскать). Для варианта работы между несколькими документами у меня используется либо xref, либо _.wblock. Правда, у меня (ну не у меня, а у пользователей, которых я обслуживаю, а это требует некоторого понимания среды проектирования ) ADT, там технология отличается от чистого acad'a.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.11.2007, 21:48
#4
Огурец

Profan
 
Регистрация: 27.04.2005
Москва
Сообщений: 6,753
Отправить сообщение для Огурец с помощью Skype™


Дорогой Алексей!

Как я понимаю, вставка с базовой точкой практически ничем не отличается от _.wblock . Так что мы об одном и том же говорим. Тонкость же в том, что копируя в буфер обмена трёхмерные элементы, можно вставлять их в другую, соответствующим образом повёрнутую систему координат, что намного проще, чем выполнять поворот самого элемента. К примеру, я копирую модель окна вместе с вычитаемым телом в плоскости XY (условно горизонтальной), а вставляю в другую модель, привязавшись через DYN, _fa или же _ob в совершенно другую плоскость стены, часто повёрнутую под немыслимыми углами в двух плоскостях.
Огурец вне форума  
 
Непрочитано 12.11.2007, 22:21
#5
Кулик Алексей aka kpblc
Moderator

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


Уважаемый Олег Вадимович!
Это точно, не отличается. Есть, правда, некоторые тонкости, связанные именно с разницей систем координат и отображения объектов, но они не критичны сейчас.
Я, наверное, получу массу гневных откликов, но: я против использования copy-paste, особенно с базовой точкой и вставкой как блок. Хочу объяснить почему.
Это началось как минимум в 2002 каде, в дальнейших версиях, насколько я знаю, этот баг не исправили (вопрос - а можно ли его вообще исправить). Суть в том, что при копировании в буфер объекты объединяются в блок с именем A$C<И_тут_масса_циферок>. Эти "цифирки" теоретически назначаются случайным образом, но бывают ситуации, когда они совпадают. И вот тут начинается "интересное":
- если копировалось без базовой точки, и вставка выполнена "не как блок", то все хорошо - блок вставляется и тут же разбивается. По-моему, пока буфер обмена Windows не получит новую порцию данных, описание блока продолжает болтаться в файле на случай повторного использования (но тут плаваю, поскольку изысканий не проводил).
- если копировалось с базовой точкой, то независимо от метода вставки описание блока продолжает находиться в файле dwg. А если вставлялось как блок, то блок не разбивается (естественно), что гарантирует его сохранность.
А вот теперь представьте себе ситуацию: 01.03.2007 Вы начали работать над файлом, выполнили copy-pasteasblock (к примеру, набор мебели для прихожей), имя блока A$C123456789 (подчеркиваю - описание блока не удалено). Проходит время, Вы продолжаете использовать copy-paste, и, например, 05.04.2007 в совершенно другом файле блок копирования-вставки получает имя A$C123456789. Вы переходите в свой рабочий файл, нажимаете paste, и...
Acad ищет переданное имя (A$C123456789) по своей таблице блоков, благополучно его находит и предлагает его вставить. Все, аут. Вместо вставки окна с витражом Вы видите набор мебели для прихожей. Повторное выполнение копирования в буфер помогает далеко не всегда
Вы сможете сходу найти причину? Особенно если A$C123456789 вставлен внутрь другого блока (то есть по _.qselect его не видно)? А блоков у Вас в чертеже (имею в виду, естественно, только описания) штук этак 50.
Именно поэтому, получив на нескольких десятках файлов подобные шутки, я стал с опаской относиться к работе acad'a с буфером обмена.
---
P.S. Надеюсь, не слишком путано объяснил
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.11.2007, 23:24
#6
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Буду знать, но до сих пор ни разу не сталкивался, а если в конце всегда _purge использовать (что я обычно делаю) поможет? (вставляю НЕ как блок)
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 12.11.2007, 23:41
#7
Кулик Алексей aka kpblc
Moderator

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


Теоретически должно помогать. Если удастся "выцепить" код, попробую где-нибудь опубликовать для очистки файла от блоков копирования-вставки.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.11.2007, 00:03
#8
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Это точно, не отличается.
Отличается. В детали вникать не буду, но разница есть. Для AutoCAD работа с буфером обмена - это инородное тело, внесенное относительно недавно (если учитывать всю историю существования AutoCAD). И до сих пор она не вполне корректна. Своих пользователей я постепенно отучил пользоваться этой возможностью, как и ты. И если мне приносят чертеж и я вижу в нем блоки A$XXXXXXXX - приходится применять "административный ресурс". Чтоб не повадно было!
Александр Ривилис вне форума  
 
Непрочитано 17.11.2007, 07:08
#9
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825


Такое ощущение, что AutoCAD не из мира сего...
Krieger вне форума  
 
Непрочитано 17.11.2007, 07:17
#10
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Конечно, он из DOS'а.
По-моему, в 1990 году кроме AutoCAD'а и не было никаких других графических программ для проектировщика.

Последний раз редактировалось Profan, 17.11.2007 в 07:26.
Profan вне форума  
 
Непрочитано 17.11.2007, 15:49
#11
Vova

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


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
...Для AutoCAD работа с буфером обмена - это инородное тело, внесенное относительно недавно (если учитывать всю историю существования AutoCAD). И до сих пор она не вполне корректна. Своих пользователей я постепенно отучил пользоваться этой возможностью, как и ты. И если мне приносят чертеж и я вижу в нем блоки A$XXXXXXXX - приходится применять "административный ресурс". Чтоб не повадно было!
Буфер обмена, если я не ошибаюсь; поя
Vova вне форума  
 
Непрочитано 17.11.2007, 16:17
#12
Vova

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


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
...Для AutoCAD работа с буфером обмена - это инородное тело, внесенное относительно недавно (если учитывать всю историю существования AutoCAD). И до сих пор она не вполне корректна. Своих пользователей я постепенно отучил пользоваться этой возможностью, как и ты. И если мне приносят чертеж и я вижу в нем блоки A$XXXXXXXX - приходится применять "административный ресурс". Чтоб не повадно было!
Буфер обмена, если я не ошибаюсь, появился при AC-2000, то есть 7 автокадов назад. А до этого было реальных 5 автокадов, то есть больше половины его истории буфер был. И всегда был Wblock, что по-сути одно и тоже. Те, кто из строителей делает каждый этаж в собственном файле и имеет общую точку 0,0, (a это самая правильная работа) без буфера не могут жить. Если перенесенные блоком объекты остались в файле неразбитыми или непереименованными (A$XXXXXXXX ) то это отсутствие автокадовской культуры, и административным рессурсом можно было-бы воспользоваться и научить этой самой культуре. Например, автору приходит автоматическое письмо с просьбой самому переименовать или разбить блоки, а не то.... Но ведь отсутствие культуры сказывается не только в этом.
Цитата:
Сообщение от Кулик Алексей aka kpblc
Для работы внутри одного документа проще использовать обычный _.copy (ну в крайнем случае - создать группу и ее таскать
Далеко не всегда. Допустим, работаю с фрагментами. В каждом надо добавить несколько одинаковых штуковин, но расположенных по-разному, да еще что-то удалить или передвинуть. Одна нужная штуковина в буфере, другая в W-block-е (вспомни в книге про язык макророманд главу Альтернативные ячейки памяти) , и пошла быстрая работа. При помощи буфера также заполняется Tool Palettes. Не, без буфера никак нельзя.
Vova вне форума  
 
Непрочитано 17.11.2007, 17:38
#13
Кулик Алексей aka kpblc
Moderator

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


ToolPalettes можно вроде бы и использованием, например, DC, заполнять - ИМХО более верно будет.
Насчет "одинаковых" элементов: кто мешает использовать группу, я не очень понял.
ИМХО: буфер обмена - достаточно опасное и узкое место, и постоянно его использовать лично я не рекомендую
P.S. Тема плавно ушла в сторону от начального вопроса . Разделил.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.11.2007, 18:33
#14
Vova

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


Да, бывает, автокад сгенерирует одинаковое имя. Это похоже на переменную UserХХ, которую программисты критикуют по этой-же причине. Но обычно неправильное действие автокада сразу-же вызывает недоумение, точно также как вставка разных блоков с одинаковыми именами (неправильное действие пользователя). На чертеж это вряд-ли отразится, разве что время потеряется, пока разберутся. Из двух зол всегда выбирают меньшее. Несмотря на редчайший баг с одинаковым сгенерированным именем блока из буфера отказ от него замедляет работу. Буфер ведь на правой кнопке, и дежурит всегда. А wblock? Он неоперативен, если не сделать 2 спец кнопки-положить и взять. Группа здесь не поможет, ибо она в этом контексте то-же,что и Copy, только щелчки сэкономит.
Vova вне форума  
 
Непрочитано 17.11.2007, 20:41
#15
Кулик Алексей aka kpblc
Moderator

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


Vova, мне, честно говоря, неудобно спорить, но...
Хорошо если эту "нестыковку" можно обнаружить сразу. А если такой блок вложен? Да еще и в другом файле, который вставляется блоком?
Я попробовал нарисовать код, проверьте, у кого есть файлы с блоками A$C*:
Код:
[Выделить все]
(defun c:clear-copy-paste (/                   *error*
                           adoc                loc:get-name
                           loc:is-block-reference
                           loc:conv-ent-to-vla
                           )

  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (defun loc:conv-ent-to-vla (ent)
    (cond
      ((= (type ent) 'ename) (vlax-ename->vla-object ent))
      ((= (type ent) 'vla-object) ent)
      (t nil)
      ) ;_ end of cond
    ) ;_ end of defun

  (defun loc:is-block-reference (ent)
    (and
      (= (vla-get-objectname ent) "AcDbBlockReference")
      (equal
        (vla-get-islayout (vla-item (vla-get-blocks adoc) (loc:get-name ent)))
        :vlax-false
        ) ;_ end of equal
      (equal (vla-get-isxref (vla-item (vla-get-blocks adoc) (loc:get-name ent)))
             :vlax-false
             ) ;_ end of equal
      ) ;_ end of and
    ) ;_ end of defun

  (defun loc:is-block-definition (ent)
    (and
      (= (vla-get-objectname ent) "AcDbBlockTableRecord")
      (equal
        (vla-get-islayout (vla-item (vla-get-blocks adoc) (loc:get-name ent)))
        :vlax-false
        ) ;_ end of equal
      (equal (vla-get-isxref (vla-item (vla-get-blocks adoc) (loc:get-name ent)))
             :vlax-false
             ) ;_ end of equal
      ) ;_ end of and
    ) ;_ end of defun

  (defun loc:get-name (ent / res)
    (if
      (vl-catch-all-error-p
        (setq res (vl-catch-all-apply '(lambda () (vla-get-effectivename ent))))
        ) ;_ end of vl-catch-all-error-p
       (setq res (vla-get-name ent))
       ) ;_ end of if
    res
    ) ;_ end of defun

  (defun loc:explode (ent)
    (if (and (loc:is-block-reference ent)
             (wcmatch (strcase (loc:get-name ent)) "A$C*")
             ) ;_ end of and
      (progn
        (vlax-for subent (vla-item (vla-get-blocks adoc) (loc:get-name ent))
          (loc:explode subent)
          ) ;_ end of vlax-for
        (vla-explode ent)
        (vla-erase ent)
        ) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (vlax-for blk_def (vla-get-blocks adoc)
    (vlax-for ent blk_def
      (loc:explode ent)
      ) ;_ end of vlax-for
    ) ;_ end of vlax-for
  (repeat 3 (vla-purgeall adoc))
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Особо не тестировал. Слои крайне желательно держать разблокированными и размороженными. Попытался исключить из обработки внешние ссылки.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.11.2007, 21:02
#16
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Не знаю, как удается Александру Ривилису применить административный ресурс, но наших оболтусов никакими средствами не заставишь отказаться от использования буфера обмена. Этот инструмент повсеместно используется в Windows, чем же AutoCAD хуже? Будут мучиться с "анонимными" блоками, но от буфера обмена в AutoCAD не откажутся. Я тоже.
Profan вне форума  
 
Непрочитано 18.11.2007, 00:31
#17
Vova

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
[Хорошо если эту "нестыковку" можно обнаружить сразу. А если такой блок вложен? Да еще и в другом файле, который вставляется блоком?
.
А если вложен обычный блок, но с тем-же именем, которое уже есть в файле-приемнике? В любом случая получится конфуз
Vova вне форума  
 
Непрочитано 18.11.2007, 01:36
#18
Кулик Алексей aka kpblc
Moderator

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


Ага, получится. Но если это дело хоть как-то можно проконтролировать и заставить использовать в качестве префикса, например, краткое наименование фирмы, то с блоками A$C* такой номер уже не прокатит.
ЯТД, каждый останется при своих, предлагаю ничью
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.11.2007, 01:44
#19
MS

слаботочник
 
Регистрация: 31.08.2006
Москва
Сообщений: 128


Цитата:
Сообщение от Vova Посмотреть сообщение
Буфер обмена, если я не ошибаюсь, появился при AC-2000, то есть 7 автокадов назад.
В 13-ом точно был.
__________________
С уважением, Михаил.
MS вне форума  
 
Непрочитано 18.11.2007, 01:45
#20
MS

слаботочник
 
Регистрация: 31.08.2006
Москва
Сообщений: 128


Цитата:
Сообщение от Profan Посмотреть сообщение
Конечно, он из DOS'а.
Из UNIXа
__________________
С уважением, Михаил.
MS вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Вопросы о буфере обмена

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хочу начать изучать автокад, есть вопросы, помогите GALANT AutoCAD 126 16.06.2011 11:01
Доступ к объектам скопированным в буфер обмена МишаVBA AutoCAD 6 20.05.2006 00:41
Проблемы с копирование через буфер обмена. zenon AutoCAD 2 22.12.2005 07:20
Вопросы самоучки ( Лира ) Cole Лира / Лира-САПР 5 02.08.2005 23:32