Difference between revisions of "Drawing Module/cn"

From FreeCAD Documentation
Jump to navigation Jump to search
(Created page with 'The Drawing module allows you to put your 3D work on paper. That is, to put views of your models in a 2D window and to insert that window in a drawing, for example a sheet with a…')
 
Line 1: Line 1:
The Drawing module allows you to put your 3D work on paper. That is, to put views of your models in a 2D window and to insert that window in a drawing, for example a sheet with a border, a title and your logo and finally print that sheet. The Drawing module is currently under construction and more or less a technology preview!
+
绘图模块允许将你的 3D 工作放到图纸上。也就是,将你的模型视图放入一个 2D 窗口,并将绘图嵌入窗口中。比如,一张有边界、标题和图标的图纸,最终可将图纸打印出来。绘图模块目前正在设计当中,现在或多或少只是个技术概览。
  
=== GUI Tools ===
+
=== GUI 工具 ===
  
{{Drawing Tools}}
+
{{Drawing Tools/cn}}
  
  
 
[[Image:Drawing_extraction.png|800px]]
 
[[Image:Drawing_extraction.png|800px]]
  
In the picture you see the main concepts of the Drawing module. The document contains a shape object (Schenkel) which we want to extract to a drawing. Therefore a "Page" is created. A page gets instantiated through a template, in this case the "A3_Landscape" template. The template is an SVG document which can hold your usual page frame, your logo or comply to your presentation standards.
+
图片中呈现出了绘图模块的主要概念。该文档中包含了一个形状对象(Schenkel),将其解压可以得到一幅制图。因此,我们创建了一个“页面”。通过模板来示例这个页面,在这个例子中,模板为“横版A3”版面。这个模板是一个包含了一般页面框架、图标或者遵循了显示标准的 SVG(可伸缩向量图形)文件。
 
+
In this page we can insert one or more views. Each view has a position on the page (Properties X,Y), a scale factor (Property scale) and additional properties. Every time the page or the view or the referenced object changes the page gets regenerated and the page display updated.
+
在这个页面中我们可以插入一个或多个视图。每个视图在页面中都具有一个位置(X、Y 属性)、一个比例因素(比例属性)和其他的属性。每次页面、视图、或者引用的对象发生改变,页面将会重新生成,其显示将会更新。
  
=== Scripting ===
+
=== 脚本 ===
  
At the moment the end user(GUI) workflow is very limited, so the scripting  API is more interesting. Here follows examples on how to use the scripting API of the drawing module.
+
由于终端用户(GUI)可实现的操作有限,所以脚本 API 将更加有趣。下面我们将通过例子来了解如何使用绘图模块的脚本 API 功能。
  
==== Simple example ====
+
==== 简单示例 ====
  
First of all you need the Part and the Drawing module:
+
首先,你需要零件和绘图模块:
 
  import FreeCAD, Part, Drawing
 
  import FreeCAD, Part, Drawing
 
   
 
   
Create a small sample part
+
创建一个小的样本零件
 
  Part.show(Part.makeBox(100,100,100).cut(Part.makeCylinder(80,100)).cut(Part.makeBox(90,40,100)).cut(Part.makeBox(20,85,100)))
 
  Part.show(Part.makeBox(100,100,100).cut(Part.makeCylinder(80,100)).cut(Part.makeBox(90,40,100)).cut(Part.makeBox(20,85,100)))
+
 
Direct projection. The G0 means hard edge, the G1 is tangent continuous.
+
方向投影。G0 表示轮廓鲜明的边,G1 表示切线连续。
 
  Shape = App.ActiveDocument.Shape.Shape
 
  Shape = App.ActiveDocument.Shape.Shape
 
  [visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape)
 
  [visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape)
 
  print "visible edges:", len(visibleG0.Edges)
 
  print "visible edges:", len(visibleG0.Edges)
 
  print "hidden edges:", len(hiddenG0.Edges)
 
  print "hidden edges:", len(hiddenG0.Edges)
