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

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

  • автор:

Единицы измерения

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

Создайте чертеж в натуральную величину в соответствии с единицами чертежа, которые необходимо использовать. Например, следующие объекты могут быть представлением двух зданий, каждое из которых имеет 125 футов в длину, или же фрагментом детали механизма с размерами в миллиметрах.

Единственная настройка, которую потребуется задать, — это та, которая управляет стилем отображения единиц измерения, которые планируется использовать. Например, в стиле «Архитектурные единицы измерения» отображаются обозначения для футов и дюймов, в то время как в стиле «Десятичные единицы» таких обозначений нет.

Понятия, связанные с данным
Задачи, связанные с данной

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

Есть чертеж в который необходимо всавить файл(как блок). Во всавляемом файле установленны десятичные еденицы, единицы для вставки — дюймы. В целевом чертеже еденицы — десятичные, единицы для вставки — миллиметры(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 эту ошибку исправили. А я теперь получил вот такую проблему.

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

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

Оптимальным решением, как ни странно, будут «безразмерные» блоки. То есть те, у которых единицы — «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 просмотров)

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

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

Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,667
Чистый 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,667
Сообщение от 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,667

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,667
Сообщение от 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,667
Скобки кто будет ставить? Пушкин?
http://dwg.ru/pub/9

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

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

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

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

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