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

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

Конвертор по переводу блока во внешнюю ссылку

Ответ
Поиск в этой теме
Непрочитано 29.06.2005, 05:44 #1
Конвертор по переводу блока во внешнюю ссылку
Dude Great
 
Регистрация: 29.06.2005
Сообщений: 10

Кто-нибудь может помочь с программкой, к-я может конвертировать заbindанный xref (т.е. блок с длинными именами со значками $0$) в оригинальный xref.
Заранее спасибо
Просмотров: 5369
 
Непрочитано 29.06.2005, 10:00
#2
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,202
<phrase 1=


>Dude Great
это можно сделать стандартным способом.
1. команда _wblock - выбираем нужный блок и указываем путь к новому файлу - создается новый dwg, содержащий объекты выбранного блока.

2. команда express tools - blocktoxref, выбираем все тот же блок, и указываем путь к созданному ранее файлу, блок заменяется внешней ссылкой, попутно по запросу удаляется все лишнее от замененного блока.
Apelsinov вне форума  
 
Автор темы   Непрочитано 29.06.2005, 20:39
#3
Dude Great


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


to Apelsinov

Большое спасибо за ответ.

Вся мулька в том, что мне надо получить чертежи не столько как xref, а как dwg без длиных имен в слоях,блоках и т.д.
В дальнейшем эти чертежи будут использованы как многоступенчатые вложения, и лишние проблемы с длиными именами мне не нужны.
К сожалениию, обычными методами это не решить, только программно или, как я сейчас вручную переименовывааю. Это очень весело,
особенно если чертежей около 40.

В любом случае, благодарю за помощь
Dude Great вне форума  
 
Непрочитано 30.06.2005, 10:29
#4
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,202
<phrase 1=


>Dude Great
В этом случае, ессесно, описанное выше Вам не поможет. Все это издержки заbindаривания xref, насколько я понял, это делали не вы, и исправить положение всавкой xref как insert уже нельзя.
Единственый выход, что я вижу, это программирование, Вы правы, но тут важно как вы хотите это все переименовать...а вообще это не так и сложно.
И, может поможет в ручном перемименовании, обратите внимание на команду _.rename.
Apelsinov вне форума  
 
Непрочитано 30.06.2005, 10:32
#5
Кулик Алексей aka kpblc
Moderator

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


Есть еще один вариант - попробовать dws, но и с ним мороки будет тьма - пока его сделаешь...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 30.06.2005, 17:58
#6
Dude Great


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


Ну вот, с чего начали тем и закончили.
Неужели больше ни перед кем такой проблемы не стояло и нет путей решения [sm904]
Dude Great вне форума  
 
Непрочитано 30.06.2005, 23:12
#7
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Цитата:
Вся мулька в том, что мне надо получить чертежи не столько как xref, а как dwg без длиных имен в слоях,блоках и т.д.
Ну это то как раз не сложно. Единственная проблемма как именовать эти блоки? Ведь блоки не могут быть одноименными а если тупо обрезать всё что вносит XREF то именно так и может получится. Вот пока простая "заготовка" которая переименовывает все блоки в #1-#N.
Код:
[Выделить все]
(defun c:xrr (/ blCol blName Count)
  (vl-load-com)
  (setq blCol
	 (vla-get-Blocks
	   (vla-get-ActiveDocument
	     (vlax-get-Acad-Object)))
	Count 1
	); end setq
  (vlax-for bl blCol
    (setq blName(vla-get-Name bl))
    (if
      (and
      (= 0(vl-string-mismatch blName "*MODEL_SPACE"))
      (= 0(vl-string-mismatch blName "*PAPER_SPACE"))
      ); end and
      (progn
    (vla-put-Name bl (strcat"#"(itoa Count)))
    (setq Count(1+ Count))
    ); end progn
      ); end if
    ); end vlax-for
  (princ)
  ); end of c:xrr
Короче придумай систему. К примеру два блока имевших изначальное название "Стол", могут стать "Стол1" и "Стол2" или как то по другому?

Восстановить XRefы не получится. При Бинде информация о них стирается.
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 01.07.2005, 02:13
#8
Dude Great


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


to Fantomas

Большое спасибо за ответ.

Подобная программка, что ты набросал у меня есть. Я нашел ее где-то лет 5 назад, добавил только свой .dcl файл. Все правильно, с одинаковыми названиями она добавляет цифры по-порядку. Вот тут и собака зарыта. Если лэеры я могу сделать merge (прошу прощения у меня английская версия и я не знаю, как этот пункт в меню называется в русской версии), то как быть с блоками или лайнтайпами. Их только можно переименовать. А это опять только ручками

Не могу согласиться, что байданные xrefы теряют какую-либо инфу. По крайней мере если я делаю table search - все живое.

В любом случае, еще раз спасибо!

Ну очень хочется получать исходные xrefы. [sm905]
Dude Great вне форума  
 
Непрочитано 01.07.2005, 07:05
#9
Залётный


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


[quote="Fantomas"]
Цитата:

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

Допущение 1: - все референс файлы имели имя которое начиналось, например, с X или имело какой либо признак, что это референс файл.
.
Допущение 2: - нестед референсов не было. Если они были, то потребуется подополнительная обработка сохранённых файлов, думаю, что больше 2-3 входимостей не будет.

Алгоритм:

1. Unlock все лэеры.
2. Найти все блоки, которые вставлены в PS, и имеют имя не содержащее $ и начинаюшееся с X (см. допущение 1). Для красоты картины определить лэеры на которых они находятся.