Everything was projected on the Z-plane:
+
所有的都被投影到 Z 平面上:
 
  print "Bnd Box shape: X=",Shape.BoundBox.XLength," Y=",Shape.BoundBox.YLength," Z=",Shape.BoundBox.ZLength
 
  print "Bnd Box shape: X=",Shape.BoundBox.XLength," Y=",Shape.BoundBox.YLength," Z=",Shape.BoundBox.ZLength
 
  print "Bnd Box project: X=",visibleG0.BoundBox.XLength," Y=",visibleG0.BoundBox.YLength," Z=",visibleG0.BoundBox.ZLength
 
  print "Bnd Box project: X=",visibleG0.BoundBox.XLength," Y=",visibleG0.BoundBox.YLength," Z=",visibleG0.BoundBox.ZLength
 
   
 
   
Different projection vector
+
不同的投影向量
 
  [visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape,App.Vector(1,1,1))
 
  [visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape,App.Vector(1,1,1))
 
   
 
   
Project to SVG
+
投影成可伸缩向量的图形
 
  resultSVG = Drawing.projectToSVG(Shape,App.Vector(1,1,1))
 
  resultSVG = Drawing.projectToSVG(Shape,App.Vector(1,1,1))
 
  print resultSVG
 
  print resultSVG
  
==== The parametric way ====
+
==== 参数化方法 ====
  
Create the body
+
创建主体
 
  # Create three boxes and a cylinder
 
  # Create three boxes and a cylinder
 
  App.ActiveDocument.addObject("Part::Box","Box")
 
  App.ActiveDocument.addObject("Part::Box","Box")
Line 83: Line 83:
 
  Gui.activeDocument().Fusion1.Visibility=False
 
  Gui.activeDocument().Fusion1.Visibility=False
  
Insert a Page object and assign a template
+
插入一个页面对象并指定一个模板
 
  App.activeDocument().addObject('Drawing::FeaturePage','Page')
 
  App.activeDocument().addObject('Drawing::FeaturePage','Page')
 
  App.activeDocument().Page.Template = App.getResourceDir()+'Mod/Drawing/Templates/A3_Landscape.svg'
 
  App.activeDocument().Page.Template = App.getResourceDir()+'Mod/Drawing/Templates/A3_Landscape.svg'
  
Create a view on the "Shape" object, define the position and scale and assign it to a Page
+
创建“Shape”对象的一个视图,定义其位置、比例并将其指定到一个页面
 
  App.activeDocument().addObject('Drawing::FeatureViewPart','View')
 
  App.activeDocument().addObject('Drawing::FeatureViewPart','View')
 
  App.activeDocument().View.Source = App.activeDocument().Shape
 
  App.activeDocument().View.Source = App.activeDocument().Shape
Line 95: Line 95:
 
  App.activeDocument().Page.addObject(App.activeDocument().View)
 
  App.activeDocument().Page.addObject(App.activeDocument().View)
  
Create a second view on the same object but this time the view will be rotated by 90 degrees.
+
创建同一对象的第二个视图,但是要将该视图旋转90度。
 
  App.activeDocument().addObject('Drawing::FeatureViewPart','ViewRot')
 
  App.activeDocument().addObject('Drawing::FeatureViewPart','ViewRot')
 
  App.activeDocument().ViewRot.Source = App.activeDocument().Shape
 
  App.activeDocument().ViewRot.Source = App.activeDocument().Shape
Line 105: Line 105:
 
  App.activeDocument().Page.addObject(App.activeDocument().ViewRot)  
 
  App.activeDocument().Page.addObject(App.activeDocument().ViewRot)  
  
