Как изменить единицы блока в автокаде
Перейти к содержимому

Как изменить единицы блока в автокаде

  • автор:

Преобразование единиц измерения блоков в файле

Известно, что при создании блока (ручного создания) можно указывать единицы, в которых этот блок будет вставляться: миллиметры, метры, дюймы и т.д. Это удобно, если гарантируется, что вся работа всегда выполняется на основе единственного шаблона с раз и навсегда настроенными единицами. Но бывает такое не всегда (да и за смежниками, бывает, приходится «доделывать»).

Оптимальным решением, как ни странно, будут «безразмерные» блоки. То есть те, у которых единицы — «Unitless» (в русской версии перевода не помню). С новыми блоками все понятно — достаточно контролировать это значение и стараться не допускать ошибок. А что делать со старыми, уже вставленными? Да очень просто — заменить!

Менять можно вручную, переопределяя блоки (к примеру). И этот подход более чем достаточен, если блоков 1-2. Ну, всяко не больше 10 (и то лично я уже на втором озверею). Программное решение намного более интересно.

Вариантов программы, конечно, может быть сколько угодно. Рассмотрим 2: либо обрабатывать все блоки в файле (независимо ни от чего), либо обрабатывать только указанные блоки. В набор обрабатываемых блоков может попадать несколько блоков. ТЗ составлено, приступаем к реализации.

Наиболее удобным будет применение ActiveX — код получится достаточно простым, читабельным и понятным.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

;; Вызов: (lispru-change-block-units)
( defun lispru — change — block — units ( / adoc )
;; Поставим метку начала отмены. Ну так, на всякий случай
( vla — startundomark ( setq adoc ( vla — get — activedocument ( vlax-get-acad-object ) ) ) )
;; Проходим по всем описаниям блоков документа
( vlax-for blk_def ( vla — get — blocks adoc )
;; Из обработки исключаем внешние ссылки, пространства модели и листа
( if ( and ( equal ( vla — get — islayout blk_def ) :vlax — false )
( equal ( vla — get — isxref blk_def ) :vlax — false )
;; И дополнительно исключаем блоки таблиц и размеров
( not ( wcmatch ( strcase ( vla — get — name blk_def ) ) «*D*,*T*» ) )
) ;_ end of and
( vl-catch-all-apply
( function
( lambda ( )
( vla — put — units blk_def 0 )
) ;_ end of lambda
) ;_ end of function
) ;_ end of vl-catch-all-apply
) ;_ end of if
) ;_ end of vlax-for
;; Теперь метка конца отмены
( vla — endundomark adoc )
;; Ну и «тихий» выход
( princ )
) ;_ end of defun

При обработке выбранных блоков код немного усложняется:

