Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Export selection/ fixed view to DWG file

Good evening,
I'm developing a parametric drawing for elevators scheme using ODCL.
I need to export a fixed part or the drawing to a DWG file in order to  view it inside an ODCL dialog.
How can I do it?
Thanks a lot for any reply 
Marco

Comments

  • [..] I need to export a fixed part *of the drawing [..]
  • Instead of doing something as complicated as exporting part of a drawing, although this can be done, I would first look at the BlockView control and the BlockView-PreLoadDwg method. This method will allow you to display blocks from another drawing. This means that all you would have to do is create a block from the 'fixed part' which you may need anyway.
    [code](setvar 'cmdecho 0)
    (command "_.Opendcl")
    (setvar 'cmdecho 1)

    (defun c:Test ( / c:BlkViewTest/Form1#OnInitialize)

      (defun c:BlkViewTest/Form1#OnInitialize (/)
        (dcl-BlockView-PreLoadDwg   BlkViewTest/Form1/BlockView1 "BlkViewTest.dwg")
        (dcl-Control-SetBlockName   BlkViewTest/Form1/BlockView1 "circ")
        (dcl-BlockView-Zoom         BlkViewTest/Form1/BlockView1 0.9)
      )

      (dcl-Project-Load "BlkViewTest" T)
      (dcl-Form-Show BlkViewTest/Form1)
    )[/code]
  •  Thank you Roy.
    Your solution worked with a statical drawing.
    The problem now is that I have to show some drawings that are dinamically created via lisp code.
    There is a way to generate drawing and assing each component to a block?  

    Marco
  • Your use of the word 'fixed' is then confusing...
    I also do not know what you mean by 'component'.

    Here is some code to demonstrate creating a dwg with a block definition 'on the fly':
    [code](setvar 'cmdecho 0)
    (command "_.Opendcl")
    (setvar 'cmdecho 1)

    (defun c:Test ( / c:BlkViewTest/Form1#OnInitialize docNme)

      (defun c:BlkViewTest/Form1#OnInitialize (/)
        (dcl-BlockView-PreLoadDwg   BlkViewTest/Form1/BlockView1 docNme)
        (dcl-Control-SetBlockName   BlkViewTest/Form1/BlockView1 "circ")
        (dcl-BlockView-Zoom         BlkViewTest/Form1/BlockView1 0.9)
      )

      (setq docNme (CreateDwgWithBlock))
      (dcl-Project-Load "BlkViewTest" T)
      (dcl-Form-Show BlkViewTest/Form1)
      (vl-file-delete docNme)
      (princ)
    )

    (defun CreateDwgWithBlock ( / blkDefObj docNme docObj)
      (setq docNme (vl-filename-mktemp ".dwg"))
      (setq docObj
        (vla-getinterfaceobject (vlax-get-acad-object) "objectdbx.axdbdocument")
      )
      (setq blkDefObj (vla-add (vla-get-blocks docObj) '(0.0 0.0 0.0) "circ"))
      (vla-addcircle blkDefObj '(0.0 0.0 0.0) 10.0)
      (vla-addcircle blkDefObj '(0.0 0.0 0.0) 30.0)
      (vla-saveas docObj docNme acnative)
      (vlax-release-object docObj)
      docNme
    )[/code]

  •  with "fixed part of the drawing" I mean the part of a drawing statically identified by a rectangle.
    with "component" I mean each line,rectangle and text that compose the drawing.
    The problem in my case is that the "interesting part" of the drawing is defined in a very complicate third part lisp routine.
    Select the components via rectangle and export that selection in a temporary DWG I'm afraid that is the only way to solve my problem.
    After the generation of the drawing i will load it in a blockview control via preloaddwg function.
    I attach an example DWG.
    Suppose the part to export is the rectangle with the star in the drawing.
    Thank you 
    MM

    example.dwg

  •  The EXPORTLAYOUT command (new in V16) exports the content of a layout viewport to a new drawing. Please notice the exported geometry is scaled by the Viewport's 'Custom Scale'. The drawing is clipped by the viewport borders.
  • @ Marco:
    Here is some Lisp code demonstrating the creation of a temporary dwg with a block definition containing entities copied from a source dwg.
    In the code the srcObjLst is not yet 'filtered' based on a rectangular window. You will have to do that yourself. You can use vla-getboundingbox or vle-getboundingbox to determine the boundingbox of entities and then check if they fall inside the desired rectangle.
    [code](defun _Sys_ApplyAlt (expr varLst)
      (not (vl-catch-all-error-p (vl-catch-all-apply expr varLst)))
    )

    (setvar 'cmdecho 0)
    (command "_.Opendcl")
    (setvar 'cmdecho 1)

    (defun c:Test ( / c:BlkViewTest/Form1#OnInitialize docNme)
      (defun c:BlkViewTest/Form1#OnInitialize (/)
        (dcl-BlockView-PreLoadDwg   BlkViewTest/Form1/BlockView1 docNme)
        (dcl-Control-SetBlockName   BlkViewTest/Form1/BlockView1 "TMP")
        (dcl-BlockView-Zoom         BlkViewTest/Form1/BlockView1 0.9)
      )
      (if (setq docNme (CreateDwgWithBlockFromSource (findfile "example.dwg")))
        (progn
          (dcl-Project-Load "BlkViewTest" T)
          (dcl-Form-Show BlkViewTest/Form1)
          (vl-file-delete docNme)
        )
        (princ "\nError: cannot open dwg ")
      )
      (princ)
    )

    (defun CreateDwgWithBlockFromSource (srcDocNme / srcDocObj srcObjLst trgDocNme trgDocObj)
      (setq srcDocObj
        (vla-getinterfaceobject (vlax-get-acad-object) "objectdbx.axdbdocument")
      )
      (setq trgDocObj
        (vla-getinterfaceobject (vlax-get-acad-object) "objectdbx.axdbdocument")
      )
      (if
        (and
          (_Sys_ApplyAlt 'vla-open (list srcDocObj srcDocNme))
          (setq srcObjLst (cdr (vle-collection->list (vla-get-modelspace srcDocObj))))
        )
        (progn
          (vlax-invoke
            srcDocObj
            'copyobjects
            srcObjLst
            (vla-add (vla-get-blocks trgDocObj) '(0.0 0.0 0.0) "TMP")
          )
          (setq trgDocNme (vl-filename-mktemp ".dwg"))
          (vla-saveas trgDocObj trgDocNme acnative)
        )
      )
      (vlax-release-object srcDocObj)
      (vlax-release-object trgDocObj)
      trgDocNme
    )[/code]
Sign In or Register to comment.
Origami
Origami is the Japanese word for paper folding. ORI means to fold and KAMI means paper and involves the creation of paper forms usually entirely by folding.

Powered by VanillaForums, Designed by Steam