文字的显示怎么实现?

#我想只显示文字还有a的输出端口,而不想在rhino里bake出来(这个一执行rhino就自动bake了文字)。望解惑,谢谢。。。
import rhinoscriptsyntax as rs
import Rhino as rh
import scriptcontext as sc

sc.doc = rh.RhinoDoc.ActiveDoc

a = rs.AddText(t,p,s,f,fs,j)

sc.doc = ghdoc


addtext.gh (11.5 KB)

1 个赞

需要使用如下override
public override void DrawViewportWires(IGH_PreviewArgs args)
并调用args.Display.Draw2dText函数
Rhinocommon-Draw2dText

大致的架构如下:
文字的参数都定义为全局变量
在主程序中从电池输入端读取这些参数
在重载的DrawViewportWires中使用Draw2dText函数,并调用这些全局变量

Python部分我没有用过,C#的部分可以给你个文件仅供参考。
Draw2DText.zip (3.7 KB)

2 个赞

C#不懂啊,这代码看的有点晕 :sweat_smile:能给个C#的gh文件吗,有输入和输出端口的。。谢谢。。


我不确定你是要3D还是2D的文字
这两者都可以在rhinocommon查阅到

1 个赞

屏幕截图 2021-07-13 204358
其实我就是想要gh自带的这个的加强版,不过我还想要输出端口。可以连个布尔开关自己bake

还有我想问下你这个有文字对齐方式的选项吗?

Draw3Dtext有多个函数,每个函数有不同的参数数量和种类。你可以根据需要选择。

1 个赞

注意你这里有三套逻辑
1:承载数据,Text3D
2:bake到犀牛,Rhino.RhinoDoc.ActiveDoc.Objects.AddText
3:显示,只能用重载DrawViewport系列的函数
注意其中1是可以涵盖位置平面的,因此2和3的函数都会有两种大类,一类允许直接获取text3d,另一类问你要string和位置平面。

1 个赞

:+1:gh文件能分享吗 :grinning:.

同学这一共只有五行代码呢
既然想要写代码,就得花额外的功夫,如果5行代码都懒得抄。那你的前路漫漫。。。。

1 个赞

其实怎么加bake开关我实在搞不懂 :sweat_smile:我初学ghpython(只会套用一些简单的格式),想实现一些Rhino里的一些简单的功能。C#就更不懂了。谢谢老师耐心解答 :heart:

GhPython下也可以直接写的,和C#差不多。
1:先把GH的Mode改成第二个GH_Component SDK,然后就可以像C#一样写代码了。如下图

显示文字.gh (6.3 KB)

2 个赞

python问题可以多请教月神
不过还是要自己多写,能手打的就手打,抓住每个机会操练。
尽量不要去求文件 :sunglasses:

1 个赞

感谢老师 :grinning_face_with_smiling_eyes:这个的基础上加一个手动bake的布尔开关该如何实现?

很简单,如果是伪代码
如果 b=true
那么 doc.objects.addtext()

b链接button电池即可。

我小白,具体怎么加上去?

这个文字对齐方式应该怎么填才对?

Snipaste_2021-07-15_14-09-37
将if条件加在你这句代码上面即可。这属于最基本的程序基础知识。
如果你想要接触代码解决问题,又没有任何基础,你应该做的不是在论坛里一句句代码问出来,或者直接求文件。
应该补习一些编程方面的基础知识,至少得知道程序里面的:顺序,选择和循环这三种流程。以及每种语言的语法(C#或python)如何表达这三种流程。

请注意,不要将论坛当作另一个伸手的qq群。也不要将“我小白”当作伸手的任何借口。

1 个赞

https://developer.rhino3d.com/api/RhinoCommon/html/T_Rhino_DocObjects_TextVerticalAlignment.htm

https://developer.rhino3d.com/api/RhinoCommon/html/T_Rhino_DocObjects_TextHorizontalAlignment.htm

举例:
Rhino.DocObjects.TextHorizontalAlignment.Left表示左对齐
Rhino.DocObjects.TextVerticalAlignment.Top表示顶对齐

你也可以直接用数字代替。具体可以看链接。
但目前看你的程序,他读取到的是float,所以出错了。

老师说的对,我现在的阶段就是套用最简单的格式解决一些小问题。还没有系统的学。就是抄近路先解决一些实际遇到的问题。我知道这样不好,但现阶段就是这样的。见谅。。。打搅了。。。