;; Вызов: (lispru-change-block-units-by-select)
( defun lispru — change — block — units — by — select ( / _dwgru — conv — pickset — to — list adoc selset blk_list name )

( defun fun_get — name ( ent )
;; Получение имени блока
( cond
( ( vlax-property-available-p ent ‘effectivename )
( vla — get — effectivename ent )
)
( ( vlax-property-available-p ent ‘name )
( vla — get — name ent )
)
) ;_ end of cond
) ;_ end of defun

( defun _dwgru — conv — pickset — to — list ( value / tab item )
;;; http://forum.dwg.ru/showpost.php?p=188342&postcount=21
( repeat ( setq tab nil
item ( sslength value )
) ;_ end setq
( setq tab ( cons ( ssname value ( setq item ( 1 — item ) ) ) tab ) )
) ;_ end repeat
) ;_ end defun

;; Поставим метку начала отмены. Ну так, на всякий случай
( vla — startundomark ( setq adoc ( vla — get — activedocument ( vlax-get-acad-object ) ) ) )
;; Получаем набор блоков, обрабатывая нажатие Esc
( if ( = ( type ( setq selset ( vl-catch-all-apply
( function
( lambda ( )
( ssget ‘ ( ( 0 . «INSERT» ) ) )
) ;_ end of lambda
) ;_ end of function
) ;_ end of vl-catch-all-apply
) ;_ end of setq
) ;_ end of type
‘pickset
) ;_ end of =
( progn
;; Сформируем список имен блоков, исключая дубликаты
( foreach ent
;; Преобразовываем набор в список элементов, исключая внешние ссылки.
;; Это при полностью программной обработке надо отслеживать блоки листов
;; и модели. Вручную их не выделить.
( vl-remove-if
( function
( lambda ( x )
( equal ( vla — get — isxref ( vla — item ( vla — get — blocks adoc ) ( vla — get — name x ) ) ) :vlax — true )
) ;_ end of lambda
) ;_ end of function
( mapcar ( function vlax — ename -> vla — object ) ( _dwgru — conv — pickset — to — list selset ) )
) ;_ end of vl-remove-if
( if ( not ( member ( setq name ( fun_get — name ent ) ) blk_list ) )
( setq blk_list ( cons name blk_list ) )
) ;_ end of if
) ;_ end of foreach
;; Запускаем новый цикл
( foreach blk_def
;; Из списка имен получаем список указателей на описания блоков
( mapcar
( function
( lambda ( x )
( vla — item ( vla — get — blocks adoc ) x )
) ;_ end of lambda
) ;_ end of function
blk_list
) ;_ end of mapcar
( vl-catch-all-apply
( function
( lambda ( )
( vla — put — units blk_def 0 )
) ;_ end of lambda
) ;_ end of function
) ;_ end of vl-catch-all-apply
) ;_ end of foreach
) ;_ end of progn
) ;_ end of if
;; Теперь метка конца отмены
( vla — endundomark adoc )
;; Ну и «тихий» выход
( princ )
) ;_ end of defun

У этого кода есть один, но очень серьезный недостаток: он не обрабатывает (по крайней мере на данный момент) вложенные блоки.

Конечно, будь этот код «для работы», я бы исправил эту ошибку и попытался его ускорить (ввел бы дополнительные переменные, логику бы немного поменял — особенно в части проверки на то, является ли блок внешней ссылкой. Если надо — можно обсудить. Нет — так нет.

Добавлено: можно за компанию потом еще и выполнить регенерацию чертежа. По вкусу, как говорится

Изменение единиц блока в созданных блоках

Добрый день!
Столкнулся с проблемой и не смог найти ответа на вопрос — как изменить единицы уже в созданном блоке.
Пример во вложении = блок создан по ошибке в дюймах, его единицы следует изменить на миллиметры, а еще лучше в «безразмерные»

DWG 2010 пример.dwg (106.9 Кб, 855 просмотров)

Просмотров: 9794

LISP, C# (ACAD 200[9,12,13,14])

Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,810
Чистый ACAD2015 показывает, что все блоки сделаны в мм.

__________________
Моя библиотека lisp-функций

Обращение ко мне — на «ты».
Все, что сказано — личное мнение.

Кулик Алексей aka kpblc
Посмотреть профиль
Посетить домашнюю страницу Кулик Алексей aka kpblc
Найти ещё сообщения от Кулик Алексей aka kpblc

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

Вот мой принт-скрин окна настройки единиц чертежа

Вот что получается при вставке с палитры инструментов.

вот свойства объекта в самой библиотеке

Алексей, вся надежда на тебя )))

—— добавлено через ~2 мин. ——
А есть вообще способ изменения единиц блоков после их создания?

Последний раз редактировалось Sirius2w, 19.03.2015 в 16:44 .

LISP, C# (ACAD 200[9,12,13,14])

Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,810
Сообщение от Sirius2w
есть вообще способ изменения единиц блоков после их создания?

Есть. Поиском, руками, или программно.
http://www.google.ru/cse?cx=partner-. %B2&gsc.page=1
http://forum.dwg.ru/showthread.php?t=22126
P.S. По ссылкам не полезу: мне только непонятной рекламы не хватает для полного счастья.

