Grasshopper 的Python电池—获取犀牛空间的文字及轮廓线

用过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)

需要注意的是,最后一句代码比较占资源,慎用!!!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容