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

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

  • автор:

Внешняя ссылка- единицы блока?

Странно, но почему то не в меню свойств, не на этапе внедрения внешней ссылки, единицы блока изменить не удается . таким образом установив масштаб вставляешь и . все равно вылезает коэфициент . 50000ед=50800ед.(это если из 1:500 переводишь в 1:1)
.

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

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

Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,810
insunits (в 0), INSUNITSDEFSOURCE и INSUNITSDEFTARGET поиграйся.

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

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

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

Регистрация: 04.05.2006
Сообщений: 37
Спасибо! Помогло
Тока вот не понял для чего все эти сложности? [sm3104]
Регистрация: 09.06.2016
Сообщений: 1

Есть способ и попроще.
Все дело в единицах чертежа. Они должны быть одинаковы. Тогда при вставке внешней ссылки проблем не будет.
Редактируется тип единицы в линейке опций. Формат/Единицы. Там в окне Масштаб вставки. Единицы для изменения вставленных элементов нужно выставить одну и ту же единицу, будь то безразмерная или дюймы или мм и т.д.
Проблемой остается только координаты чертежей. Я обычно кручу и совмещаю по общим точкам как вставку блока.

Александр.DWG
Посмотреть профиль
Найти ещё сообщения от Александр.DWG

Внешняя ссылка вставляется с неправильным масштабом

Вставляю в чертеж внешнюю ссылку, ставлю масштаб 1:1, после вставки измеряю: по всем координатам размеры в 25 раз больше чем при измерении непосредственно в файле ссылки
хэлп!

#2 Ответ от kpblc 15 июня 2006г. 09:15:21

Re: Внешняя ссылка вставляется с неправильным масштабом

insunits и т.п. переменные надо смотреть

#3 Ответ от ncx 15 июня 2006г. 09:37:14

Re: Внешняя ссылка вставляется с неправильным масштабом

в файле куда вставляю insunits=4
в файле ссылки insunits=1
выставил 4, сохранил
та же фигня, не сработало
потом баловался с масштабом вставки в результате ссылка вставляется В ДВУХ экземплярах: в старом масштабе и в новом
я медленно офигеваю

#4 Ответ от kpblc 15 июня 2006г. 09:41:04

Re: Внешняя ссылка вставляется с неправильным масштабом

Я не зря написал

Что творится с переменными INSUNITSDEFSOURCE и INSUNITSDEFTARGET ? Что установлено в качестве единиц в одном и другом чертеже (lunits)?

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

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

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

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

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

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

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

При вставке блока создается вхождение блока. Пользователь указывает точку вставки, масштабные коэффициенты и угол поворота. Для каждого направления X, Y и Z задаются свои значения масштабного коэффициента. Во время вставки блока создается так называемое вхождение блока — объект, который связан с описанием блока, хранящимся в текущем чертеже. Оранжевый значок вспышки молнии, отображаемый в правом нижнем углу окна предварительного просмотра блока, обозначает, что блок динамический.

  • В диалоговом окне Вставка после нажатия OK.
  • При использовании командной строки ВСТАВИТЬ после ввода имени блока.
  • При нажатии на инструмент работы с блоком в инструментальной палитре.

Вставка файла чертежа в качестве блока

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

В целевом чертеже (том, в который выполняется вставка) внешние ссылки и растровые изображения, содержащиеся во вставляемом чертеже, могут отображаться некорректно. Этого можно избежать, предварительно вставив такие внешние ссылки и изображения в целевой чертеж.

Вставка блоков из инструментальных палитр

Можно вставлять блоки из инструментальных палитр перетаскиванием инструмента работы с блоком в чертеж либо нажатием на инструмент работы с блоком и последующим обозначением точки вставки.

Можно выбрать режим, в котором при щелчке мышью для размещения блока отображается запрос на ввод угла поворота (начиная с 0). В этом режиме угол поворота, заданный в диалоговом окне «Свойства инструмента», игнорируется при создании объекта в чертеже. Запрос на ввод угла поворота не отображается при перетаскивании блока или внешней ссылки, а также в случае ввода «повернуть» в командной строке при выполнении первоначальной команды вставки.

Блоки, которые пользователь перетаскивает мышью из палитры в область рисования, можно масштабировать и поворачивать после того, как они станут объектами чертежа. При перетаскивании блоков можно использовать объектную привязку; шаговая привязка при этом подавляется.

При перетаскивании блока из инструментальной палитры в чертеж он автоматически масштабируется в соответствии с соотношением заданных единиц блока и единиц текущего чертежа. Например, если для измерения единиц данного чертежа используются метры, а для измерения единиц блока сантиметры, коэффициент пересчета составляет 1 к 100. Соответственно, при перетаскивании блока в чертеж его размеры меняются в пропорции 1:100.

Примечание В диалоговом окне «Настройка» на вкладке «Пользовательские» находятся раскрывающиеся списки «Единицы исходного чертежа» и «Единицы целевого чертежа». Выбранные в них единицы используются в том случае, когда единицы вставки не заданы в исходном блоке или целевом чертеже.

Вставка блоков из библиотек компонентов

В текущий чертеж можно вставлять один или несколько блоков из других файлов чертежей. Этот метод используется при вставке из библиотек компонентов. Библиотека компонентов содержит описания блоков для сходных компонентов. Такие описания блоков для удобства хранятся в одном файле чертежа.

Вставка блоков с помощью Центра управления AutoCAD

Вставка блоков из текущего и других чертежей выполняется с помощью Центра управления. Быстрое копирование блоков осуществляется простым перетаскиванием имен блоков. Двойным щелчком мыши на имени нужного блока можно задать положение, угол поворота и масштабные коэффициенты блока.

Вставка блоков в чертеж невозможна в процессе выполнения другой команды. Кроме того, за один раз можно вставить только один блок.

Вставка блоков с заданным интервалом

Имеется возможность вставки блоков с заданным интервалом вдоль выбранного геометрического объекта.

  • Для вставки блоков с заданным интервалом используется команда РАЗМЕТИТЬ.
  • Для вставки блоков с равными интервалами используется команда ПОДЕЛИТЬ.
  • Сохранение блока в отдельном файле
  • Базовые понятия для блоков
  • Создание библиотек компонентов
  • Работа с динамическими блоками в чертежах
  • Добавление содержимого с помощью Центра управления
  • Создание инструментов из объектов и работа с ними

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

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