SketchUp-Drawingelement类及子类

微信公众号:老顽童与小东邪
关注可了解更多的教程及编程技巧。问题或建议,请加好友留言;
如果你觉得对你有帮助,欢迎赞赏

Drawingelement类

上一章节我们学习了entity类,entity类的主要子类是Drawingelement类。
Drawingelement类是我们今后重点学习的类,包括Image、Text、Edge、Face、Group、Component Definition和Component Instance。
下面对Drawingelement类做简要说明。
Drawingelement类包含的一些方法用于如何把元素图形在Sketchup中显示出来,并设置一些元素的属性信息,例如阴影、组成材质等。
该Drawingelement类提供了一个非常有用的方法,该方法返回一个BoundingBox的对象。这代表了最小矩形体积,它可以包含在Drawingelement同时保持其侧面与x,y和z轴对齐,下面我们来获取一条边线的boundingbox。
1、在模型中创建一条边线

   model= Sketchup.active_model
   entities = model.active_entities
   line = entities.add_line [0,0,0],[10,10,0] #<Sketchup::Edge:0x000002342bf96e90>

2、获取这条边线的boundingbox对象

	boundingbox = line.bounds #<Geom::BoundingBox:0x000002342be69748>

在boundingbox对象中,提供了关于该元素的尺寸,对角线,角落和最大/最小点的一系列方法。例如:
1、获取中心点位置

	center = boundingbox.center #(127 mm, 127 mm, 0 mm)

2、获取对角线长度

	diagonal = boundingbox.diagonal # ~ 359 mm

子类之Edge类

Edge是构图元素中最基本的对象,也是最容易理解的。在小学我们就接触了边的概念,例如四边形,等边三角形。
一条边表示两个点之间的线段,即我们在数学中学到的两点成线就是边。
那么,我们在编程过程中应该怎么样来表示呢?这里提供了两种创建边的方法。
第一种是add_line,返回Edge对象。

	model = Sketchup.active_model
	entities = model.active_entities
   	edge = entities.add_line [0,0,0],[10,10,0] #<Sketchup::Edge:0x000002342bf96e90>

第二种是add_edges,返回存放Edge对象的数组。

	edges = entities.add_edges [0,0,0],[10,10,0] # [#<Sketchup::Edge:0x000002342bf96e90>]

在Edge类中也包含一系列的方法,如:

vertices- 返回边的两个节点对象(Vertex)

start/end - 返回边的起点或止点对象

other_vertex - 用边的一个节点得到边的另一个端点

used_by? - 表示一个节点是否在边上

	edge.vertices # [#<Sketchup::Vertex:0x00018c833e19d8>, #<Sketchup::Vertex:0x00018c833e19b0>]
	edge.start # #<Sketchup::Vertex:0x00018c833e19d8>

子类之Face类

Face类也是构图元素中最重要,最基本的。图元素无非就是点、线、面;这里的面就是现在要讲的Face对象。
我们知道面是由一组封闭的边线构成的,边线由一组点构成的,所以在程序中面既可以由一组有序的点构成。那么我们来看一下它在程序中是怎么实现的。
实现方法add_face,但是参数可以是edge对象,也可以是Point3d对象。

	points = [
	   Geom::Point3d.new(0,0,0),
	   Geom::Point3d.new(10,0,0),
	   Geom::Point3d.new(10,10,0),
	   Geom::Point3d.new(0,10,0),
	   Geom::Point3d.new(0,0,0),
	] 
	edges = entities.add_edges points
	# 第一种参数跟一组edge对象
	face = entities.add_face edges
	# 第二种参数跟一组points对象,注意:此points数组中最后一个点可以去掉
	face = entities.add_face points

在Face类中也提供了很多的方法,如:

edges- 返回面上所有边对象

normal - 返回面的法向量

vertices - 返回面上所有顶点

used_by? - 表示一个节点或边是否在面上

还有pushpull、followme、loops等重要方法后面会讲到。

绘制球体实战分析

思路
1、绘制一个圆形面
2、绘制一条圆形路径
3、让圆形面跟随这条路径

	model = Sketchup.active_model
  	entities = model.active_entities
	circle = entities.add_circle(ORIGIN, X_AXIS, 1.m, 48) #通过add_circle添加一组圆形边,查看API了解参数
	face = entities.add_face(circle) # 创建圆形面
	path = entities.add_circle(ORIGIN, Z_AXIS, 2.m, 48) # 创建路径
	face.followme(path) # 路径跟随创建球体
	entities.erase_entities(path) # 删除这条路径

效果如下:
绘制球体

下面我们在来了解下pushpull方法
在上面的球体中实际上是有N个face构成的,现在我们选中这个球体执行以下的代码:

	model = Sketchup.active_model
	selection = model.selection.to_a
	faces = selection.grep(Sketchup::Face)
	faces.each{|face|
	  face.pushpull(rand(20))
	}

使用pushpull方法对每个面推拉随机高度后效果如下:
推拉后的地球

引用
参考|一米网校
微信公众号:老顽童与小东邪
欢迎关注我,一起学习,一起进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值