__________________
Моя библиотека lisp-функций

Обращение ко мне — на «ты».
Все, что сказано — личное мнение.

Кулик Алексей aka kpblc
Посмотреть профиль
Посетить домашнюю страницу Кулик Алексей aka kpblc
Найти ещё сообщения от Кулик Алексей aka kpblc

Регистрация: 16.11.2009
Сообщений: 139
Не помогло, правда не все ссылки Ваши перепробовал. примерно половину.
Последний раз редактировалось Sirius2w, 19.03.2015 в 16:11 .

LISP, C# (ACAD 200[9,12,13,14])

Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,810

Offtop: Sirius2w, я не ползаю на сторонние ресурсы за-ради-посмотреть маленький скрин и по ходу дела наблюдать за радостно перемигивающейся рекламой файлохранилища. Я уже устал всех отсылать к справке по форуму, приводить ссылку, где описано как картинки в пост можно прикрепить — достало!
Размещаете на стороне? Бога ради. Но не ждите, что туда ломанется масса народа.

__________________
Моя библиотека lisp-функций

Обращение ко мне — на «ты».
Все, что сказано — личное мнение.

Кулик Алексей aka kpblc
Посмотреть профиль
Посетить домашнюю страницу Кулик Алексей aka kpblc
Найти ещё сообщения от Кулик Алексей aka kpblc

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

Загрузил лисп по первой ссылке
но он не работает у меня при вызове команды BLOCK-UNITS
«Неизвестная команда «BLOCK-UNITS». Для вызова справки нажмите F1.»
хотя было сообщение, что он успешно загружен.

по первой ссылке лисп загружается, вызывается но после сообщения «Укажите блок » я указываю на блок — ничего не происходит.
Акад 14-й полная версия лицензия.

LISP, C# (ACAD 200[9,12,13,14])

Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,810
Сообщение от Sirius2w
лисп по первой ссылке

По какой? Из http://forum.dwg.ru/showthread.php?t=22126 ? Так есть же пример вызова — читай внимательно

__________________
Моя библиотека lisp-функций

Обращение ко мне — на «ты».
Все, что сказано — личное мнение.

Кулик Алексей aka kpblc
Посмотреть профиль
Посетить домашнюю страницу Кулик Алексей aka kpblc
Найти ещё сообщения от Кулик Алексей aka kpblc

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

Использую пример вызова:
block-units acInsertUnitsMillimeters

не работает то же сообщение

использую второй пример
block-units acInsertUnitsUnitless
тоже не работает

использую динввод просто набирать block. он даже не предлагает список выбора подобных команд

—— добавлено через ~2 мин. ——
А как «руками» изменить?

LISP, C# (ACAD 200[9,12,13,14])

Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,810
Скобки кто будет ставить? Пушкин?
http://dwg.ru/pub/9

__________________
Моя библиотека lisp-функций

Обращение ко мне — на «ты».
Все, что сказано — личное мнение.

Кулик Алексей aka kpblc
Посмотреть профиль
Посетить домашнюю страницу Кулик Алексей aka kpblc
Найти ещё сообщения от Кулик Алексей aka kpblc

Единицы вставки блока, как настроить?

Есть чертеж в который необходимо всавить файл(как блок). Во всавляемом файле установленны десятичные еденицы, единицы для вставки — дюймы. В целевом чертеже еденицы — десятичные, единицы для вставки — миллиметры(INSUNITS = 4)
Вопрос? какие необходимы настройки что бы блок вставлялся в целевой чертеж в миллиметрах без изменения INSUNITS в файле блока.
В 2005 каде, с настройками по умолчанию блок вставляется в миллиметрах
В 2006 каде, с настройками по умолчанию блок вставляется в дюймах
Какая переменная за это отвечает не могу найти.

