Author Topic: Importing AEC Styles  (Read 2236 times)

0 Members and 1 Guest are viewing this topic.

jbuzbee

  • Swamp Rat
  • Posts: 832
Importing AEC Styles
« on: July 22, 2007, 11:32:39 AM »
I've never been able to figure out how to Import ADT Styles using ObjectDBX.  The problem is when a style has extended data attached in the form of Property Sets, Classifications or Materials.  This extended data, if present in the receiving drawing, won't be attached to the style being Imported: a new Property Set, if you will, is created: MyDoorScheduleData(2) - leaving MyDoorScheduleData thus creating multiple duplications: what a mess.

So here's my solution (I can't believe after all these years).  Open a drawing that has a style you want to import using ObjectDBX (an axdbDocument).  Create a block in the axdbdocument using activex.  Add an object of the type and style you want to import with (vla-AddCustomObject ...) to that block.  Use (vla-CopyObjects) to import the block into the active drawing.  Delete the block. 

Because ObjectDBX doesn't save the opened axdbDocument you don't have to worry about managing the temporary block  "jbTempBlock".

****
Update:

Classifications are the only remaining problem.  I can't understand why these don't update.  Materials, PropertySets, Profiles all update fine - just classifications.  Oh well, I guess I won't be using classifications any more.

****

Code: [Select]
(vl-load-com)

;;;Use (jb:ImportADTStyle (getfiled "Select a file" (getvar "dwgprefix") "dwg" 0) "AECDOOR" "AL-2-AL")

(defun jb:ImportADTStyle  (file aecobjtype stylename / dbxDoc blocks block aecobj newblk localBlocks)
  (setq dbxDoc (jb:OpenDbxDocument file))
  (if dbxdoc
    (progn (setq localBlocks(vla-get-blocks(vla-get-ActiveDocument (vlax-get-acad-object)))
                 blocks (vla-get-blocks dbxDoc)
                 block  (vla-add blocks (vlax-3d-point 0 0) "jbTempBlock")
                 aecobj (vla-AddCustomObject block aecobjtype))
           (if aecobj
             (progn (vla-put-stylename aecobj stylename)
                    (setq newblk (vl-catch-all-apply
                                   'vla-CopyObjects
                                   (list dbxDoc
                                         (vlax-safearray-fill
                                           (vlax-make-safearray vlax-vbObject '(0 . 0))
                                           (list (vla-item blocks "jbTempBlock")))
                                         localBlocks)))))))
  (if (tblsearch "block" "jbTempBlock")(vla-delete (vla-item localBlocks "jbTempBlock")))
  (if dbxdoc
    (jb:closedbxdocument dbxDoc)))


;;;Support subs
;;;(setq dwgname(findfile "AecLayerStd.dwg"))
;;;   Open a dbxDoc      ;
;;;   use (setq dbxDocument(jb:OpenDbxDocument dwgname)) ;
(defun jb:OpenDbxDocument  (DwgName / app doc dbxopen dbxDoc)
  (setq app (vlax-get-acad-object)
        doc (vla-get-ActiveDocument app))
  (if (/= dwgname (vla-get-fullname doc))
    (progn (cond ((= (substr (getvar "ACADVER") 1 5) "15.06")
                  (setq dbxDoc  (vla-GetInterfaceObject app "ObjectDBX.AxDbDocument")
                        dbxopen (vl-catch-all-apply 'vla-open (list dbxDoc DwgName))))
                 (t
                  (setq dbxDoc  (vla-GetInterfaceObject
                                  app
                                  (strcat "ObjectDBX.AxDbDocument." (substr (getvar "acadver") 1 2)))
                        dbxopen (vl-catch-all-apply 'vla-open (list dbxDoc DwgName)))))
           (if (vl-catch-all-error-p dbxopen)
             (setq dbxDoc nil))))
  dbxDoc)

;;; (vlax-dump-Object dbxDoc t)
;;; Close dbxDoc
;;; (jb:CloseDbxDocument dbxDocument)
(defun jb:CloseDbxDocument  (dbxdoc)
  (if (= (type dbxDoc) 'VLA-OBJECT)
    (progn (vlax-release-object dbxDoc) (setq dbxDoc nil))))

« Last Edit: July 23, 2007, 11:06:39 AM by jbuzbee »
James Buzbee
Windows 8

daron

  • Guest
Re: Importing AEC Styles
« Reply #1 on: July 23, 2007, 05:29:45 PM »
That's very nice J. I'll have to load it and look into that.