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

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

Изменение типа внешней ссылки

Ответ
Поиск в этой теме
Непрочитано 27.10.2008, 14:11 #1
Изменение типа внешней ссылки
Mazai
 
Москва
Регистрация: 04.04.2008
Сообщений: 97

Хотел сделать следующее - изменить сразу для всех внешних ссылок их тип с "вставленного" на "наложенный" (в моём чертеже у меня более 30 ссылок и таких чертежй не мало). Не знаю, возможно ли это сделать "нормально" сандартными средствами автокада, но мне не удалось найти как. Думаю что это возможно отработать с помощью Лиспа, но не представляю как это осуществить.
P.S.: Вся эта канитель произошла из-за экспорта чертежа из Микростейшена (.dgn) в Автокад (.dwg), он почему-то по умолчанию задал им тип "вставленный" и в итоге получились зацикленные ссылки.
Просмотров: 3504
 
Непрочитано 27.10.2008, 14:16
#2
Кулик Алексей aka kpblc
Moderator

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


Функция глобальной замены абсолютных путей ссылок и растров на относительные и обратно, версия: 0.91
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.10.2008, 14:28
#3
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Кулик Алексей aka kpblc, Алексей, мне кажется нужно немного не это, а это Change xref type ( overlay / attach ) and getting the xclip boundary [ beta ]
Форум требует регистрации, код оттуда (автор T.Willey)
Функции
Код:
[Выделить все]
(defun GetSpatialFilter (ename / Data Dict tempDict)
    ; Get the xclip boundry
    
    (if
        (and
            (setq Data (entget ename))
            (setq Dict (cdr (assoc 360 Data)))
            (setq tempDict (dictsearch Dict "ACAD_FILTER"))
            (setq tempDict (dictsearch (cdr (assoc -1 tempDict)) "SPATIAL"))
        )
        (cons '(0 . "SPATIAL_FILTER") (member (assoc 100 tempDict) tempDict))
    )
)
(defun SetSpatialFilter (ename fltData / Data Dict tempDict tempList)
    ; Set the xclip boundry
    
    (if
        (and
            (setq Data (entget ename))
            (setq Dict
                (if (setq tempList (assoc 360 Data))
                    (cdr tempList)
                    (entmakex '((0 . "DICTIONARY") (100 . "AcDbDictionary")))
                )
            )
            (setq tempDict
                (if (setq tempList (dictsearch Dict "ACAD_FILTER"))
                    (cdr (assoc -1 tempList))
                    (dictadd Dict "ACAD_FILTER" (entmakex '((0 . "DICTIONARY") (100 . "AcDbDictionary"))))
                )
            )
        )
        (progn
            (dictremove tempDict "SPATIAL")
            (dictadd tempDict "SPATIAL" (entmakex fltData))
            (entmod
                (if (setq tempList (assoc 360 Data))
                    (subst (cons 360 Dict) tempList Data)
                    (progn
                        (setq tempList (member (assoc 5 Data) (reverse Data)))
                        (append
                            (reverse tempList)
                            (append
                                (list
                                    '(102 . "{ACAD_XDICTIONARY")
                                    (cons 360 Dict)
                                    '(102 . "}")
                                )
                                (member (assoc 5 Data) Data)
                            )
                        )
                    )
                )
            )
        )
    )
)
(defun GetCurrentXrefPath (doc fileName / FileDep cnt tempFd)
    
    (setq FileDep (vla-get-FileDependencies doc))
    (setq cnt 1)
    (while (<= cnt (vla-get-Count FileDep))
        (if
            (and
                (setq tempFd (vla-Item FileDep cnt))
                (= (vla-get-Feature tempFd) "Acad:XRef")
                (= (vla-get-FileName tempFd) fileName)
            )
            (setq cnt (1+ (vla-get-Count FileDep)))
            (setq cnt (1+ cnt)
                tempFd nil
            )
        )
    )
    (if tempFd
        (vla-get-FullFileName tempFd)
    )
)
(defun XrefType (doc xrObj bOverlay / tempEnt tempData InsList XrName XrPath tempXrObj tempXrEnt tempList BlkCol NewXrObj DidSwitch)
    
    (if
        (and
            (setq tempEnt (vlax-vla-object->ename xrObj))
            (setq tempData (entget tempEnt))
            (setq InsList (member (assoc 331 tempData) tempData))
            (setq InsList (cdr (member '(102 . "}") (reverse InsList))))
            (setq tempData (entget (cdr (assoc 360 tempData))))
            (setq XrName (cdr (assoc 2 tempData)))
            (setq XrPath (cdr (assoc 1 tempData)))
            (or
                (findfile Xrpath)
                (setq XrPath (GetCurrentXrefPath doc (strcat (vl-filename-base XrPath) (vl-filename-extension XrPath))))
            )
        )
        (progn
            (foreach i InsList
                (setq tempData (entget (cdr i)))
                (setq tempXrObj
                    (vlax-invoke
                        (vlax-ename->vla-object (cdr (assoc 330 tempData)))
                        'AttachExternalReference
                        XrPath
                        "TempXref"
                        (trans (cdr (assoc 10 tempData)) (cdr (assoc 210 tempData)) 0)
                        (cdr (assoc 41 tempData))
                        (cdr (assoc 42 tempData))
                        (cdr (assoc 43 tempData))
                        (cdr (assoc 50 tempData))
                        bOverLay
                    )
                )
                (vla-put-Layer tempXrObj (cdr (assoc 8 tempData)))
                (vlax-put tempXrObj 'Normal (cdr (assoc 210 tempData)))
                (setq tempXrEnt (vlax-vla-object->ename tempXrObj))
                (if (setq tempList (GetSpatialFilter (cdr i)))
                    (SetSpatialFilter tempXrEnt tempList)
                )
                (if (not BlkCol)
                    (setq BlkCol (vla-get-Blocks doc))
                )
                (entdel (cdr i))
            )
            (vla-Detach xrObj)
            (setq NewXrObj (vla-Item BlkCol "TempXref"))
            (vla-put-Name NewXrObj XrName)
            (setq DidSwitch T)
        )
    )
    DidSwitch
)
Команды
Код:
[Выделить все]
(defun c:ToggleXrefs (/ ActDoc Sel EntData BlkCol XrName BlkDef)
    
    (setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
    (vla-EndUndoMark ActDoc)
    (vla-StartUndoMark ActDoc)
    (if
        (and
            (setq Sel (entsel "\n Select xref to toggle between overlay and attach: "))
            (setq EntData (entget (car Sel)))
            (= (cdr (assoc 0 EntData)) "INSERT")
            (setq BlkCol (vla-get-Blocks ActDoc))
            (setq XrName (cdr (assoc 2 EntData)))
            (setq EntData (tblsearch "block" XrName))
            (setq BlkDef (vla-Item BlkCol XrName))
            (equal (vla-get-IsXref BlkDef) :vlax-true)
        )
        (if (equal (logand (cdr (assoc 70 EntData)) 8) 8)
            (if (XrefType (vla-get-ActiveDocument (vlax-get-Acad-Object)) BlkDef 0)
                (prompt (strcat "\n Success in making xref: " XrName ", an attached xref."))
            )
            (if (XrefType (vla-get-ActiveDocument (vlax-get-Acad-Object)) BlkDef 1)
                (prompt (strcat "\n Success in making xref: " XrName ", an overlayed xref."))
            )
        )
    )
    (vla-EndUndoMark ActDoc)
    (princ)
)
(defun c:MakeAttach (/ ActDoc Sel EntData BlkCol XrName BlkDef)
    
    (setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
    (vla-EndUndoMark ActDoc)
    (vla-StartUndoMark ActDoc)
    (if
        (and
            (setq Sel (entsel "\n Select xref to toggle between overlay and attach: "))
            (setq EntData (entget (car Sel)))
            (= (cdr (assoc 0 EntData)) "INSERT")
            (setq BlkCol (vla-get-Blocks ActDoc))
            (setq XrName (cdr (assoc 2 EntData)))
            (setq EntData (tblsearch "block" XrName))
            (setq BlkDef (vla-Item BlkCol XrName))
            (equal (vla-get-IsXref BlkDef) :vlax-true)
            ;(MakeAttach (vla-get-ActiveDocument (vlax-get-Acad-Object)) BlkDef)
            (XrefType (vla-get-ActiveDocument (vlax-get-Acad-Object)) BlkDef 0)
        )
        (prompt (strcat "\n Success in making xref: " XrName ", an attached xref."))
    )
    (vla-EndUndoMark ActDoc)
    (princ)
)
(defun c:MakeOverlay (/ ActDoc Sel EntData BlkCol XrName BlkDef)
    
    (setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
    (vla-EndUndoMark ActDoc)
    (vla-StartUndoMark ActDoc)
    (if
        (and
            (setq Sel (entsel "\n Select xref to toggle between overlay and attach: "))
            (setq EntData (entget (car Sel)))
            (= (cdr (assoc 0 EntData)) "INSERT")
            (setq BlkCol (vla-get-Blocks ActDoc))
            (setq XrName (cdr (assoc 2 EntData)))
            (setq EntData (tblsearch "block" XrName))
            (setq BlkDef (vla-Item BlkCol XrName))
            (equal (vla-get-IsXref BlkDef) :vlax-true)
            ;(MakeOverlay (vla-get-ActiveDocument (vlax-get-Acad-Object)) BlkDef)
            (XrefType (vla-get-ActiveDocument (vlax-get-Acad-Object)) BlkDef 1)
        )
        (prompt (strcat "\n Success in making xref: " XrName ", an overlayed xref."))
    )
    (vla-EndUndoMark ActDoc)
    (princ)
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Изменение типа внешней ссылки

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись параметров вставки внешней ссылки в саму внешнюю ссылку. Supermax Программирование 72 27.07.2009 16:30
Преобразование внешней ссылки в блок Supermax Программирование 4 03.12.2007 23:25
Не явный путь задания внешней ссылки Елена AutoCAD 2 05.11.2004 00:21
Как отвязаться от внешней ссылки? Psip! AutoCAD 2 07.06.2004 21:23