OCCT中的裁剪平面(Geom_RectangularTrimmedSurface)

本文介绍了OCCT中的裁剪平面(Geom_RectangularTrimmedSurface),详细解释了如何通过指定的参数来限定裁剪平面的范围,并讨论了在不同情况下构造裁剪平面的方法及可能出现的异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    裁剪平面(Geom_RectangularTrimmedSurface)是基础平面的一部分,它在基础平面的u方向上用两个值限制范围,在基础平面的v方向上也用两个值限制范围。裁剪平面的区域一定位于基础平面的区域内,它的定义如下:

  •    基础面
  •    u方向和v方向的参数值(umin, umax) 和(vmin, vmax)。裁剪平面是在基础面的一份拷贝上做裁剪,因此,当基础面改变时,裁剪平面不变。另外,裁剪平面的方向可以和基础平面不同(默认情况下,两者是相同的)。

    在OCCT中,构造一个裁剪平面的方法如下:

Geom_RectangularTrimmedSurface::Geom_RectangularTrimmedSurface (
  const Handle(Surface)& S, 
  const Standard_Real             U1, 
  const Standard_Real             U2, 
  const Standard_Real             V1,
  const Standard_Real             V2,
  const Standard_Boolean          USense,
  const Standard_Boolean          VSense)
: utrim1 (U1),
  vtrim1(V1),
  utrim2 (U2),
  vtrim2 (V2),
  isutrimmed (Standard_True),
  isvtrimmed (Standard_True)
{
  // kill trimmed basis surfaces
  Handle(Geom_RectangularTrimmedSurface) T =
    Handle(Geom_RectangularTrimmedSurface)::DownCast(S);
  if (!T.IsNull())
    basisSurf = Handle(Surface)::DownCast(T->BasisSurface()->Copy());
  else
    basisSurf = Handle(Surface)::DownCast(S->Copy());

  Handle(Geom_OffsetSurface) O =
    Handle(Geom_OffsetSurface)::DownCast(basisSurf);
  if (!O.IsNull()) 
  {
    Handle(Geom_RectangularTrimmedSurface) S2 = 
           new Geom_RectangularTrimmedSurface( O->BasisSurface(),U1,U2, V1, V2, USense, VSense);
    Handle(Geom_OffsetSurface) OS = new Geom_OffsetSurface(S2, O->Offset());
    basisSurf = Handle(Surface)::DownCast(OS);
  }  

  SetTrim( U1, U2, V1, V2, USense, VSense);
}

    裁剪面在u方向上的范围是[u1,u2],在v方向上的范围是[v1,v2]。这两个方向可以推导出面的法向量。如果面是非周期性的,z则不使用USense 和VSense 。如果面是周期性的,则使用USense 和VSense。默认情况下,裁剪面和和基础面的方向相同,且非闭合、非周期性。

     在下列情况下,构造时会有异常:

  •     基础面在U方向上不是周期性,但u1或者u2超出了基础面的边界。
  •     基础面在V方向上不是周期性,但v1或者v2超出了基础面的边界。
  •     u1 = u2
  •     v1 = v2
Geom_RectangularTrimmedSurface::Geom_RectangularTrimmedSurface (
 const Handle(Geom_Surface)& S,
 const Standard_Real                  Param1, 
 const Standard_Real                  Param2,
 const Standard_Boolean               UTrim,
 const Standard_Boolean               Sense
) {

  // kill trimmed basis surfaces
  Handle(Geom_RectangularTrimmedSurface) T =
    Handle(Geom_RectangularTrimmedSurface)::DownCast(S);
  if (!T.IsNull())
    basisSurf = Handle(Surface)::DownCast(T->BasisSurface()->Copy());
  else
    basisSurf = Handle(Surface)::DownCast(S->Copy());

  Handle(Geom_OffsetSurface) O =
    Handle(Geom_OffsetSurface)::DownCast(basisSurf);
  if (!O.IsNull()) 
  {
    Handle(Geom_RectangularTrimmedSurface) S2 = 
           new Geom_RectangularTrimmedSurface( O->BasisSurface(),Param1,Param2, UTrim, Sense);
    Handle(Geom_OffsetSurface) OS = new Geom_OffsetSurface(S2, O->Offset());
    basisSurf = Handle(Surface)::DownCast(OS);
  }  

  SetTrim(Param1, Param2, UTrim, Sense);
}

    基础面仅在一个参数方向上裁剪。如果UTrim = True,则在U方向上裁剪,否则在V方向上裁剪。在裁剪方向上,面的范围从Param1到Param2。如果基础面是周期性的,则Sense给出了面的可用部分。默认情况下,裁剪面与基础面的方向(在考虑的裁剪方向上)相同。 

     在下列情况下,构造时会有异常:

  •     基础面在裁剪方向上不是周期性,但Param1或者Param2超出了基础面的边界。
  •     Param1 = Parram2

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值