Create a third view on the same object but with an isometric view direction. The hidden lines are activated too.
+
创建同一对象的第三个视图,但是要在等距方向创建。并将隐藏线激活显示。
 
  App.activeDocument().addObject('Drawing::FeatureViewPart','ViewIso')
 
  App.activeDocument().addObject('Drawing::FeatureViewPart','ViewIso')
 
  App.activeDocument().ViewIso.Source = App.activeDocument().Shape
 
  App.activeDocument().ViewIso.Source = App.activeDocument().Shape
Line 114: Line 114:
 
  App.activeDocument().Page.addObject(App.activeDocument().ViewIso)  
 
  App.activeDocument().Page.addObject(App.activeDocument().ViewIso)  
 
   
 
   
Change something and update. The update process changes the view and the page.
+
改动一些地方并更新。更新过程改变了视图和页面。
 
  App.activeDocument().View.X = 30.0
 
  App.activeDocument().View.X = 30.0
 
  App.activeDocument().View.Y = 30.0
 
  App.activeDocument().View.Y = 30.0
Line 122: Line 122:
 
==== Accessing the bits and pieces ====
 
==== Accessing the bits and pieces ====
  
Get the SVG fragment of a single view
+
得到单个视图的 SVG 部分
 
  ViewSVG = App.activeDocument().View.ViewResult
 
  ViewSVG = App.activeDocument().View.ViewResult
 
  print ViewSVG
 
  print ViewSVG
 
   
 
   
Get the whole result page (it's a file in the document's temporary directory, only read permission)
+
得到整个最终页面(这是文档中临时文件夹中的一个只读文件)
 
  print "Resulting SVG document: ",App.activeDocument().Page.PageResult
 
  print "Resulting SVG document: ",App.activeDocument().Page.PageResult
 
  file = open(App.activeDocument().Page.PageResult,"r")
 
  file = open(App.activeDocument().Page.PageResult,"r")
 
  print "Result page is ",len(file.readlines())," lines long"
 
  print "Result page is ",len(file.readlines())," lines long"
  
Important: free the file!
+
注意:释放文件!
 
  del file
 
  del file
 
   
 
   
Insert a view with your own content:
+
向视图中插入你自己的内容:
 
  App.activeDocument().addObject('Drawing::FeatureView','ViewSelf')
 
  App.activeDocument().addObject('Drawing::FeatureView','ViewSelf')
 
  App.activeDocument().ViewSelf.ViewResult = """<g id="ViewSelf"
 
  App.activeDocument().ViewSelf.ViewResult = """<g id="ViewSelf"
Line 153: Line 153:
 
  del Shape,ViewSVG, resultSVG
 
  del Shape,ViewSVG, resultSVG
 
   
 
   
That leads to the following result:
+
会出现以下结果:
  
 
[[Image:DrawingScriptResult.jpg|800px]]
 
[[Image:DrawingScriptResult.jpg|800px]]
  
=== Templates ===
+
=== 模板 ===
  
FreeCAD comes bundled with a set of default templates, but you can find more on the [[Drawing templates]] page.
+
FreeCAD自带一些预设的模板,想得到更多模板可以前往 [[Drawing templates]] 页面。
  
{{docnav|Part Module|Robot Module}}
+
{{docnav/cn|Part Module/cn|Robot Module/cn}}
  
 
{{languages | {{de|Drawing Module/de}} {{es|Drawing Module/es}} {{fr|Drawing Module/fr}} {{pl|Drawing Module/pl}} {{ru|Drawing Module/ru}} {{se|Drawing Module/se}} }}
 
{{languages | {{de|Drawing Module/de}} {{es|Drawing Module/es}} {{fr|Drawing Module/fr}} {{pl|Drawing Module/pl}} {{ru|Drawing Module/ru}} {{se|Drawing Module/se}} }}
  
 
[[Category:User Documentation]]
 
[[Category:User Documentation]]

Revision as of 02:21, 9 December 2011

绘图模块允许将你的 3D 工作放到图纸上。也就是,将你的模型视图放入一个 2D 窗口,并将绘图嵌入窗口中。比如,一张有边界、标题和图标的图纸,最终可将图纸打印出来。绘图模块目前正在设计当中,现在或多或少只是个技术概览。

