创建工字梁的平面横截面:由竖直腹板连接的两个水平翼缘。
width 是翼缘宽度,height 是总高度,webThickness 和 flangeThickness 是壁厚;alignment 指定轮廓盒的哪个点位于 center 上,rotation 使其在平面内转动,以度为单位。它位于地面上,可直接沿 Y 拉伸。
轮廓尺寸、两个厚度、对齐方式、旋转、中心和平面法线
工字梁轮廓面
const profile = await bitbybit.occt.shapes.face.createIBeamProfileFace({
width: 10,
height: 20,
webThickness: 2,
flangeThickness: 3,
alignment: Bit.Inputs.Base.basicAlignmentEnum.midMid,
rotation: 0,
center: [0, 0, 0],
direction: [0, 1, 0],
});
const beam = await bitbybit.occt.operations.extrude({ shape: profile, direction: [0, 100, 0] });
创建 H 形梁的平面横截面:由水平腹板连接的两个竖直翼缘,即侧放的工字梁。
width 是总宽度,height 是翼缘高度,webThickness 和 flangeThickness 是壁厚;alignment 指定轮廓盒的哪个点位于 center 上,rotation 使其在平面内转动,以度为单位。它位于地面上。
轮廓尺寸、两个厚度、对齐方式、旋转、中心和平面法线
H 形梁轮廓面
创建 T 形梁的平面横截面:一个水平翼缘,中间垂下一块竖直腹板。
width 是翼缘宽度,height 是总高度,webThickness 和 flangeThickness 是壁厚;alignment 指定轮廓盒的哪个点位于 center 上,rotation 使其在平面内转动,以度为单位。它平放在地面上。
轮廓尺寸、两个厚度、对齐方式、旋转、中心和平面法线
T 形梁轮廓面
创建 U 形梁(槽钢)的平面横截面:一块腹板,两端立起两个宽为 flangeWidth 的翼缘。
width 和 height 是总尺寸,webThickness 和 flangeThickness 是壁厚;alignment 指定轮廓盒的哪个点位于 center 上,rotation 使其在平面内转动,以度为单位。它平放在地面上。
轮廓尺寸、厚度、翼缘宽度、对齐方式、旋转、中心和平面法线
U 形梁轮廓面
收集关于面的诊断信息:其曲面类型、U 和 V 阶数、控制点和节点数量、U 或 V 是否闭合、周期性或有理、UV 边界、面积、平面性、朝向以及线框和边的数量。
空的或 null 的面给出标记为无效的报告。
要检查的面
报告
通过在面的 U 和 V 范围内均匀步进,在面上铺一个点网格。
nrDivisionsU 乘 nrDivisionsV 个点从边到边覆盖面,逐行列出:先是第一个 U 的所有 V 值,然后是下一个 U。移除标志丢弃第一行或最后一行;偏移标志将每个点推移半步。
面、U 和 V 方向的点数,以及偏移和移除选项
点,逐行排列
沿一个参数方向在面上绘制均匀分布的线框,就像横格纸上的线。
nrDivisions 步给出比该数多一个的线框,包括边界线;removeStart 和 removeEnd 丢弃它们,shiftHalfStep 将每个线框移动半步。isU 为 true 时每个线框位于固定的 U 并横跨 V;为 false 时角色互换。
面、分段数、方向和选项
线框,沿所选方向按顺序排列
像 subdivideToPoints 一样在面上铺点网格,但在每第 n 行或列上移动和移除点,用于砖状和交错的图案。
每条规则是一对:shiftHalfStepNthU 指定每隔多少个 V 行在 U 方向移动半步,shiftHalfStepUOffsetN 指定从哪里开始计数;移除规则丢弃边缘行的每第 n 个点。
面、U 和 V 方向的点数,以及第 n 行的偏移和移除规则
点,逐行排列
const staggered = await bitbybit.occt.shapes.face.subdivideToPointsControlled({
shape: face,
nrDivisionsU: 10,
nrDivisionsV: 10,
shiftHalfStepNthU: 2,
shiftHalfStepUOffsetN: 0,
removeStartEdgeNthU: 0,
removeStartEdgeUOffsetN: 0,
removeEndEdgeNthU: 0,
removeEndEdgeUOffsetN: 0,
shiftHalfStepNthV: 0,
shiftHalfStepVOffsetN: 0,
removeStartEdgeNthV: 0,
removeStartEdgeVOffsetN: 0,
removeEndEdgeNthV: 0,
removeEndEdgeVOffsetN: 0,
});
计算 subdivideToPoints 会在面上铺出的网格每个点处的曲面法线,选项相同,顺序相同。
法线是单位向量并遵循面的朝向,因此反转的面给出翻转的法线。将该列表与 subdivideToPoints 配对,可放置立于曲面上的东西。
面、U 和 V 方向的点数,以及偏移和移除选项
单位法线,逐行排列
列出 subdivideToPoints 会在面上铺出的网格的 UV 参数对,选项相同,顺序相同。
这些对采用面的真实 UV 值,而不是分数。
面、U 和 V 方向的点数,以及偏移和移除选项
UV 对,逐行排列
找出面上给定 UV 分数处的点。
paramU 和 paramV 在面的 U 和 V 范围内从 0 到 1,因此 0.5, 0.5 是范围的中间,在修剪过的面上这并不总是在面内。
面以及 U 和 V 比例
曲面上的点
找出面在给定 UV 分数处的曲面法线。
paramU 和 paramV 在面的 U 和 V 范围内从 0 到 1。法线是单位向量并遵循面的朝向,因此反转的面给出翻转的法线。
面以及 U 和 V 比例
单位法线
一次找出面上多个 UV 分数对处的点。
每对包含 U 然后 V,都在面的范围内从 0 到 1。
面以及 U 和 V 比例对的列表
每对一个点,顺序相同
一次找出面在多个 UV 分数对处的曲面法线。
每对包含 U 然后 V,都在面的范围内从 0 到 1。法线是底层曲面的单位向量;与 normalOnUV 不同,对于反转的面它们不会翻转。
面以及 U 和 V 比例对的列表
每对一个单位法线,顺序相同
沿横跨面 UV 范围的一条直线放置均匀分布的点。
isU 为 true 时该线位于 param(U 范围的 0 到 1 的分数)处,nrPoints 个点分布在整个 V 范围上;为 false 时角色互换。removeStartPoint 和 removeEndPoint 丢弃两端,shiftHalfStep 将每个点移动半步。
面、方向、沿该方向的比例、点数和选项
沿该线的点,按顺序排列
沿一条参数线在面上绘制一个线框,跟随曲面。
isU 为 true 时线框位于 param(U 范围的 0 到 1 的分数)处并横跨整个 V 范围;为 false 时角色互换。
面、方向和沿该方向的比例
曲面上的线框
在面上绘制多个线框,每个参数值一个,跟随曲面。
isU 为 true 时每个线框位于其在 U 范围内的分数处并横跨整个 V 范围;为 false 时角色互换。
面、方向和沿该方向的各个比例
每个比例一个线框,顺序相同
将点分类为在面内、在面的边界上或在面外,并保留所选的组。
keepIn、keepOn、keepOut 和 keepUnknown 选择要保留的组;tolerance 决定距边界
多近算作在边界上。使用 useBndBox 时,位于按 gapTolerance 扩大后的包围盒之外的点
算作在面外。
面、点、容差、包围盒快捷判断以及要保留的组
通过筛选的点,保持原有顺序
用相同的点和选项对多个面运行 filterFacePoints。
默认结果为每个面一个列表;flatPointsArray 为 true 时各列表被合并为一个,因此位于两个面上的点出现两次。
面、点、容差、要保留哪些组以及是否展平结果
每个面一个点列表,或合并后的单个列表
为每个线框创建一个面,每个都从引导面的曲面上切出,因此具有该曲面的曲率。
线框必须位于曲面上。inside 为 true 时每个线框被转向,使其面为它所包围的区域;为 false 时由线框自身的方向决定,反向的线框给出外部区域。
线框、引导面以及要保留哪一侧
每个线框一个面,顺序相同
由位于引导面曲面上的线框创建面,因此新面具有该曲面的曲率。
inside 为 true 时线框被转向,使面为它所包围的区域;为 false 时由线框自身的方向决定,反向的线框给出其外部的区域。
线框、引导面以及要保留哪一侧
新面
创建以闭合线框为边界的面。
planar 为 true 时线框必须位于同一平面内,面是平的;为 false 时会通过线框的边拟合一个光滑曲面,从而填充不平的线框。不是线框的形状会抛出错误。
线框以及面是否必须为平面
新面
由多个线框创建一个面:第一个线框是外边界,之后的每个线框在其中切一个孔。
planar 为 true 时线框必须位于同一平面内。孔线框必须位于外线框内部,且不与它或彼此相交。
线框(外边界在前)以及面是否必须为平面
带孔的面
const outer = await bitbybit.occt.shapes.wire.createRectangleWire({ width: 20, length: 10, center: [0, 0, 0], direction: [0, 1, 0] });
const hole = await bitbybit.occt.shapes.wire.createCircleWire({ radius: 2, center: [0, 0, 0], direction: [0, 1, 0] });
const plate = await bitbybit.occt.shapes.face.createFaceFromWires({ shapes: [outer, hole], planar: true });
由引导面曲面上的多个线框创建一个面:第一个线框是外边界,之后的每个线框切一个孔。
面具有引导曲面的曲率。inside 应用于第一个线框:true 将其转向使面为它所包围的区域;false 由其自身的方向决定。
线框(外边界在前)、引导面以及要保留哪一侧
带孔的面
为每个闭合线框创建一个面,各与 createFaceFromWire 所做的相同。
planar 为 true 时每个线框必须位于一个平面内;为 false 时会通过每个线框拟合一个光滑曲面。
线框以及面是否必须为平面
每个线框一个面,顺序相同
用切线皮带连接圆:对每一对,它绘制两条外切线和它们之间的外侧圆弧,并用平面填充该轮廓。
combination 选择配对:allWithAll 每个圆与其他每个圆,inOrder 列表中的相邻圆,inOrderClosed 还包括最后一个与第一个。unify 融合这些面;否则它们构成复合体。
圆线框、配对方式、是否融合结果以及容差
融合后的形状,或带状面的复合体
const a = await bitbybit.occt.shapes.wire.createCircleWire({ radius: 3, center: [0, 0, 0], direction: [0, 1, 0] });
const b = await bitbybit.occt.shapes.wire.createCircleWire({ radius: 1, center: [10, 0, 0], direction: [0, 1, 0] });
const c = await bitbybit.occt.shapes.wire.createCircleWire({ radius: 2, center: [5, 0, 8], direction: [0, 1, 0] });
const belt = await bitbybit.occt.shapes.face.createFaceFromMultipleCircleTanWires({
circles: [a, b, c],
combination: Bit.Inputs.OCCT.combinationCirclesForFaceEnum.inOrderClosed,
unify: true,
tolerance: 1e-7,
});
用切线皮带连接相邻列表中的圆,方式与 createFaceFromMultipleCircleTanWires 连接单个圆相同。
allWithAll 将一个列表的每个圆与下一个列表的每个圆连接;inOrder 连接相邻列表中相同位置的圆,这需要列表长度相等;inOrderClosed 还将每个列表闭合成环。unify 融合这些面;否则它们构成复合体。
圆线框列表、配对方式、是否融合结果以及容差
融合后的形状,或带状面的复合体
创建覆盖整个曲面的面,直到曲面的自然边界。
tolerance 用于检测退化边,例如球体的极点。曲面来自 geom.surfaces。
曲面和退化边的容差
面
用位于曲面上的线框切割曲面来创建面。
inside 为 true 时线框被转向,使面为它所包围的区域;为 false 时由线框自身的方向决定,反向的线框给出其外部的区域。曲面来自 geom.surfaces。
曲面、其上的线框以及要保留哪一侧
面
为网格的每个三角形创建一个平面三角形面。
无法形成面的三角形(例如有重复点的)会带着控制台警告被跳过。
以三角形列表表示的网格
每个能够构建的三角形一个面
按位置从形状中选取一个面,从 0 开始计数,顺序为内核遍历形状的顺序。
形状必须是面或由面构建的东西;超出最后一个面的索引会抛出错误。
形状和从 0 开始的索引
该索引处的面
按内核遍历的顺序列出形状的每个面。
形状
形状中找到的面
翻转面,使其法线指向另一侧。
几何保持不变;只有朝向改变,它决定壳体的外侧以及 normalOnUV 报告的方向。
面
翻转后的面
读取面的最小 U 参数值,以曲面自身的单位表示。
它与 getUMaxBound、getVMinBound 和 getVMaxBound 一起给出本类中其他地方所用 UV 分数映射到的范围。
面
U 的下界
读取面的最大 U 参数值,以曲面自身的单位表示。
面
U 的上界
读取面的最小 V 参数值,以曲面自身的单位表示。
面
V 的下界
读取面的最大 V 参数值,以曲面自身的单位表示。
面
V 的上界
测量列表中每个面的表面积,以平方模型单位表示。
面
每个面一个面积,顺序相同
找出面的质心,即其面积的平衡点。
在弯曲或环形的面上该点可能不在曲面上。
面
质心
在面上铺矩形线框,其 UV 范围按 nrRectanglesU 乘 nrRectanglesV 划分,每个单元一个,跟随曲面。
边框偏移在每端修剪范围。每个矩形居中于其单元内,按缩放模式以单元的分数确定大小;圆角模式倒圆角,包含模式跳过单元。
面、单元数量、边框偏移和可选的图案
矩形线框,逐单元排列
在面上切出矩形孔的网格并返回穿孔后的面。
孔遵循与 subdivideToRectangleWires 相同的单元和模式;未给出缩放模式时每个孔覆盖其单元的一半。holesToFaces 为 true 时,结果在穿孔面之后还包含每个孔一个面,便于制作盖子或填充物。
面、单元数量、边框偏移、可选的图案以及是否返回孔面
穿孔后的面,按要求后接孔面
const [perforated] = await bitbybit.occt.shapes.face.subdivideToRectangleHoles({
shape: face,
nrRectanglesU: 6,
nrRectanglesV: 4,
scalePatternU: [0.6],
scalePatternV: [0.6],
filletPattern: [0.5],
inclusionPattern: [true],
holesToFaces: false,
offsetFromBorderU: 0.05,
offsetFromBorderV: 0.05,
});
在面上铺六边形线框的蜂窝,nrHexagonsU 乘 nrHexagonsV 个放入其 UV 范围,每个都跟随曲面。
边框偏移在每端修剪范围的一部分;flatU 将平边朝向 U,扩展标志将外侧行拉伸到边缘之外。缩放、圆角和包含模式逐个六边形重复。
面、六边形数量、朝向、边框偏移、延伸标志和可选的图案
六边形线框,逐行排列
在面上切出六边形孔的蜂窝并返回穿孔后的面。
孔遵循与 subdivideToHexagonWires 相同的布局和模式;未给出缩放模式时每个孔是其六边形大小的一半。holesToFaces 为 true 时,结果在穿孔面之后还包含每个孔一个面。
面、六边形数量、朝向、边框偏移、可选的图案以及是否返回孔面
穿孔后的面,按要求后接孔面
const [perforated] = await bitbybit.occt.shapes.face.subdivideToHexagonHoles({
shape: face,
nrHexagonsU: 8,
nrHexagonsV: 6,
flatU: false,
holesToFaces: false,
scalePatternU: [0.7],
scalePatternV: [0.7],
filletPattern: [0],
inclusionPattern: [true],
offsetFromBorderU: 0.05,
offsetFromBorderV: 0.05,
});
由一列角点创建平面,从最后一个点回到第一个点闭合轮廓。
这些点必须位于同一平面内。
按顺序排列的角点
面
在地平面上用平面六边形面的网格填充一个矩形,以原点为中心。
六边形被缩放,使 nrHexagonsInWidth 个横跨 width,nrHexagonsInHeight 个横跨 height。缩放、圆角和包含模式逐个六边形读取并重复;扩展标志将外侧行拉伸到边缘之外以覆盖矩形。
矩形尺寸、六边形数量、延伸标志和可选的图案
每个六边形一个面,逐行排列
创建平面椭圆面。
direction 是其平面的法线:默认的 [0, 1, 0] 将其平放在地面上。radiusMajor 必须至少为 radiusMinor。
两个半径、中心和平面法线
椭圆面
创建以 center 为中心的平面正方形面。
direction 是其平面的法线:默认的 [0, 1, 0] 将其平放在地面上。
正方形面
创建以 center 为中心的平面矩形面。
在地平面上 width 沿 X,length 沿 Z;direction 是平面的法线,默认的 [0, 1, 0] 使面平放在地面上。
宽度、长度、中心和平面法线
矩形面
创建平面 L 形面:两条在角处相接的矩形腿。
第一条腿有 widthFirst 和 lengthFirst,第二条有 widthSecond 和 lengthSecond;align 将角放在腿的外侧、内侧或中间,rotation 使形状在其平面内转动,以度为单位。除非 direction 另有指定,否则它平放在地面上。
两条边的尺寸、对齐方式、旋转、中心和平面法线
L 形面
创建带 numRays 个角的平面星形面。
角伸到 outerRadius,角之间的凹口到 innerRadius;half 只保留前一半的角。offsetOuterEdges 将角尖抬出平面,是为线框准备的;平面需要它为 0。除非 direction 另有指定,否则它平放在地面上。
星形面
创建形如风格化圣诞树的平面:nrSkirts 层树枝,从距树干线 outerDist 收窄到 innerDist,立于 trunkHeight 和 trunkWidth 的树干上。
与此处其他平面形状不同,它在 XY 平面内竖立,树尖沿 Y;direction 是树干到树尖的方向,rotation 使其绕该轴旋转,以度为单位。
树的比例、树干尺寸、选项、原点以及从树干到树尖的方向
圣诞树面
创建平面平行四边形面:一个 width 乘 height 的矩形,其边倾斜 angle 度。
aroundCenter 为 true 时形状以 center 为中心;否则从该点开始并向正方向延伸。direction 是平面的法线;默认的 [0, 1, 0] 将其平放在地面上。
宽度、高度、倾斜角度、是否居中、中心和平面法线
平行四边形面
创建大致能放入边长为 sizeApprox 的正方形的平面心形面。
rotation 使其在平面内转动,以度为单位。direction 是平面的法线;默认的 [0, 1, 0] 将其平放在地面上。
近似尺寸、旋转、中心和平面法线
心形面
创建带 nrCorners 个角的平面正多边形面,所有角都在半径为 radius 的圆上。
direction 是平面的法线;默认的 [0, 1, 0] 将其平放在地面上。
角数、半径、中心和平面法线
多边形面
将面的曲面重建为给定 U 和 V 阶数的 B-spline。
降低阶数会将曲面平滑为 tolerance 内的更简单逼近;提高阶数则是精确的。keepTrim 保留原始边界线框,在提高阶数时可靠;否则面覆盖整个新曲面。重建失败给出 null 面。
面、目标 U 和 V 阶数、容差以及是否保留边界
重建后的面
更改 UV 参数在面上的走向:交换 U 和 V、反转 U、反转 V,或任意组合。
几何保持不变;只有参数方向改变,这对此处每个在 UV 中工作的方法都有影响,例如 subdivideToPoints 或 wireAlongParam。面在曲面的自然边界上重建。
面和要应用的翻转
参数化方式已更改的面
重新参数化面,使 U 或 V 的等步长在曲面上给出大致相等的距离。
许多曲面的参数在某些地方挤在一起,因此其上的 UV 网格看起来不均匀;此方法在每个方向以 samples 个点重新采样曲面并重新拟合,从而使 subdivideToPoints 及其同类方法更均匀。面在新的边界上重建。
面、要归一化的方向、采样数和拟合容差
重新参数化后的面
OpenCascade 中的面:曲面的有界部分,平面或曲面,带有一个外边界线框和可选的形成孔洞的内线框。可以从线框或曲面构建它们,或构建为现成的平面形状(圆、矩形、星形、梁轮廓),这些形状位于地平面上,除非
direction另有指定;通过 UV 参数遍历其曲面以获取点、法线和线框网格;在其上切出孔洞图案;以及测量面积和质心。U 和 V 是曲面的两个方向,这里以面自身范围的 0 到 1 比例给出。面沿边相接形成壳体,由shapes.shell处理。