You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除OpenCascade中AIS_TextLabel输出符号的白色背景?并求固定平面、不随相机变换的文本显示方案

搞定你的OpenCascade文本显示难题

问题1:移除AIS_TextLabel周围的白色背景

你代码里尝试用SetBackdrop(False)关闭背景但没生效?大概率是OCCT版本差异或者API调用时机的问题,给你两个更靠谱的解决方案:

  • 方案一:直接关闭背景填充
    如果你的OCCT版本支持SetBackgroundGraphicAttr,可以直接修改背景属性彻底移除白色填充:

    # 获取文本标签的背景属性对象
    bg_attr = label.BackgroundGraphicAttr()
    bg_attr.SetFillStyle(Graphic3d_FS_EMPTY)  # 关闭背景填充
    label.SetBackgroundGraphicAttr(bg_attr)
    
  • 方案二:切换到矢量文本模式
    你代码里用了SetDisplayType(1)(位图文本模式),位图模式容易带默认背景。试试切换到矢量模式:

    label.SetDisplayType(0)  # 0对应矢量文本模式,默认无背景
    

    另外要确保SetBackdrop(False)在Display之前调用,如果还是不行,调用self._context.Redisplay(label, True)强制刷新视图。


问题2:固定在尺寸平面内、不随相机转向、缩放大小不变的文本

AIS_TextLabel天生是「面向相机」的广告牌模式,完全不符合你的需求。你得用底层的Prs3d_Text实现,直接控制文本的变换和渲染行为:

实现思路:

  1. 自定义AIS_InteractiveObject子类,自己控制文本渲染逻辑
  2. 设置文本的变换矩阵,把它固定在目标尺寸平面上
  3. 配置文本用像素单位设置高度,禁用广告牌模式,实现缩放大小不变、旋转不转向相机的效果

给你写好的Python示例代码:

from OCCT.Prs3d import Prs3d_Text, Prs3d_TextAspect
from OCCT.Graphic3d import Graphic3d_TextHorizontalAlignment, Graphic3d_TextVerticalAlignment
from OCCT.AIS import AIS_InteractiveObject
from OCCT.gp import gp_GTrsf, gp_Pln, gp_Pnt, gp_Dir
from OCCT.Quantity import Quantity_Color, Quantity_TOC_RGB

class FixedPlaneText(AIS_InteractiveObject):
    def __init__(self, text, position, target_plane, pixel_height):
        super().__init__()
        self._text = text
        self._pos = position
        self._plane = target_plane
        self._pixel_h = pixel_height

        # 配置文本样式
        self._text_style = Prs3d_TextAspect()
        self._text_style.SetColor(Quantity_Color(0.0, 0.0, 0.0, Quantity_TOC_RGB))
        # 关键:用像素单位设置高度,缩放时大小不变
        self._text_style.SetHeight(pixel_height, True)
        self._text_style.SetHorizontalAlignment(Graphic3d_TextHorizontalAlignment_Graphic3d_HTA_CENTER)
        self._text_style.SetVerticalAlignment(Graphic3d_TextVerticalAlignment_Graphic3d_VTA_CENTER)

    def Compute(self, prs_mgr, presentation, mode):
        # 设置文本的变换矩阵,让它贴合目标平面
        transform = gp_GTrsf()
        transform.SetTransformation(self._plane.Location(), self._plane.Axis())
        presentation.SetTransformation(transform)

        # 绘制文本到视图中
        Prs3d_Text.Draw(presentation, self._text_style, self._text, self._pos)
        # 禁用广告牌模式,文本固定在平面内不转向相机
        presentation.SetTransformPersistence(None)

# 用法示例:
# 先创建你需要的尺寸平面(比如XY平面)
dim_plane = gp_Pln(gp_Pnt(0,0,0), gp_Dir(0,0,1))
# 创建固定平面的文本对象
fixed_text = FixedPlaneText("1", gp_Pnt(50,50,0), dim_plane, 14)
# 显示到上下文
self._context.Display(fixed_text, False)

重点说明:

  • SetHeight(pixel_height, True):第二个参数True指定用像素单位,不管怎么缩放视图,文本大小都保持不变
  • SetTransformPersistence(None):关掉默认的广告牌变换,文本就会固定在你设置的平面上,相机旋转时不会跟着转向
  • 通过gp_GTrsf设置变换矩阵,确保文本精准贴合你的尺寸标注平面

内容的提问来源于stack exchange,提问作者Александр Трифонов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 06:39:49