Как объединить файлы *dwg в один?
По возможности, все что здесь на форуме нашел — прочитал. Получается так, что все эти темы вроде как и помогают и, в то же время, не тот результат хотелось бы получить.
«Ближе к телу . »
Есть несколько файлов *dwg, которые получены конвертацией из ArchiCAD. Это планировка этажа и в каждом последующем файле разрезы. Конвертировалось из одного файла.
Хотелось бы все эти файлы объединить в один и, после этого, «причесать» все сразу. Все кажется просто но есть проблема. При копировании из одного файла в другой теряется кусками само изображение в Модели. При этом, слой сохраняется или же копируется если его не было. Но на экране чего нибудь да не хватает. такое происходит не со всеми файлами. Некоторые копируются вполне корректно.
Теперь вопрос: Кто нибудь сталкивался с таким . Если сталкивались, то как устраняли. .
Пока что представляю еще один вариант решения проблемы. Это объединить все вкладки в ArchiCAD на одном листе и уже его конвертировать в AutoCAD. НО здесь имеется то же проблема. Если AutoCAD я не знаю, то ArchiCAD — вообще не знаю
В любом случае, нужна помощь . Заранее, всем спасибо .
Просмотров: 12946
vikkkkktor |
Посмотреть профиль |
Найти ещё сообщения от vikkkkktor |
Объединение нескольких dwg-файлов в один
Доброго времени суток, уважаемые форумчане! Такая ситуация: есть 4 dwg-файла, в каждом различное количество чертежей. Все они сделаны в видовых окнах, соответственно, все делалось в модели. Появилась необходимость создать один dwg-файл, в котором бы находились все чертежи, так сказать, для удобства переноса и просмотра. Подскажите, как провести подобный «финт ушами» Заранее благодарен. Если необходимы какие-либо уточнения, осведомлю максимально оперативно.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Объединение нескольких файлов в один
Новичок я в сишарпе прям таки нуб в кратце, как это применить? у меня стала задача сделать.
Объединение нескольких файлов в один
Здравствуйте. Использую библиотеку SFML, чтобы создать игру, и назрел такой вопрос: В игре.
Объединение нескольких файлов в один
Здравствуйте! Нужно объединить несколько файлов Excel с таблицами одинаковой структуры.
Объединение нескольких файлов в один
Доброго дня! Сразу скажи что в экселе не очень силён. По работе требуется создавать множество.
Объединить все макеты в один файл DWG
Подскажите, пожалуйста, как в ArchiCad 21 вывести все макеты через организатор в один файл DWG. При сохранении с указанными настройками сохраняет кучу XRef файлов, а нужно в один. Буду примного благодарен за отзывчивость.
На сайте c 22.11.2006
Сообщений: 2040
Откуда ни возьмись.
Только я хз как это работает. И работает ли.
На сайте c 26.09.2006
Сообщений: 5064
Белокаменная
В Параметрах Трансляции DXF-DWG нужно поставить опцию «Единственный файл DXF/DWG»
На сайте c 21.08.2013
Сообщений: 3134
Не резиновая
sagava
Спасибо за дельный совет, а можно каким то образом сделать так, что бы в пространстве модели в Autocad транслировались уже подрезанные чертежи, без лишних линий?
Или это невозможно? В чертеже 110 помещений и в рукопашную это займет уйму времени.
На сайте c 26.09.2006
Сообщений: 5064
Белокаменная
Цитата Bestviz:
в Autocad транслировались уже подрезанные чертежи, без лишних линий?
А опция Сохранить Макет В: Paper Space с обрезанным контентом Вида разве не помогает?
На сайте c 21.08.2013
Сообщений: 3134
Не резиновая
sagava
Огромное человеческое спасибо за сэкономленное время! Совершенно сейчас нет времени вникать в кучу настроек ArchiCad.
Репутация: 0
На сайте c 21.11.2017
Сообщений: 5
Здравствуйте! А как сохранить проект из ArhiCAD19 в формате dwg, если каждый чертёж находится на отдельном рабочем листе? И почти на каждом рабочем листе стоит разный масштаб? а нужно, чтоб они все вместе сохранились.
На сайте c 26.09.2006
Сообщений: 5064
Белокаменная
lina138 все как описано выше, так и делайте. Все сохранится в один файл. В Autocade будут Листы и в Model все чертежи.
Репутация: 0
На сайте c 21.11.2017
Сообщений: 5
Вот почему-то так не получается. когда открывается в Autocad показывает только тот лист, на котором я находилась при сохранении( Может ещё какие-то настройки нужно поставить?
На сайте c 26.09.2006
Сообщений: 5064
Белокаменная
На первом скрине Bestviz красной рамочкой выделено.
Репутация: 0
На сайте c 21.11.2017
Сообщений: 5
У меня не появляется такая галка, мб потому, что версия архикада другая? Как же ещё можно сохранить? Подскажите пожалуйста
На сайте c 26.09.2006
Сообщений: 5064
Белокаменная
Цитата lina138:
У меня не появляется такая галка, мб потому, что версия архикада другая? Как же ещё можно сохранить? Подскажите пожалуйста
Как то не правильно ты сформировал Публикацию. У тебя Листы лежат сами по себе, и публикатор не понимает кого с кем объединять. Листы должны быть в «каталоге/папке».
Как собрать несколько файлов dwg в один файл dwg?
Форумы CADUser → Autodesk → AutoCAD → Как собрать несколько файлов dwg в один файл dwg?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщения 12
#1 Тема от SID 27 сентября 2006г. 09:25:55
Тема: Как собрать несколько файлов dwg в один файл dwg?
У меня 50 акадовских файлов (формат А3).
Мне надо собрать эти форматки в один файл.
Подскажите, пожалуйста, как это сделать быстро.
#2 Ответ от VVA 27 сентября 2006г. 09:37:16
Re: Как собрать несколько файлов dwg в один файл dwg?
В порядке предпочтения
1. _xref (если в один, то потом внедрить)
2. _insert (могут быть артефакты с повторным определением блоков)
#3 Ответ от Vova 28 сентября 2006г. 05:29:50
Re: Как собрать несколько файлов dwg в один файл dwg?
Зачем столько много чертежей грузить в один файл? Гораздо продуктивней оставить как было, но собрать в один фолдер. Или по тематике но не в один, а в несколько файлов, а те-в один фолдер. И похоже, все сделано без использования пространства листа. Без анализа файлов могут быть проблемы, на которые указал VVA. Если в разных файлах одинаковым именем названы разной конфигурации блоки, получится бардак. Если одинаково названы слои, но имеют разные цвета, тоже будет бардак. То-же с масштабом линий, и так далее.
#4 Ответ от SID 12 октября 2006г. 05:58:08
Re: Как собрать несколько файлов dwg в один файл dwg?
> Vova
У меня по проекту 3000 файлов и просмотр затруднителен, когда они в разных файлах. В папках по одной тематики до 80 файлов и смотреть их удобней когда они собраны в один файл. Проблем с блоками, слоями, цвет линии и т.д. нет.
#5 Ответ от SID 12 октября 2006г. 06:00:03
Re: Как собрать несколько файлов dwg в один файл dwg?
> VVA
Спасибо за информацию, но не подходят эти варианты.
#6 Ответ от LeonidSN 12 октября 2006г. 21:37:28
Re: Как собрать несколько файлов dwg в один файл dwg?
#7 Ответ от BigScrew 12 октября 2006г. 22:40:32
Re: Как собрать несколько файлов dwg в один файл dwg?
> SID
Интересно, отчего совет VVA не подходит?
#8 Ответ от SID 13 октября 2006г. 12:49:35
Re: Как собрать несколько файлов dwg в один файл dwg?
> LeonidSN
copy -> paste
долго
#9 Ответ от SID 13 октября 2006г. 12:59:40
Re: Как собрать несколько файлов dwg в один файл dwg?
> BigScrew
1 Вариант – долго растаскивать изображения по чертежу. Мне желательно чтобы чертежи шли друг за другом, и весь этот процесс хотелось бы автоматизировать.
2 Вариант – рутинная работа (долго) copy -> paste.
#10 Ответ от SID 13 октября 2006г. 13:07:43
Re: Как собрать несколько файлов dwg в один файл dwg?
Я так понимаю, нужен макрос для выполнения задуманного.
#11 Ответ от VVA 13 октября 2006г. 14:47:35
Re: Как собрать несколько файлов dwg в один файл dwg?
> SID
Пробуй
;|============================================================================= * функция z-files-in-directory возвращает список файлов находящаяся в заданной * директории * Автор : Зуенко Виталий (ZZZ) * Параметры: * directory путь к папке например "D:\\Мои документы\\ZEF\\Lisp" * pattern шаблон например "*.lsp" или список '("*.dwg" "*.dxf") * nested искать в вложенных папках: t (да) или nil (нет) * Пример вызова: (z-files-in-directory "D:\\Мои документы\\ZEF\\Lisp" "*.dwg" t) (z-files-in-directory "D:\\Мои документы\\ZEF\\Lisp" '("*.dwg" "*.dwt") t) =============================================================================|; (defun z-files-in-directory (directory pattern nested /) (if (not (listp pattern))(setq pattern (list pattern))) (if nested (apply 'append (append (mapcar '(lambda (_pattern) (mapcar '(lambda (f) (strcat directory "\\" f)) (vl-directory-files directory _pattern 1))) pattern) ;_ mapcar (mapcar '(lambda (d) (z-files-in-directory (strcat directory "\\" d) pattern nested)) (vl-remove "." (vl-remove ".." (vl-directory-files directory nil -1)))))) (apply 'append (mapcar '(lambda (_pattern)(mapcar '(lambda (f) (strcat directory "\\" f)) (vl-directory-files directory _pattern 1))) pattern)))) (defun C:LotXref ( / col icol dX dY dYmax fil dwglist pt ptv adoc p1 p2) (vl-load-com) (setq adoc (vla-get-activedocument (vlax-get-acad-object))) (vla-StartUndoMark adoc) (setvar "CMDECHO" 0) (setq col 10 ;_По 10 элементов в строку icol 0 dX 0 dY 0 dYmax 0) (if *LAST_DIR* (setq fil (getfiled "Выберите файл для вставки" *LAST_DIR* "dwg" 16)) (setq fil (getfiled "Выберите файл для вставки" "" "dwg" 16)) ) ;_ end of if (if fil (progn (setq *LAST_DIR* (strcat (vl-filename-directory fil) "\\")) (VL-PROPAGATE '*LAST_DIR*) (setq dwglist (z-files-in-directory (vl-filename-directory fil) '"*.dwg" nil)) (setq pt '(0 0 0) ptv pt) (foreach dwg dwglist (if (= icol col) (setq ptv (list (car pt)(cadr ptv)) ptv (polar ptv (* 0.5 pi)(+ dYmax 50)) dYmax 0 dX 0 dY 0 icol 0)) (setq ptv (polar ptv 0 (+ dX 50))) (princ "\nОбрабатываю ")(princ dwg) (vl-cmdf "_-XREF" "_Attach" dwg ptv "1" "1" "0") (setq xref (vlax-ename->vla-object (entlast))) (vla-GetBoundingBox xref 'p1 'p2) (vla-move xref p1 (vlax-3d-point ptv)) (setq minpt (vlax-safearray->list p1)) (setq maxpt(vlax-safearray->list p2)) (setq dY (abs (- (cadr maxpt)(cadr minpt)))) (setq dX (abs (- (car maxpt)(car minpt)))) (if (or (null dYmax)(< dYmax dY))(setq dYmax dY)) (setq icol (1+ icol))))) (vla-StartUndoMark adoc) (vl-cmdf "_ZOOM" "_ALL") (princ)) (princ "\nНаберите LotXref")
#12 Ответ от Миша 13 октября 2006г. 18:49:45
Re: Как собрать несколько файлов dwg в один файл dwg?
Скопируй этот текст в модуль и запусти макрос "ОбединитьФайлы"
Option Explicit Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" _ (pOpenfilename As OPENFILENAME) As Long Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" _ (pOpenfilename As OPENFILENAME) As Long Const OFN_ALLOWMULTISELECT = &H200 Const OFN_EXPLORER = &H80000 'Don 't change Windows's current directory to match the one chosen in the dialog box. Type OPENFILENAME lStructSize As Long hwndOwner As Long hInstance As Long lpstrFilter As String lpstrCustomFilter As String nMaxCustFilter As Long nFilterIndex As Long lpstrFile As String nMaxFile As Long lpstrFileTitle As String nMaxFileTitle As Long lpstrInitialDir As String lpstrTitle As String flags As Long nFileOffset As Integer nFileExtension As Integer lpstrDefExt As String lCustData As Long lpfnHook As Long lpTemplateName As String End Type Const mstrНазваниеПрограммы As String = "Объединение файлов" Dim mlngОтвет As Long Public Sub ОбъединитьФайлы() 'Подпрограмма просит выделить несколько чертежей и вставляет их в виде блоков в текущий чертёж в одну линию Dim intНомЧертежа As Integer, intКолвоЧертежей As Integer Dim colСписокЧертежей As Collection, vСписокФайлов As Variant Dim objБлокЧертежа As AcadExternalReference Dim insertionPnt(0 To 2) As Double Dim vТочка As Variant Dim lngНомОбъекта As Long, objОбъектЧертежа As AcadObject Dim vminExt As Variant, vmaxExt As Variant, blnПризнакПолученияНачКоординат As Boolean Dim dblЛеваяНижняяТочка(0 To 2) As Double, dblПраваяВерхняяТочка(0 To 2) As Double Dim dblШирина As Double, dblВысота As Double On Error GoTo ОбработкаОшибок 'Выведем диалоговое окно открытия файлов и попросим выбрать чертежи Set vСписокФайлов = ShowOpen("Чертежи AutoCAD (*.dwg)" + Chr$(0) + "*.dwg" + Chr$(0) + _ "Чертежи AutoCAD (*.dxf)" + Chr$(0) + "*.dxf" + Chr$(0), "Выбери файлы объединяемых чертежей") If VarType(vСписокФайлов) = vbEmpty Then MsgBox "Наверное выбрано слишком много файлов", vbInformation, mstrНазваниеПрограммы Exit Sub End If 'Получим точку вставки ПолучитьТочкуВставки: vТочка = ThisDrawing.Utility.GetPoint(, "Укажи точку вставки:") If Err.Number <> 0 Then mlngОтвет = MsgBox("Продолжать выбирать точку вставки?", vbYesNo, mstrНазваниеПрограммы) If mlngОтвет = vbYes Then Err.Clear GoTo ПолучитьТочкуВставки ElseIf mlngОтвет = vbNo Then Exit Sub End If End If 'Для каждого чертежа определим ширину и вставим блок For intНомЧертежа = 2 To vСписокФайлов.Count 'Создадим новый блок Set objБлокЧертежа = ThisDrawing.ModelSpace.AttachExternalReference(vСписокФайлов(1) & "\" & vСписокФайлов(intНомЧертежа), vСписокФайлов(intНомЧертежа), vТочка, 1, 1, 1, 0, False) 'Получим координаты крайних точек чертежа objБлокЧертежа.GetBoundingBox vminExt, vmaxExt dblЛеваяНижняяТочка(0) = vminExt(0) dblЛеваяНижняяТочка(1) = vminExt(1) dblПраваяВерхняяТочка(0) = vmaxExt(0) dblПраваяВерхняяТочка(1) = vmaxExt(1) dblШирина = (dblПраваяВерхняяТочка(0) - dblЛеваяНижняяТочка(0)) ' dblВысота = (dblПраваяВерхняяТочка(1) - dblЛеваяНижняяТочка(1)) ThisDrawing.Blocks.Item(objБлокЧертежа.Name).Bind False vТочка(0) = vТочка(0) + dblШирина Next intНомЧертежа MsgBox "Было вставлено " & vСписокФайлов.Count - 1 & " файлов", vbInformation, mstrНазваниеПрограммы Exit Sub ОбработкаОшибок: MsgBox "При объединении файлов произошла ошибка:" & vbLf & _ "номер = " & Err.Number & vbLf & _ "с описанием: " & Err.Description, vbExclamation, mstrНазваниеПрограммы Resume Next End Sub '@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@ ' Display and use the File open dialog '@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@ Private Function ShowOpen(strFilter As String, strTitle As String) As Variant Dim strTemp As String Dim VertName As OPENFILENAME VertName.lStructSize = Len(VertName) VertName.hwndOwner = ThisDrawing.hWnd VertName.lpstrFilter = strFilter VertName.lpstrFile = Space$(254) VertName.nMaxFile = 255 VertName.lpstrFileTitle = Space$(254) VertName.nMaxFileTitle = 255 VertName.lpstrInitialDir = CurDir VertName.lpstrTitle = strTitle VertName.flags = OFN_ALLOWMULTISELECT + OFN_EXPLORER If GetOpenFileName(VertName) Then strTemp = (Trim(VertName.lpstrFile)) Set ShowOpen = ПолучитьСемействоПодстрок(Left(strTemp, Len(strTemp) - 1), Right(strTemp, 1)) End If End Function Private Function ПодсчётКоличестваЛексем(ByVal strТекст As String, ByVal strРаделитель As String) As Long 'Фунция определения числа появлений строки strРаделитель в строке strТекст (стр. 61 "Программирование в Microsoft Office. Полное руководство по VBA") Dim lngКоличество As Long Dim lngНачПозиция As Long 'Если не задана строка для поиска, то, естественно, 'ничего не может быть найдено, таким образом возвращается 0 If VBA.Len(strТекст) > 0 Then lngНачПозиция = 1 Do lngНачПозиция = VBA.InStr(lngНачПозиция, strТекст, strРаделитель, vbTextCompare) If lngНачПозиция > 0 Then lngКоличество = lngКоличество + 1 lngНачПозиция = lngНачПозиция + VBA.Len(strРаделитель) End If Loop While lngНачПозиция > 0 Else lngКоличество = 0 End If ПодсчётКоличестваЛексем = lngКоличество End Function Private Function ВыделениеЗаданнойПодстроки(ByVal strТекст As String, ByVal lngНомСлова As Long, _ ByVal strРазделители As String) As String 'Функция выделения лексем из списка с разделителями (стр. 85 "Программирование в Microsoft Office. Полное руководство по VBA") 'Список содержится в переменной strТекст 'а параметр lngНомСлова определяет, какой из фрагментов выделять Dim lngНомПозиции As Long Dim lngПрошлаяПозиция As Long Dim lngНомНайденногоСлова As Long Dim lngНайденнаяПозиция As Long lngНомПозиции = 1 lngПрошлаяПозиция = -Len(strРазделители) + 1 lngНомНайденногоСлова = lngНомСлова Do While lngНомНайденногоСлова > 0 lngПрошлаяПозиция = lngНомПозиции lngНайденнаяПозиция = VBA.InStr(lngНомПозиции, strТекст, strРазделители) If lngНайденнаяПозиция > 0 Then lngНомПозиции = lngНайденнаяПозиция + Len(strРазделители) lngНомНайденногоСлова = lngНомНайденногоСлова - 1 Else Exit Do End If Loop 'Если искомой строки не обнаружено, 'Данная итерация не была первой '(в этом случае значения lngНомНайденногоСлова и lngНомСлова были бы равны) 'и lngНомНайденногоСлова > 1, то вы закончили просмотр лексем, не найдя нужную 'Это означает, что номер лексемы был слишком большим 'В таком случае возвращается "" If (lngНайденнаяПозиция = 0) And (lngНомНайденногоСлова <> lngНомСлова) And (lngНомНайденногоСлова > 1) Then ВыделениеЗаданнойПодстроки = "" Else ВыделениеЗаданнойПодстроки = VBA.Mid$(strТекст, lngПрошлаяПозиция, lngНайденнаяПозиция - lngПрошлаяПозиция) End If End Function Private Function ПолучитьСемействоПодстрок(ByVal strТекст As String, ByVal strРаделитель As String) As Variant 'Возвращает семейство, содержащее все лексемы строки, 'используя указанные разделители (стр. 91 "Программирование в Microsoft Office. Полное руководство по VBA") Dim colКоллекцияЛексем As New Collection Dim lngНомЛексемы As Long Dim strВременнаяСтрока As String Dim lngКолвоЛексем As Long Dim strСимвол As String * 1 'Определяется количество лексем в заданной строке lngКолвоЛексем = ПодсчётКоличестваЛексем(strТекст, strРаделитель) 'Цикл по всем лексемам с добавлением их к выходному семейству For lngНомЛексемы = 1 To lngКолвоЛексем strВременнаяСтрока = ВыделениеЗаданнойПодстроки(strТекст, lngНомЛексемы, strРаделитель) colКоллекцияЛексем.Add strВременнаяСтрока, strВременнаяСтрока Next lngНомЛексемы 'Возврат выходного семейства Set ПолучитьСемействоПодстрок = colКоллекцияЛексем End Function