3. Установить rememberfolders=0. Для каждого блока выполнить -WBLOCK с ключём = (block=output file). Поскольку будет производится обработка многих чертежей, перед операцией -WBLOCK для конкретного блока проверить на наличие этого блока в директории и не выполнять эту операцию для данного блока если он уже имеется.

4. Проделать п.п. 2 и 3 для блоков, подходящих по критерям в п.2, и расположенных в PS.

5. Erase все блоки (в пространстве модели и в пространстве листа), которые соответствовали критерию в п.2.

6. PURGE файл. необходимо это сделать несколько раз.

7. Открыть каждый сохранёный файл и, если небыло NESTED reference файлов, то всё (типы линий, стили текста, размерные стили и т.д. и т.п.) должно спокойно переименоваться т.е. с правой стороны до первого $. RENAME это делает легко, а в командной строке знаки * и ? не поддерживаются. При помощи LISP это, кажется, делается. Сохранить
файл и закрыть его.

8. В оригинальном файле соответствено в PS и в MS приатачить подготовленые файлы (для красоты картины предварительно создав лэеры, на которых они сидели раньше).

Приношу извинения за столь пространые излияния.
Залётный вне форума  
 
Непрочитано 01.07.2005, 09:57
#10
Кулик Алексей aka kpblc
Moderator

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


> Dude Great : Если не жалко, пришли, поковыряю...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.07.2005, 10:53
#11
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


>Залётный

Если делать такое количество допущений, то любую программу можно назвать рабочей. В пределах допустимого конечно . Тем более что человек по моему хочет восстановить "как было", а ты предлагаешь сделать кучу файлов с помощью WBLOCK.

>Dude Great
Цитата:
По крайней мере если я делаю table search - все живое.
А в какой если не секрет таблице вы делали (tblsearch? В таблице "BLOCK" после бинда конечно есть все блоки, но без данных откуда они были вставлены.
Объект XRefDatabase можно получить только если (vla-get-IsXRef равняется :vlax-true, то блок еще является XRef'ом.
Не факт конечно что где то эта информация не остаётся. Хотя по логике должна вычищатся, чтобы не увеличивать размер файла.
{Smirnoff} вне форума  
 
Непрочитано 01.07.2005, 15:16
#12
Залётный


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


Цитата:
Сообщение от Fantomas
>Залётный

ты предлагаешь сделать кучу файлов с помощью WBLOCK.
Я понимю, что мои рассуждения делетанта, но, как я понимаю, хрефы представляются в виде блоков, имя которого соответствует имени файла. Когда после BIND я смотрю имена блоков в чертеже (RENAME и я вижу имена всех блоков) то оно не меняется. WBLOCK я показал, потому, что думаю мог бы решить кое-что с помощью обычного скрипта (увы, в промежутках между обычными командами необходимы лисповские манипуляции - переименование, определение имён, отделение части имени и т.д., знание которого мне не хватает). Полагаю, что в лиспе имеются команды для сохранения блока с определённым именем, это чтобы забыть моё предложение про WBLOCK.
Залётный вне форума  
 
Непрочитано 01.07.2005, 15:19
#13
Залётный


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


Цитата:
Сообщение от Fantomas
>Залётный

а ты предлагаешь сделать кучу файлов
Извени забыл дописать в предыдущем сообщении.

Потом делается BIND INSERT и имена становятся нормальными.
Залётный вне форума  
 
Автор темы   Непрочитано 02.07.2005, 20:52
#14
Dude Great


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


Спасибо всем за ответы.

2 Залётный

В принципе рассуждения в верном ключе. Думаю, что можно упростить - забыть про PS (как правило, здесь только title block & notes, а это не критично), далее - достаточно вытащить references мах до 2-х вложений.
И самое важное, никаких дальнейших байндов, тем более bind - insert, вот тогда точно вся инфа в исходных xrefах будет потеряна.
По мне, идеальное решение это один или два (если нужно) dwg's, бывшие xrefы, в той же директории.

2 kpblc

Прошу простить меня. Я не понял, что я должен прислать. Если чертеж, то его легко сделать самому. Притянуть один чертеж к другому, как xref. Далее сделать bind как bind. Это все.


2 Fantomas

У меня большая надежда на Вашу помощь

Спасибо
Dude Great вне форума  
 
Непрочитано 04.07.2005, 08:58
#15
Кулик Алексей aka kpblc
Moderator

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


> Duge Great : Да у меня пока просто нет возможности сделать xref с несколькими десятками слоев. Вообще-то на уровне идеи:
1. Последовательно выбрать все слои (точнее, все объекты на слоях) с символами "|" или "$" и одинаковым началом.
2. Выбор записать в отдельный файл.
3. Открыть только что записанный файл.
4. Переименовать слои или объекинить (для слоя "0") любым доступным способом.
---
Какие могут быть проблемы:
1. Слой "0" (как он мне надоел!) - иногда (было на 2004 Eng) при бинде xref'a слой "0" ссылки объединялся со слоем "0" сборочного файла. Выцепить объекты не удается.
2. Блоки. Сам блок может находиться на слое "Ссылка1$Блоки", а его элементы - на слое "Ссылка1". Что куда попадет - я пас, надо профессионалов спрашивать.
3. гиперссылки. Не дай бог они там есть - скорее всего, потеряются.
4. xdata могут оказаться там же.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Конвертор по переводу блока во внешнюю ссылку

Реклама i