用过Grasshopper 的童鞋都知道,在GH里识别犀牛空间里面的文字有点困难,除了用一些插件外,GH原生电池是没办法直接获取的,这里,小编教大家怎样用python代码去获取并加强文字功能。
编写代码之前先说一下犀牛空间里面的文字类型,在犀牛空间中,文字分为两种:
一种是文字块,即*Text 类型,输入 命令 *Text 调出
另一种是 注解点文本,即 *Dot 类型,输入命令 *Dot 调出
两者也有区别,Text类型可以设置 文字大小、字体、颜色、对齐 等常用的属性;而注解点仅能设置 字体和大小,而且文字周边是个大黑框(好处是无论视口怎么放大、缩小它都能看见,且正对着屏幕)。
现在我们用python代码去写一个电池,功能是自动获取犀牛空间内的文字块和注解点文字的位置点和文本,且如果是文字块的话获取文字块的字体轮廓线(广告激光雕刻会用得到)。先看看完成图:
image
__author__ = "抖小腿儿,QQ:241525449"
__version__ = "2021.05.15"
import scriptcontext as sc
import Rhino
import rhinoscriptsyntax as rs
from Rhino.DocObjects import *
import Grasshopper.Kernel
sc.doc = Rhino.RhinoDoc.ActiveDoc
TextDot = rs.ObjectsByType(8192, False)
注解点位置 = []
注解点文本 = []
for guid in TextDot:
text = Rhino.RhinoDoc.ActiveDoc.Objects.FindId(guid)
if rs.IsTextDot(text):
注解点位置.append(text.Geometry.Point)
注解点文本.append(text.Geometry.Text)
TextEntitys=rs.ObjectsByType(512, False)
文本块位置 = []
文本块文本 = []
文本轮廓线 = []
for guid in TextEntitys:
text = Rhino.RhinoDoc.ActiveDoc.Objects.FindId(guid)
文本块位置.append(text.Geometry.Plane.Origin)
文本块文本.append(text.Geometry.PlainText)
for curve in text.Geometry.Explode():
文本轮廓线.append(curve)
sc.doc = ghdoc
#下面代码会消耗比较多的系统资源,不常使用把括号内的 True 换成 False。
ghenv.Component.ExpireSolution(True)
需要注意的是,最后一句代码比较占资源,慎用!!!