#2 Ответ от kpblc 21 ноября 2006г. 12:16:47

Re: Единицы вставки блока, как настроить?

INSUNITSDEFSOURCE и INSUNITSDEFTARGET, возможно?

#3 Ответ от serzh 21 ноября 2006г. 12:20:38

Re: Единицы вставки блока, как настроить?

> kpblc
В том то и дело. что вставляемые файлов может быть много, и все могут быть с разными параметрами, а если INSUNITS не 0 то эти переменные вообще не действуют. У меня в 2004 2005 вообще проблем не было с этим, а в 2006 те же файлы вставляются в дюймах, причем настройки INSUNITS одинаковые

#4 Ответ от Valery Brelovsky 22 ноября 2006г. 07:39:46

  • Valery Brelovsky
  • Активный участник
  • Откуда: Израиль / Север Израиля / Кирь
  • На форуме с 3 июня 2005г.
  • Сообщений: 2,359
  • Спасибо: 19
Re: Единицы вставки блока, как настроить?

> serzh
Для этой ситуации должно быть, так как понял из вашего вопроса.
Вы имеете блок в дюймах и Вам нужно вставить в чертёж в миллиметрах.
В файле блока должны быть установлены единицы дюймы. В Вшем файле единицы миллиметры.
Проверти установки переменной в обоих файлах. DIMALTF должна быть равна 25,4
И где-то здесь быkа тема по единицам чертежа или что то похожее. Если найду, то сообщу в следующий раз.

#5 Ответ от Valery Brelovsky 22 ноября 2006г. 07:55:10

  • Valery Brelovsky
  • Активный участник
  • Откуда: Израиль / Север Израиля / Кирь
  • На форуме с 3 июня 2005г.
  • Сообщений: 2,359
  • Спасибо: 19
Re: Единицы вставки блока, как настроить?

#6 Ответ от serzh 22 ноября 2006г. 11:30:55

Re: Единицы вставки блока, как настроить?

Valery Brelovsky пишет:

Вы имеете блок в дюймах и Вам нужно вставить в чертёж в миллиметрах.
В файле блока должны быть установлены единицы дюймы. В Вшем файле единицы миллиметры.

Я имею блок в миллиметрах, а единицы вставки в нем указаны — дюймы. Для того чтобы нормально вставить блок мне нужно установить единицы вставки — миллиметры в файле блока. Но блоков очень много, библиотека содержит несколько тысяч файлов. Я работл с этой библиотекой в 2004 и 2005 автокаде, все всегда вставлялось в миллиметрах, а в 2006 вставляется в дюймах или в миллиметрах в зависимости от настройки INSUNITS в файле блока.
Вчера один мой знакомый сказал, что настройка единиц вставки (переменная INSUNITS) вообще игнорировалась в 2004 и 2005 кадах, а 2006 эту ошибку исправили. А я теперь получил вот такую проблему.

Единицы чертежа в AutoCAD

AutoCAD позволяет работать с различными единицами измерения в чертеже.
Настройка единиц измерения жизненно необходима при работе со сложными чертежами или 3D-объектами, выполняемыми в натуральную величину, а также для правильного масштабирования чертежей на листах.
Для настройки введите команду «Единицы». Откроется окно «Единицы чертежа».

Можно настроить следующие параметры:

  • Линейные единицы измерения (формат и точность измерения).
  • Угловые измерения (формат (в частности, именно здесь можно настроить отображение углов в форматах «Град/Мин/Сек» и «Радианы»), точность измерения и направление отсчёта — по часовой или против часовой стрелки).
  • Масштаб вставки (именно этот параметр фактически определяет используемые в чертеже единицы измерения).

В поле «Пример» отображается пример отображения значений размеров на чертеже.
В поле «Освещение» можно настроить единицы измерения интенсивности фотометрических источников света.

  • «Международные» — люксы.
  • «Американские» — фут-канделы.

Оставьте комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *