萨维之后的维尔德绘图状态
我有一个相当简单的LISP程序,它可以自动执行我们在办公室里执行的任务。基本上,我们打开了一个旧的绘图,它包含了模型空间中的所有内容,我们在它上做了一些魔术,使它与布局选项卡和视口一起工作。到最后一切似乎都很顺利。制作PDF打印输出,并使用新名称保存图形。但是当我关闭图形,然后重新打开它时,以前的布局选项卡都被破坏了。保存文件时的视图是放大这个新的且唯一的布局选项卡的范围。但当我重新打开文件时,纸张空间一直延伸到屏幕的左侧,再加上用这段代码创建的视口也消失了。请记住,这是在LISP程序成功运行之后。这第一个屏幕截图是我在LISP代码完成后立即获得的。创建了一个PDF文件,该文件显示该布局选项卡渲染得很好。但当我关闭然后重新打开绘图时,它看起来像是第二个屏幕截图:
这个东西使用了所有的专有块,我不能在这里发布太多。但这是代码,没有所有的块可能没用。我真的不知道出了什么问题。如果是LISP问题或视频驱动程序问题?
(vl-load-com)
(defun C:revpart (/ tblkpath PartNo)
; INITIALIZE -------------------------------------------------------------------
(setq tblkpath (strcat "//a_long_novell_path/2014/8.5x11 - BOM.dwg")
svpath (strcat "//a_long_novell_path/New Parts/")
pdfpath (strcat svpath "PDF/")
PartNo "000001"
DwnBy "W.A."
PartTitle "HANDLE\\PSTANDARD"
)
(error)
(initerr)
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(setvar 'CECOLOR "ByLayer")
(setvar 'CELTYPE "ByLayer")
; INITIALIZE -------------------------------------------------------------------
; CREATE THE NEW LAYOUT TAB
(command "._LAYOUT" "_N" "8.5x11")
(setvar 'CTAB "8.5x11")
(vlax-for Obj (vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(if (= (vla-get-ObjectName Obj) "AcDbViewport")
(vla-Delete Obj)
)
)
; INSERT THE NEW TITLBLOCK IN THE NEW LAYOUT TAB
(command "._INSERT" tblkpath '(0.0 0.0 0.0) "" "" "")
; NOW DELETE THE OLD LAYOUT1 TAB
(command "._LAYOUT" "D" "Layout1" "")
; CREATE THE VIEWPORTS LAYER IF NEEDED - AND MOST OF THE TIME IT WILL
(if (= (tblsearch "layer" "Viewports") nil)
(command ".layer" "make" "Viewports" "color" 9 "Viewports" "")
)
(if (/= 0 (cdr (assoc 70 (tblsearch "layer" "Viewports"))))
(command ".layer" "t" "Viewports" "")
)
(if (> 0 (cdr (assoc 62 (tblsearch "layer" "Viewports"))))
(command ".layer" "on" "Viewports" "")
)
(command "._LAYER" "_COLOR" 9 "Viewports" "_PLOT" "N" "Viewports" "")
(setvar "CLAYER" "Viewports")
(setvar "CECOLOR" "BYLAYER")
(setvar "CELTYPE" "BYLAYER")
(ax:CreateVP (vla-get-activedocument (vlax-get-acad-object)) '(5.2813 4.5781 0) 10.1875 6.4688)
(command "._MSPACE")
(command "._GRID" "OFF")
(command "._ZOOM" "E")
(command "._PSPACE")
(command "._ZOOM" "E")
; FILL IN THE Title Block --------------------------------------------------------------
(MDraw_Title_Blk '(9.03125 0.6875) PartTitle "Title Block" "8.5x11" 0.1 "ROMAND" 5 0)
(Draw_Title_Blk '(9.75 0.3125) (today) "Title Block" "8.5x11" 0.09 "DIM" 0)
(Draw_Title_Blk '(8.5 0.125) PartNo "Title Block" "8.5x11" 0.09 "DIM" 0)
(Draw_Title_Blk '(7.875 0.3125) DwnBy "Title Block" "8.5x11" 0.09 "DIM" 0)
(Draw_Title_Blk '(8.5 0.3125) "NTS" "Title Block" "8.5x11" 0.09 "DIM" 0)
(Draw_Title_Blk '(7.875 0.125) "AEB" "Title Block" "8.5x11" 0.09 "DIM" 0)
(Draw_Title_Blk '(9.1875 0.3125) "1 1" "Title Block" "8.5x11" 0.09 "DIM" 0)
;----------------------------------------------------------------------------------------
(AddDwgProps)
(Print2PDF)
(SaveDwgFile)
(princ)
); end function
;;; (ax:CreateVP (vla-get-activedocument (vlax-get-acad-object)) '(200 200 0) 150 100)
(defun ax:CreateVP (ad center width height / ps ent)
(setq ps (vla-get-paperspace ad))
(vla-put-activespace ad acpaperspace)
(vla-put-mspace ad :vlax-false)
(setq ent
(vla-addpviewport
ps
(vlax-safearray-fill
(vlax-make-safearray
vlax-vbdouble
(cons 0 2)
)
center
)
width
height
)
)
(vla-put-viewporton ent :vlax-true)
(vla-display ent :vlax-true)
(vla-update ent)
); ax:CreateVP function
;-----------------------------------------------------------------------------------;
; UTITLITY FUNCTIONS ;
;-----------------------------------------------------------------------------------;
(defun M-Text (pt str txtclr almnt)
(entmakex (list (cons 0 "MTEXT")
(cons 100 "AcDbEntity")
(cons 100 "AcDbMText")
(cons 10 pt)
(cons 7 "DIM")
(cons 71 almnt)
(cons 62 txtclr)
(cons 1 str)))
); end function
; -------- SAVE FILE ---------------------------------------------------------------;
(defun SaveDwgFile (/ _fname)
(setq _fname (strcat svpath "DWG/" PartNo ".dwg"))
(setvar "EXPERT" 5)
(setvar "CTAB" "8.5x11")
(command "._CLAYER" "0")
(command "._PSPACE")
(command "._ZOOM" "A")
(reset)
(command "._SAVEAS" "2013" _fname)
(princ)
); end SaveDwgFile function
; ------------ Print2PDF -----------------------------------------------------------;
(defun Print2PDF (/ _papersize)
;(setq _papersize "ansi full bleed A (8.50 x 11.00 inches)")
(setvar 'CTAB "8.5x11")
(command "-plot"
"Y"
""
"DWGN To PDF"
"ansi full bleed A (8.50 x 11.00 inches)"
""
"L"
"N"
"L"
"F"
"0.25,0.25"
"Y"
"monochrome.ctb"
"Y"
"N"
"N"
"N"
(strcat pdfpath PartNo ".pdf")
"N"
"Y")
(princ)
); end Print2PDF funtcion
;-------------------------------------------------------------------------------------;
; ADD DRAWING PROPERTIES TO FILE FOR LATER USE
;-------------------------------------------------------------------------------------;
(defun AddDwgProps (/ dProps dProp)
(setq acadObject (vlax-get-acad-object))
(setq acadDocument (vla-get-ActiveDocument acadObject))
;;Get the SummaryInfo
(setq dProps (vlax-get-Property acadDocument 'SummaryInfo))
;;Edit the SummaryInfo properties
(vlax-put-Property dProps 'Title PartNo)
(vlax-put-Property dProps 'Subject "USF Fabrication Part Drawing")
(vlax-put-Property dProps 'Author (getvar "loginname"))
(vlax-put-Property dProps 'LastSavedBy "PartWizard")
(vlax-put-Property dProps 'RevisionNumber "0")
(princ)
); end AddDwgProps function
;--------------------------------------------------------------------------------------;
; DRAW TITLE BLOCK TEXT
;--------------------------------------------------------------------------------------;
(defun Draw_Title_Blk (pt txt lyr laysht txtsz tstyle rot)
(entmake
(list
(cons 0 "TEXT")
(cons 10 pt)
(cons 40 txtsz)
(cons 8 lyr)
(cons 1 txt)
(cons 410 laysht)
(cons 7 tstyle)
(cons 50 rot)
)
)
); end Draw_Titke_Blk function
;---------------------------------------------------------------------------------------;
; DRAW TITLE BLOCK MTEXT
;---------------------------------------------------------------------------------------;
(defun MDraw_Title_Blk (pt txt lyr laysht txtsz tstyle aln rot)
(entmake
(list
(cons 0 "MTEXT")
(cons 100 "AcDbEntity")
(cons 100 "AcDbMText")
(cons 10 pt)
(cons 40 txtsz)
(cons 8 lyr)
(cons 1 txt)
(cons 410 laysht)
(cons 7 tstyle)
(cons 71 aln)
(cons 50 rot)
)
)
); end MDraw_Title_Blk function
更新:我发现如果在关闭文件之前再次手动保存文件,一切都很好。但这次行动的重点是让一些Jr人员在这个平台上运行一些生产。我们有500多个这样的文件要用这个过程转换。
选中缩放A这将缩放到您可能需要的范围而不是范围。 我试过调整缩放动作。没有运气。在我关闭并重新打开它之前,这幅画看起来很好。这就是损坏发生的时候。当我重新打开刚才看起来很完美的同一个文件时,我似乎不明白为什么我在新的布局选项卡上创建的视口消失了。 好的,我似乎已经把范围缩小到了这段代码,这很冒犯:
;;;(vlax-for Obj (vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-Acad-Object)))
;;; (if (= (vla-get-ObjectName Obj) "AcDbViewport")
;;; (vla-Delete Obj)
;;; )
;;; )
这将删除创建newlayout选项卡时安装的默认视口。它被删除了,因为它的大小、位置等都不正确。。。所以我没有试着去调整它,我只是把它调整一下,然后在我需要的地方创建一个新的。当文件被保存、关闭并重新打开后,它会在布局选项卡偏离中心的情况下返回,并且它缺少由代码安装的视口。如果我把上面的代码块注释掉,然后手动做一些事情,它就会恢复正常。
神秘的是,只要我把文件打开,一切看起来都很好。但是,如果我关闭图形文件,然后重新打开它,新的布局选项卡将不正常,视口将消失。 不确定视口,这是一个奇怪的视口。
至于缩放问题,请尝试更改绘图例程,以便回答“将更改保存到页面设置”。
页:
[1]