GUI 工具

下面是一组用于创建、配置与工程图纸导出的工具。


Drawing extraction.png

图片中呈现出了绘图模块的主要概念。该文档中包含了一个形状对象(Schenkel),将其解压可以得到一幅制图。因此,我们创建了一个“页面”。通过模板来示例这个页面,在这个例子中,模板为“横版A3”版面。这个模板是一个包含了一般页面框架、图标或者遵循了显示标准的 SVG(可伸缩向量图形)文件。

在这个页面中我们可以插入一个或多个视图。每个视图在页面中都具有一个位置(X、Y 属性)、一个比例因素(比例属性)和其他的属性。每次页面、视图、或者引用的对象发生改变,页面将会重新生成,其显示将会更新。

脚本

由于终端用户(GUI)可实现的操作有限,所以脚本 API 将更加有趣。下面我们将通过例子来了解如何使用绘图模块的脚本 API 功能。

简单示例

首先,你需要零件和绘图模块:

import FreeCAD, Part, Drawing

创建一个小的样本零件

Part.show(Part.makeBox(100,100,100).cut(Part.makeCylinder(80,100)).cut(Part.makeBox(90,40,100)).cut(Part.makeBox(20,85,100)))

方向投影。G0 表示轮廓鲜明的边,G1 表示切线连续。

Shape = App.ActiveDocument.Shape.Shape
[visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape)
print "visible edges:", len(visibleG0.Edges)
print "hidden edges:", len(hiddenG0.Edges)

所有的都被投影到 Z 平面上:

print "Bnd Box shape: X=",Shape.BoundBox.XLength," Y=",Shape.BoundBox.YLength," Z=",Shape.BoundBox.ZLength
print "Bnd Box project: X=",visibleG0.BoundBox.XLength," Y=",visibleG0.BoundBox.YLength," Z=",visibleG0.BoundBox.ZLength

不同的投影向量

[visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape,App.Vector(1,1,1))

投影成可伸缩向量的图形

resultSVG = Drawing.projectToSVG(Shape,App.Vector(1,1,1))
print resultSVG

参数化方法

创建主体

# Create three boxes and a cylinder
App.ActiveDocument.addObject("Part::Box","Box")
App.ActiveDocument.Box.Length=100.00
App.ActiveDocument.Box.Width=100.00
App.ActiveDocument.Box.Height=100.00

App.ActiveDocument.addObject("Part::Box","Box1")
App.ActiveDocument.Box1.Length=90.00
App.ActiveDocument.Box1.Width=40.00
App.ActiveDocument.Box1.Height=100.00

App.ActiveDocument.addObject("Part::Box","Box2")
App.ActiveDocument.Box2.Length=20.00
App.ActiveDocument.Box2.Width=85.00
App.ActiveDocument.Box2.Height=100.00

App.ActiveDocument.addObject("Part::Cylinder","Cylinder")
App.ActiveDocument.Cylinder.Radius=80.00
App.ActiveDocument.Cylinder.Height=100.00
App.ActiveDocument.Cylinder.Angle=360.00
# Fuse two boxes and the cylinder
App.activeDocument().addObject("Part::Fuse","Fusion")
App.activeDocument().Fusion.Base = App.activeDocument().Cylinder
App.activeDocument().Fusion.Tool = App.activeDocument().Box1

App.activeDocument().addObject("Part::Fuse","Fusion1")
App.activeDocument().Fusion1.Base = App.activeDocument().Box2
App.activeDocument().Fusion1.Tool = App.activeDocument().Fusion
# Cut the fused shapes from the first box
App.activeDocument().addObject("Part::Cut","Shape")
App.activeDocument().Shape.Base = App.activeDocument().Box
App.activeDocument().Shape.Tool = App.activeDocument().Fusion1
# Hide all the intermediate shapes 
Gui.activeDocument().Box.Visibility=False
Gui.activeDocument().Box1.Visibility=False
Gui.activeDocument().Box2.Visibility=False
Gui.activeDocument().Cylinder.Visibility=False
Gui.activeDocument().Fusion.Visibility=False
Gui.activeDocument().Fusion1.Visibility=False

