Giáo trình Phát triển AutoCAD bằng ActiveX & VBA - Chương 9: Tạo bố cục và in ấn
Trong chương này 9
Khái niệm không gian mô
hình và không gian in
Bố cục bản vẽ
Khái niệm khung nhìn
In bản vẽ
Bạn đang xem tài liệu "Giáo trình Phát triển AutoCAD bằng ActiveX & VBA - Chương 9: Tạo bố cục và in ấn", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Giáo trình Phát triển AutoCAD bằng ActiveX & VBA - Chương 9: Tạo bố cục và in ấn
Phát triển ứng dụng ActiveX và VBA | 233 TẠO BỐ CỤC VÀ IN ẤN 9 Trong chương này Khái niệm không gian mô hình và không gian in Bố cục bản vẽ Khái niệm khung nhìn In bản vẽ Sau khi đã tạo bản vẽ trong AutoCAD, thông thường ta sẽ in bản vẽ ra giấy. Một bản vẽ in ra có thể chứa một ảnh đơn của bản vẽ hoặc là sự kết hợp, sắp xếp của nhiều ảnh khác nhau. Trong không gian in, ta có thể tạo nhiều cửa sổ gọi là các khung nhìn nổi, để hiển thị các ảnh khác nhau của bản vẽ. Tùy theo nhu cầu mà ta có thể in một hoặc nhiều khung nhìn, hoặc thiết lập các lựa chọn để xác định xem in cái gì và ảnh nằm vừa trong trang in như thế nào. 234 | Chương 9: Tạo bố cục và in ấn 1. Khái niệm không gian mô hình và không gian in Không gian mô hình (Model Space): là nơi để vẽ, nơi mà người dùng sẽ tạo ra các đối tượng hình học của một mô hình nào đó. Thông thường, khi bắt đầu vẽ trên không gian mô hình, ta cần chỉ rõ giới hạn và đơn vị của bản vẽ. Không gian in (Paper Space): là nơi thể hiện sự trình bày trên giấy của mô hình khi được in ra. Trong không gian in, ta có thể bố trí các khung nhìn khác nhau của bản vẽ, thu phóng các khung nhìn một cách độc lập và sắp xếp các khung nhìn khác nhau của bản vẽ để in. Có thể có nhiều không gian in, mỗi không gian in là một cách trình bày bản vẽ. 2. Bố cục bản vẽ Tất cả cấu tạo hình học của bản vẽ đều được chứa trong các Layout1. Không gian mô hình hình học được chứa trong một Layout riêng có tên là Model. Ta không thể thay đổi tên của Layout này cũng như tạo ra một Layout khác để chứa không gian mô hình hình học. Chỉ có một Layout chứa không gian mô hình trong một bản vẽ. Không gian in hình học được để trong nhiều Layout. Trong một bản vẽ có thể có nhiều Layout, mỗi cái thể hiện các cấu hình in khác nhau và ta có thể thay đổi tên của các Layout này. Trong ActiveX Automation, đối tượng ModelSpace bao gồm toàn bộ các đối tượng hình học trong Layout của không gian mô hình. Bởi vì Layout không gian in có thể nhiều hơn một trong cùng một bản vẽ nên đối tượng PaperSpace chỉ đến Layuot không gian in hiện hành cuối cùng. 2.1. Mối quan hệ giữa Layout và Block Nội dung của bất cứ Layout nào đều được đặt giữa hai đối tượng ActiveX khác nhau, đó là đối tượng Layout và đối tượng Block. Đối tượng Layout chứa các thiết lập về in ấn và các đặc tính về hiển thị của Layout như là cách thể hiện trên giao diện của AutoCAD. Đối tượng Block chứa thuộc tính hình học cho Layout. Mỗi đối tượng Layout được liên kết duy nhất với một đối tượng Block. Để truy cập vào đối tượng Block đã liên kết với Layout trước, sử dụng thuộc tính Block của Layout đó. Ngược lại, mỗi đối tượng Block cũng được liên kết với duy nhất một đối tượng Layout, và để truy cập vào đối tượng Layout đã liên kết với Block trước, sử dụng thuộc tính Layout cho Block đó. 2.2. Khái niệm về cấu hình in Đối tượng PlotConfiguration giống với đối tượng Layout ở chỗ chúng đều chứa các thông tin về in ấn. Khác biệt của chúng ở chỗ: đối tượng Layout được liên kết với 1 Layout: là một khái niệm trong AutoCAD, nó thể hiện cách bố trí các đối tượng hình học trong bản vẽ. Bởi AutoCAD có hai loại không gian dùng để vẽ với mục đích khác nhau (Model Space và Paper Space) cho nên khái niệm Layout sẽ tương ứng với những không gian vẽ này. Do trong tiếng Việt chưa có từ tương đương cho nên chúng tôi tạm sử dụng từ nguyên gốc tiếng Anh Phát triển AutoCAD bằng ActiveX và VBA | 235 một đối tượng Block chứa các đối tượng hình học cần in còn đối tượng PlotConfiguration không liên kết với một đối tượng Block nào, nó chỉ là tên của một tập hợp các thông số in ấn có sẵn dùng cho bất cứ đối tượng hình học nào. 2.3. Xác định các cấu hình của Layout Các cấu hình của Layout điều khiển kết quả in ra sau cùng. Những cấu hình này liên quan đến khổ giấy, tỷ lệ in, vùng in, gốc in và tên của thiết bị in. Việc hiểu rõ cách sử dụng một cách hợp lý các cấu hình trên sẽ đảm bảo kết quả in ra như mong muốn. Tất cả các cấu hình cần thiết lập và thay đổi đối với mỗi Layout có thể thực hiện thông qua các thuộc tính và phương thức của đối tượng Layout. 2.3.1. Lựa chọn khổ giấy và đơn vị in Khổ giấy được lựa chọn phụ thuộc vào cấu hình của thiết bị in được thiết lập trong hệ thống. Mối thiết bị in khác nhau sẽ có sẵn một danh sách các khổ giấy tiêu chuẩn. Để thay đổi khổ giấy trong Layout, sử dụng thuộc tính CanonicalMedia- Name. Đơn vị của bản in được xác định thông qua thuộc tính PaperUnits. Thuộc tính này có thể lấy một trong 3 giá trị là: acInches, acMillimeters, hoặc acPixels. Nếu thiết bị in được cấu hình in theo chế độ Raster thì buộc phải xác định kích thước theo đơn vị là Pixels (điểm ảnh) 2.3.2. Điều chỉnh gốc bản in Gốc bản in (plot origin) nằm ở góc phía dưới bên trái của một vùng in xác định và được điều khiển thông qua thuộc tính PlotOrigin. Vị trí mặc định của gốc này là (0,0). Tuy nhiên, ta có thể chuyển sang chế độ in canh giữa bằng cách gán thuộc tính CenterPlot bằng TRUE, khi đó gốc bản in sẽ được tự động thay đổi. 2.3.3. Thiết lập vùng in Khi chuẩn bị in một Layout cần chỉ rõ vùng in để xác định những gì cần in trong bản vẽ. Để chỉ định vùng in, ta sử dụng thuộc tính PlotType. Thuộc tính này có thể nhận một trong các giá trị dưới đây: acDisplay In tất cả các đối tượng đang thể hiện trong không gian mô hình. Tuỳ chọn này không có hiệu lực khi in từ một Layout không gian in acExtents In tất cả những đối tượng nằm trong đường biên hiện tại của không gian được lựa chọn acLimits In tất cả các đối tượng trong giới hạn của không gian hiện tại acView In cảnh nhìn được đặt tên bởi thuộc tính ViewToPlot acWindow In tất cả các đối tượng trong cửa sổ được chỉ định bằng phương thức SetWindowToPlot acLayout In tất cả các đối tượng nằm trong phần lề của khổ giấy được sử dụng. Tuỳ chọn này không có hiệu lực khi in trong không gian mô hình. Khi tạo một Layout không gian in mới, giá trị mặc định của tùy chọn này là acLayout. 236 | Chương 9: Tạo bố cục và in ấn 2.3.4. Thiết lập Tỷ lệ in Thông thường, ta vẽ theo kích thước thật của đối tượng, còn khi in ta có thể chỉ ra tỷ lệ chính xác hay tỷ lệ tương đối để bản vẽ phù hợp với khổ giấy. Tỷ lệ in có thể theo chuẩn hoặc tự chọn. Để nhập tỷ lệ tiêu chuẩn, trước hết gán thuộc tính UseStandardScale thành TRUE, sau đó nhập tỷ lệ mong muốn thông qua thuộc tính StandardScale. Để nhập tỷ lệ tự chọn, trước hết gán thuộc tính UseStandardScale thành FALSE, sau đó nhập tỷ lệ đó thông qua phương thức SetCustomScale. Khi chỉ cần xem bản vẽ hay phác thảo thì tỷ lệ chính xác là không quan trọng, trong trường hợp này có thể sử dụng giá trị acScaleToFit của thuộc tính StandardScale để bản in có tỷ lệ lớn nhất vừa với trang giấy in. 2.3.5. Thiết lập tỷ lệ cho độ dày nét vẽ Độ dày nét vẽ có thể được phóng đại một cách cân đối phù hợp với tỷ lệ in trong Layout. Điển hình là độ dày nét vẽ xác định bề rộng nét của đối tượng được in và được in ra với bề rộng nét không phụ thuộc vào tỷ lệ in. Thông thường nên sử dụng tỷ lệ in mặc định đối với mỗi Layout là 1:1. Tuy nhiên nếu muốn in một Layout vừa vào khổ giấy in khác với khổ của Layout đó thì cần chỉ rõ độ dày nét được phóng đại phù hợp với tỷ lệ in mới. Để phóng đại độ dày nét thì gán thuộc tính ScaleLineWeights thành TRUE và nếu không cần phóng đại nét vẽ thì gán thuộc tính này thành FALSE. 2.3.6. Thiết lập thiết bị in Tên thiết bị in được xác định trong thuộc tính ConfigName, thuộc tính này có thể nhận bất cứ giá trị tên thiết bị nào có hiệu lực trong hệ thống1. Khi không thiết lập một giá trị cụ thể thì công cụ in sẽ được sử dụng là thiết bị in mặc định trong hệ thống. 3. Khái niệm khung nhìn Khi làm việc trong không gian mô hình, ta vẽ trong các khung nhìn xếp cạnh nhau (tương ứng với đối tượng Viewport trong ActiveX Automation). Có thể hiển thị một hay vài khung nhìn khác nhau cùng một lúc. Nếu một vài khung nhìn được hiển thị, thì việc hiệu chỉnh trên một khung nhìn sẽ ảnh hưởng đến tất cả các khung nhìn còn lại. Tuy nhiên có thể gán độ phóng đại, điểm nhìn, lưới và bắt điểm độc lập cho mỗi khung nhìn. 1 Hệ thống ở đây được hiểu là hệ thống máy tính hoặc hệ thống mạng máy tính. Phát triển AutoCAD bằng ActiveX và VBA | 237 Khung nhìn xếp cạnh nhau Khung nhìn nổi Trong không gian in, ta làm việc trong các khung nhìn nổi của nó (ứng với đối tượng PViewport trong ActiveX Automation) để có thể thể hiện được tất cả các ảnh khác nhau của mô hình. Khung nhìn kiểu nổi được coi như một đối tượng nên có thể di chuyển, thay đổi kích thước và định hình dạng cho phù hợp với Layout. Ta cũng có thể vẽ các đối tượng, chẳng hạn như tên các khối hay chú thích, một cách trực tiếp trong không gian in mà không ảnh hưởng đến bản vẽ trong không gian mô hình. Trong không gian in, sẽ không thể hiệu chỉnh các đối tượng vẽ trong không gian mô hình. Để truy cập vào mô hình trong đối tượng PViewport, cần chuyển từ không gian in sang không gian mô hình thông qua thuộc tính ActiveSpace. Khi đó ta có thể làm việc với mô hình trong khi vẫn quan sát được các Layout. trong đối tượng PViewport, việc hiệu chỉnh và thay đổi góc nhìn gần giống như trong Viewport. Tuy nhiên, ta có thêm quyền điều khiển cho từng khung nhìn. Ví dụ: có thể đóng băng hoặc tắt các lớp trong một vài khung nhìn mà không ảnh hưởng đến các khung nhìn khác, có thể thể hiện tất cả hay một số khung nhìn, có thể căn hàng vị trí giữa các khung nhìn cũng như tỷ lệ quan sát cho phù hợp với toàn bộ Layout. Minh họa dưới đây làm thể hiện cách hiển thị các cảnh nhìn khác nhau của mô hình trong không gian in. Mỗi không gian in đại diện cho một đối tượng Pviewport với một cảnh nhìn khác nhau. Trong một cảnh nhìn, lớp đường kích thước đã được tắt. Chú ý rằng phần tiêu đề, khung và ghi chú vẽ trong không gian in không xuất hiện trong không gian mô hình. Ngoài ra, lớp chứa khung của khung nhìn cũng đã được tắt. Mô hình Mô hình được hiển thị thông qua các khung nhìn nổi Khi làm việc với đối tượng Viewport, thuộc tính ActiveSpace phải được gán giá trị là acModelSpace và khi làm việc trong đối tượng PViewport, ActiveSpace có thể 238 | Chương 9: Tạo bố cục và in ấn nhận một trong hai giá trị acModelSpace hoặc acPaperSpace, do vậy cho phép chuyển không gian in sang không gian mô hình và ngược lại khi cần thiết. Các đối tượng PViewport, Viewport và thuộc tính ActiveSpace Kiểu khung nhìn Trạng thái Sử dụng PViewport ActiveSpace = acPaperspace Bố trí các Layout bằng cách tạo ra các khung nhìn nổi, có thêm các tiêu đề, khung hay chú thích. Các thay đổi không làm ảnh hưởng đến mô hình. PViewport ActiveSpace= acModelspace Làm việc trong khung nhìn nổi để thay đổi mô hình hoặc thay đổi cảnh nhìn. Có thể đóng băng hoặc tắt các lớp trong từng khung nhìn. Viewport ActiveSpace= acModelspace Chia màn hình thành các khung nhìn xếp cạnh nhau để hiệu chỉnh trên các cảnh nhìn khác nhau của mô hình Trong AutoCAD ActiveX Automation, thuộc tính ActiveSpace được sử dụng để điều khiển biến hệ thống TILEMODE. Gán ThisDrawing.ActiveSpace=acModelSpace tương đương với gán TILEMODE=on và khi gán ThisDrawing.AciveSpace=acPaperSpace tương đương với gán TILEMODE=off. Tương tự, thuộc tính MSpace tương đương với hai lệnh của AutoCAD là MSPACE và PSPACE. Khi gán ThisDrawing.MSpace=TRUE sẽ tương đương với sử dụng lệnh MSPACE để chuyển sang không gian mô hình, và khi thuộc tính trên được gán giá trị FALSE sẽ tương đương với lệnh PSPACE để chuyển sang không gian in. Cần chú ý trước khi gán thuộc tính MSPACE thành TRUE cần sử dụng phương thức Display để khởi tạo các thông số đồ hoạ ban đầu trước khi chuyển sang không gian mô hình và để AutoCAD thực hiện các thao tác cần thiết khác. Tuy nhiên, trong giao tiếp ActiveX Automation, người lập trình cần phải cẩn trọng với phương thức khởi tạo này CHÚ Ý Nên ghi nhớ rằng cần phải bật màn hình bằng cách gọi phương thức Display cho ít nhất là một đối tượng Pviewport trước khi gán thuộc tính Mspace bằng TRUE. Nếu không bật được màn hình thì sẽ làm phát sinh lỗi do thuộc tính MSpace. 3.1. Chuyển sang Layout của không gian in Từ không gian mô hình, có thể chuyển sang Layout của không gian in được kích hoạt gần nhất theo các bước sau: 1 Gán thuộc tính ActiveSpace thành acPaperSpace: ThisDrawing.ActiveSpace=acPaperSpace 2 Chuyển thuộc tính MSpace thành FALSE: ThisDrawing.MSpace=FALSE Phát triển AutoCAD bằng ActiveX và VBA | 239 Khi đang ở trong không gian in, AutoCAD sẽ hiển thị biểu tượng của UCS của không gian in ở góc dưới bên trái của màn hình đồ họa. Con trỏ vẽ của AutoCAD thể hiện rằng vùng Layout của không gian in (chứ không phải vùng hiển thị trong khung nhìn) có thể được hiệu chỉnh. 3.2. Chuyển sang Layout của không gian mô hình Từ không gian in, có thể chuyển sang không gian mô hình trong khung nhìn xếp cạnh nhau hoặc khung nhìn nổi theo các bước sau: 1 Dùng phương thức Display để khởi tạo các thông số đồ hoạ ThisDrawing.ActivePViewport.Display TRUE 2 Chuyển thuộc tính MSpace thành TRUE: ThisDrawing.MSpace=TRUE Các bước thực hiện trên sẽ chuyển sang không gian mô hình và các khung nhìn nổi. CHÚ Ý Phải tạo khung nhìn nổi trước khi chuyển sang không gian mô hình. Để chuyển sang khung nhìn xếp cạnh nhau thì thực hiện thêm bước sau: Gán thuộc tính ActiveSpace thành acModelSpace: ThisDrawing.ActiveSpace=acModelSpace 3.3. Tạo khung nhìn trong không gian in Các khung nhìn của không gian in được tạo bởi phương thức AddPViewport. Phương thức này cần có điểm giữa, bề rộng và chiều cao của khung nhìn mới. Trước khi tạo khung nhìn, sử dụng thuộc tính ActiveSpace không gian in thành không gian vẽ hiện tại (thông thường được sử dụng bằng cách gán TILEMODE=0). Sau khi tạo đối tượng PViewport, có thể gán các thuộc tính của chúng như: Direction, LensLength, GridOn, có thể điều khiển các thuộc tính của bản thân khung nhìn như Layer, LineType, LinetypeScale. Chuyển từ không gian mô hình sang không gian in Ví dụ dưới đây sẽ chuyển AutoCAD sang không gian in, tạo khung nhìn nổi, gán và kích hoạt khung nhìn. Sub Ch9_SwitchToPaperSpace() ’ Gán không gian vẽ hiện tại thành không gian in ThisDrawing.ActiveSpace = acPaperSpace ’ Tạo khung nhìn trong không gian in Dim newVport As AcadPViewport Dim center(0 To 2) As Double center(0) = 3.25 center(1) = 3 center(2) = 0 Set newVport = ThisDrawing.PaperSpace.AddPViewport _ (center, 6, 5) ’ Thay đổi hướng nhìn cho mỗi khung nhìn Dim viewDir(0 To 2) As Double viewDir(0) = 1 240 | Chương 9: Tạo bố cục và in ấn viewDir(1) = 1 viewDir(2) = 1 newVport.direction = viewDir ’ Kích hoạt khung nhìn newVport.Display True ’ Chuyển sang không gian mô hình ThisDrawing.MSpace = True ’ Gán newVport thành khung nhìn hiện tại ThisDrawing.ActivePViewport = newVport ’ Zoom Extents trong không gian mô hình ZoomExtents ’ Tăt chế độ sửa đổi không gian mô hình ThisDrawing.MSpace = False ’ ZoomExtents trong không gian in ZoomExtents End Sub Thứ tự các bước thực hiện trên rất quan trọng. Nói chung, mọi thứ phải được thực hiện theo trình tự như các dòng lệnh trong AutoCAD, nếu không thực hiện được như vậy thì điều không mong muốn sẽ ảnh hưởng đến việc định nghĩa và kích hoạt các khung nhìn. CHÚ Ý Để gán hay sửa các thông số của cảnh nhìn (hướng nhìn, ) thì phương thức Display của đối tượng Viewport cần được gán thành False, và trước khi gán khung nhìn hiện tại thì phương thức Display phải được gán trở lại giá trị True. Ví dụ tạo 4 khung nhìn nổi Ví dụ này lấy theo ví dụ ở phần trên và tiếp tục ví dụ đó bằng cách tạo ra 4 khung nhìn nổi và gán các góc nhìn khác nhau. Sub Ch9_FourPViewports() Dim topVport, frontVport As AcadPViewport Dim rightVport, isoVport As AcadPViewport Dim pt(0 To 2) As Double Dim viewDir(0 To 2) As Double ThisDrawing.ActiveSpace = acPaperSpace ThisDrawing.MSpace = True ’ Lấy PViewport đang có và chuyển thành topVport pt(0) = 2.5: pt(1) = 5.5: pt(2) = 0 Set topVport = ThisDrawing.ActivePViewport ’Không cần thiết lập hướng nhìn cho khung nhìn phía trên topVport.center = pt topVport.width = 2.5 topVport.height = 2.5 topVport.Display True ThisDrawing.MSpace = True ThisDrawing.ActivePViewport = topVport ZoomExtents ZoomScaled 0.5, acZoomScaledRelativePSpace ’Tạo và thiết lập frontVport pt(0) = 2.5: pt(1) = 2.5: pt(2) = 0 Set frontVport = ThisDrawing.PaperSpace.AddPViewport _ (pt, 2.5, 2.5) viewDir(0) = 0: viewDir(1) = 1: viewDir(2) = 0 frontVport.direction = viewDir frontVport.Display acOn ThisDrawing.MSpace = True Phát triển AutoCAD bằng ActiveX và VBA | 241 ThisDrawing.ActivePViewport = frontVport ZoomExtents ZoomScaled 0.5, acZoomScaledRelativePSpace ’Tạo và thiết lập rightVport pt(0) = 5.5: pt(1) = 5.5: pt(2) = 0 Set rightVport = ThisDrawing.PaperSpace.AddPViewport _ (pt, 2.5, 2.5) viewDir(0) = 1: viewDir(1) = 0: viewDir(2) = 0 rightVport.direction = viewDir rightVport.Display acOn ThisDrawing.MSpace = True ThisDrawing.ActivePViewport = rightVport ZoomExtents ZoomScaled 0.5, acZoomScaledRelativePSpace ’Tạo và thiết lập isoVport pt(0) = 5.5: pt(1) = 2.5: pt(2) = 0 Set isoVport = ThisDrawing.PaperSpace.AddPViewport _ (pt, 2.5, 2.5) viewDir(0) = 1: viewDir(1) = 1: viewDir(2) = 1 isoVport.direction = viewDir isoVport.Display acOn ThisDrawing.MSpace = True ThisDrawing.ActivePViewport = isoVport ZoomExtents ZoomScaled 0.5, acZoomScaledRelativePSpace ’Kết thúc: thực hiện tái tạo lại toàn bộ các khung nhìn ThisDrawing.Regen True End Sub 3.4. Thay đổi cảnh nhìn và nội dung khung nhìn Thay đổi cảnh nhìn trong đối tượng Viewport chỉ thực hiện được khi ở trong không gian mô hình và đối tượng Viewport đó phải đang được kích hoạt. Lưới và biểu tượng UCS trong hai khung nhìn Lưới trong một khung nhìn và biểu tượng UCS trong khung nhìn khác Hiệu chỉnh bản vẽ trong khung nhìn nổi : 1 Trong không gian mô hình, kích hoạt khung nhìn cần hiệu chỉnh bằng cách gán thuộc tính ActiveViewport như sau: ThisDrawing.ActiveViewport=MyViewportObject 2 Hiệu chỉnh bản vẽ. Đồng thời có thể tạo đối tượng khác như chú thích, kích thước trong không gian in, khi đó cần gán thuộc tính ActiveSpace thành FALSE và chuyển sang không gian in 242 | Chương 9: Tạo bố cục và in ấn bằng cách sử dụng thuộc tính MSpace. Các đối tượng được tạo ra trong không gian in sẽ không được nhìn thấy trong không gian mô hình. 3.5. Đặt tỷ lệ cảnh nhìn theo không gian in Trước khi in cần lập tỷ lệ in chính xác cho mỗi phần của bản vẽ. Đặt tỷ lệ tương đối trong không gian in sẽ thiết lập nên tỷ lệ hợp lý cho từng nội dung được hiển thị. Hình vẽ minh họa dưới đây mô tả một bản vẽ với một số khung nhìn, mỗi khung nhìn có tỷ lệ khác nhau và cảnh nhìn khác. Để in bản vẽ này với một tỷ lệ chính xác thì mỗi cảnh nhìn cần được đặt tỷ lệ theo khổ giấy, chứ không phải là tỷ lệ so với cảnh nhìn trước hay so với toàn bộ mô hình. Khi làm việc trong không gian in, hệ số tỷ lệ thể hiện tỷ số giữa kích thước sẽ in và kích thước thực của mô hình thể hiện trong khung nhìn. Để nhận được tỷ lệ này, chia đơn vị của không gian in cho đơn vị của không gian mô hình. Ví dụ đối với bản vẽ tỷ lệ 1:4 thì hệ số phóng đại của một đơn vị trong không gian in tương ứng với 4 đơn vị của không gian mô hình. Sử dụng phương thức ZoomScaled để co giãn các khung nhìn tương ứng với đơn vị giấy in. Phương thức này cần 3 thông số đầu vào: khung nhìn cần đặt tỷ lệ, hệ số tỷ lệ, cách thức thay đổi tỷ lệ. Thông số thứ 3 là tuỳ chọn và xác định cách thức thay đổi tỷ lệ: Theo giới hạn vẽ Theo cảnh nhìn hiện tại Theo đơn vị giấy in Để chỉ ra tỷ lệ tương đối với đơn vị giấy in, nhập vào cho thông số thứ ba là hằng số acZoomScaleRelativePSpace. Như minh họa trong các hình vẽ dưới đây, nếu nhập tỷ lệ tương đối so với đơn vị của không gian in là 2 thì khung nhìn sẽ giãn ra gấp 2 lần kích thước theo đơn vị trong không gian in. Và hệ số tỷ lệ tương đối là 0.5 so với đơn vị của không gian in sẽ co khung nhìn lại bằng một nửa kích thước theo đơn vị của không gian in. Khi đó mô hình sẽ được in ra với kích thước bằng nửa kích thước thực tế. Phát triển AutoCAD bằng ActiveX và VBA | 243 3.6. Đặt tỷ lệ cho mẫu của kiểu đường trong không gian in Trong không gian in, ta có thể đặt tỷ lệ cho mẫu của kiểu đường theo hai cách. Cách thứ nhất là dựa vào đơn vị vẽ của không gian tạo ra đối tượng (không gian mô hình hoặc không gian in). Còn theo cách thứ hai, tỷ lệ của các kiểu đường đều được đặt thống nhất theo đơn vị của không gian in. Ta cũng có thể sử dụng biến hệ thống PSLTSCALE nhằm đảm bảo một tỷ lệ chung cho tất cả kiểu đường của các đối tượng khác nhau trong các khung nhìn có tỷ lệ phóng đại khác nhau. Điều này cũng có ảnh hưởng đến sự hiển thị của các đường thẳng trong không gian 3 chiều. Trong hình vẽ dưới đây, mẫu kiểu đường của các đường thẳng trong không gian mô hình đều được đặt cùng một tỷ lệ trong không gian in bằng cách sử dụng biến hệ thống PSLTSCALE. Điểm cần lưu ý là mặc dù các đối tượng trong hai khung nhìn có tỷ lệ phóng đại khác nhau nhưng kiểu đường đều có cùng một tỷ lệ. Phóng theo tỷ lệ 0.5xp Khung nhìn hiện tại Phóng theo tỷ lệ 2xp psltscale=1, đường nét đứt thay đổi tỷ lệ theo không gian in psltscale=0, đường nét đứt có tỷ lệ theo không gian nơi tạo ra đối tượng 244 | Chương 9: Tạo bố cục và in ấn Để gán giá trị cho biến hệ thống PSLTSCALE, ta sử dụng phương thức SetVariable 3.7. Ẩn các đường thẳng trong khung nhìn khi in Khi bản vẽ chứa các đối tượng mặt 3D, lưới, đối tượng dập nổi, bề mặt, khối đặc, ta cần phải ẩn các đường khuất khi in. Để ẩn đi các đường khuất trong khung nhìn của không gian in (đối tượng PViewport) ta sử dụng thuộc tính RemoveHiddenLines của khung nhìn đó. Thuộc tính này nhận giá trị logic. Khi không muốn in đường khuất, ta gán giá trị TRUE và ngược lại ta gán giá trị FALSE. Để ẩn đi các đường khuất trong khung nhìn của không gian mô hình (đối tượng Viewport) khi in ấn, ta sử dụng thuộc tính PlotHidden của đối tượng Layout. Và tương tự, thuộc tính này nhận giá trị logic. Khi không muốn in đường khuất, ta gán giá trị TRUE và ngược lại ta gán giá trị FALSE. 4. In bản vẽ Bản vẽ có thể được in giống như khi nhìn thấy trong không gian mô hình hoặc có thể tiến hành in sau khi đã tạo bố cục trang in trong không gian in. Thông thường, việc in ấn trong không gian mô hình thích hợp khi cần xem trước hoặc kiểm tra bản vẽ trước khi tạo bố cục trong không gian in. Sau khi đã hoàn thành bản vẽ trong không gian mô hình, ta sẽ bắt đầu tạo bố cục để in ấn trong không gian in. Việc in ấn liên quan đến hai đối tượng của ActiveX Automation là đối tượng Layout và đối tượng Plot. Đối tượng Layout chứa các thông số in cho một Layout đã có từ trước, còn đối tượng Plot chứa các phương thức và thuộc tính để khởi tạo và điều khiển quá trình in. 4.1. Thao tác in cơ bản Với đối tượng Plot, có thể sử dụng các phương thức và thuộc tính sau: PlotToFile in bản vẽ thành tệp PlotToDevice in bản vẽ trên máy in DisplayPlotPreview xem trước khi in một vùng được chỉ định SetLayoutsToPlot lập danh sách các Layout sẽ được in trong lần gọi tiếp theo của phương thức PlotToTệp hoặc PlotToDevice StartBatchMode khởi tạo in theo nhóm QuietErrorMode bật/tắt chế độ báo lỗi ngầm1 đối với các lỗi in NumberOfCopies định số bản in của mỗi lần in. 1 Báo lỗi ngầm (QuietErrorMode): là chế độ mà các lỗi xuất hiện trong quá trình in sẽ được ghi vào một tệp riêng do đó không ngắt quá trình in bằng các thông báo. Chế độ này rất thích hợp với những ứng dụng không được ngắt khi in, ví dụ khi tiến hành in theo nhóm. Phát triển AutoCAD bằng ActiveX và VBA | 245 BatchPlotProgress nhận trạng thái hiện tại của chế độ in theo nhóm hoặc ngắt chế độ in theo nhóm Phương thức SetLayoutsToPlot phải được gọi trước khi gọi phương thức PlotToFile hoặc PlotToDevice, nếu phương thức này không được gọi hoặc được gọi nhưng thông số đầu vào là giá trị NULL thì Layout hiện hành sẽ được in. Thuộc tính NumberOfCopies chỉ ra số lượng bản in. Nếu thuộc tính này không được khởi tạo trước mỗi lần gọi phương thức PlotToDevice thì giá trị được xác định gần nhất của thuộc tính này sẽ được sử dụng. Chế độ in thành nhóm được cung cấp để hỗ trợ việc áp dụng tiện ích BatchPlot. Trước khi khởi tạo chế độ này cần gán QuietErrorMode = TRUE để quá trình in không bị ngắt giữa chừng. Tiếp đó sử dụng phương thức StartBatchMode để khởi tạo chế độ in theo nhóm. Dùng thuộc tính BatchPlotProgress để kiểm tra quá trình in hoặc để ngắt chế độ này. 4.2. In trong không gian mô hình Khi thực hiện in một bản vẽ lớn theo các hệ đơn vị khác nhau trong không gian mô hình, nếu không xác định các thông số cụ thể cho việc in ấn thì bản vẽ sẽ được in ra theo các giá trị mặc định như: phần bản vẽ in ra là toàn bộ những gì được biểu diễn, máy in mặc định của hệ thống, tỷ lệ co giãn vừa với khổ giấy, góc quay bằng 0, điểm mốc của bản vẽ là (0,0). Các thông số in nêu trên có thể sửa lại bằng cách thay đổi thuộc tính của đối tượng Layout liên kết với không gian mô hình. In phần mở rộng của không gian mô hình hiện hành Ví dụ dưới đây, trước hết kiểm tra để đảm bảo không gian mô hình là không gian đang làm việc, sau đó nó sẽ tạo một số thông số in, cuối cùng bản in sẽ được gửi đến máy in nhờ phương thức PlotToDevice Sub Ch9_PrintModelSpace() ’ Kiểm tra không gian làm việc là không gian mô hình If ThisDrawing.ActiveSpace = acPaperSpace Then ThisDrawing.MSpace = True ThisDrawing.ActiveSpace = acModelSpace End If ’ Xác định phạm vi và tỷ số co giãn cho vùng in ThisDrawing.ModelSpace.Layout.PlotType = acExtents ThisDrawing.ModelSpace.Layout. _ StandardScale = acScaleToFit ’ Gán số lượng bản in là 1 ThisDrawing.Plot.NumberOfCopies = 1 ’ Bắt đầu in ThisDrawing.Plot.PlotToDevice End Sub Tên thiết bị có thể được chỉ ra bằng cách sử dụng thuộc tính ConfigName, hoặc bằng cách dùng phương thức PlotToDevice có tham số chỉ đến tệp PC3 (tệp cấu hình thiết bị in). 246 | Chương 9: Tạo bố cục và in ấn 4.3. In trong không gian in Có thể in một hay nhiều Layout trong không gian in cùng một lúc, có thể in Layout hiện hành như đã trình bày trong phần “In trong không gian mô hình” trang 245, hoặc in Layout được chỉ định theo tên của nó. In 2 bản vẽ trong không gian in Ví dụ dưới đây sẽ chuyển hai Layout trong không gian in “Layout1” và “Layout2” tới máy in. Cần chú ý là hai Layout này phải tồn tại trong bản vẽ khi dùng đoạn mã này. Ví dụ này đầu tiên sẽ tạo ra một mảng kiểu chuỗi (string) chứa tên của các Layout cần in, sau đó sử dụng mảng này để làm đầu vào đối với phương thức SetLayoutsToPlot, tiếp theo sẽ gán số lượng bản in và cuối cùng gửi các bản in đến máy in mặc định. Sub Ch9_PrintPaperSpace() ’ Tạo các Layout để in trong không gian in Dim strLayouts(0 To 1) As String Dim varLayouts As Variant strLayouts(0) = "Layout1" strLayouts(1) = "Layout2" varLayouts = strLayouts ThisDrawing.Plot.SetLayoutsToPlot varLayouts ’ Gán số lượng bản in là 1 ThisDrawing.Plot.NumberOfCopies = 1 ’ Bắt đầu in ThisDrawing.Plot.PlotToDevice End Sub
File đính kèm:
- giao_trinh_phat_trien_autocad_bang_activex_vba_chuong_9_tao.pdf