插入一个页面对象并指定一个模板

App.activeDocument().addObject('Drawing::FeaturePage','Page')
App.activeDocument().Page.Template = App.getResourceDir()+'Mod/Drawing/Templates/A3_Landscape.svg'

创建“Shape”对象的一个视图,定义其位置、比例并将其指定到一个页面

App.activeDocument().addObject('Drawing::FeatureViewPart','View')
App.activeDocument().View.Source = App.activeDocument().Shape
App.activeDocument().View.Direction = (0.0,0.0,1.0)
App.activeDocument().View.X = 10.0
App.activeDocument().View.Y = 10.0
App.activeDocument().Page.addObject(App.activeDocument().View)

创建同一对象的第二个视图,但是要将该视图旋转90度。

App.activeDocument().addObject('Drawing::FeatureViewPart','ViewRot')
App.activeDocument().ViewRot.Source = App.activeDocument().Shape
App.activeDocument().ViewRot.Direction = (0.0,0.0,1.0)
App.activeDocument().ViewRot.X = 290.0
App.activeDocument().ViewRot.Y = 30.0
App.activeDocument().ViewRot.Scale = 1.0
App.activeDocument().ViewRot.Rotation = 90.0
App.activeDocument().Page.addObject(App.activeDocument().ViewRot) 

创建同一对象的第三个视图,但是要在等距方向创建。并将隐藏线激活显示。

App.activeDocument().addObject('Drawing::FeatureViewPart','ViewIso')
App.activeDocument().ViewIso.Source = App.activeDocument().Shape
App.activeDocument().ViewIso.Direction = (1.0,1.0,1.0)
App.activeDocument().ViewIso.X = 335.0
App.activeDocument().ViewIso.Y = 140.0
App.activeDocument().ViewIso.ShowHiddenLines = True
App.activeDocument().Page.addObject(App.activeDocument().ViewIso) 

改动一些地方并更新。更新过程改变了视图和页面。

App.activeDocument().View.X = 30.0
App.activeDocument().View.Y = 30.0
App.activeDocument().View.Scale = 1.5
App.activeDocument().recompute()

Accessing the bits and pieces

得到单个视图的 SVG 部分

ViewSVG = App.activeDocument().View.ViewResult
print ViewSVG

得到整个最终页面(这是文档中临时文件夹中的一个只读文件)

print "Resulting SVG document: ",App.activeDocument().Page.PageResult
file = open(App.activeDocument().Page.PageResult,"r")
print "Result page is ",len(file.readlines())," lines long"

注意:释放文件!

del file

向视图中插入你自己的内容:

App.activeDocument().addObject('Drawing::FeatureView','ViewSelf')
App.activeDocument().ViewSelf.ViewResult = """<g id="ViewSelf"
  stroke="rgb(0, 0, 0)"
  stroke-width="0.35"
  stroke-linecap="butt"
  stroke-linejoin="miter"
  transform="translate(30,30)"
  fill="#00cc00"
  >

  <ellipse cx="40" cy="40" rx="30" ry="15"/>
  </g>
"""
App.activeDocument().Page.addObject(App.activeDocument().ViewSelf)
App.activeDocument().recompute()

del Shape,ViewSVG, resultSVG

会出现以下结果:

DrawingScriptResult.jpg

模板

FreeCAD自带一些预设的模板,想得到更多模板可以前往 Drawing templates 页面。

Available translations of this page: Flag-de.jpg Flag-es.jpg Flag-fr.jpg Flag-pl.jpg Flag-ru.jpg Template:Se