资讯详情

选中poly的4个点,自动生成面

📅 2026/10/19 2:14:00 | 华诺云谱 👁 阅读
选中poly的4个点,自动生成面
( -- 1. 检查选中物体 if selection.count 0 then ( messageBox 请先选中一个 Poly 模型 Title:提示 return undefined ) local obj selection[1] if not (classOf obj Editable_Poly or classOf obj Editable_Mesh) then ( messageBox 选中的必须是 Editable Poly 或 Editable Mesh Title:提示 return undefined ) -- 2. 获取选中的顶点 (使用底层 selectedVerts 避免堆栈传播干扰) local selVerts polyOp.getVertSelection obj -- 防错检查选中数量 if selVerts.numberSet ! 4 then ( messageBox (请严格选中 4 个顶点当前选中了 selVerts.numberSet as string 个。\n(如果确定只选了4个请按【空格键】解除选择锁定并关闭【软选择】)) Title:提示 return undefined ) -- 将选中的顶点转换为数组 local vertArray selVerts as array -- 3. 获取这4个顶点的世界坐标 local p1 in coordsys world (polyOp.getVert obj vertArray[1]) local p2 in coordsys world (polyOp.getVert obj vertArray[2]) local p3 in coordsys world (polyOp.getVert obj vertArray[3]) local p4 in coordsys world (polyOp.getVert obj vertArray[4]) format 成功获取4个点坐标:\n%\n%\n%\n%\n p1 p2 p3 p4 -- 4. 计算中心点、长度和宽度 local centerPos (p1 p2 p3 p4) / 4.0 -- 假设 p1-p2 是长度方向p1-p4 是宽度方向 local lenDir normalize (p2 - p1) local widDir normalize (p4 - p1) -- 重新正交化方向向量防止选点不完全垂直 local zDir normalize (cross lenDir widDir) lenDir normalize (cross widDir zDir) local segLength distance p1 p2 local segWidth distance p1 p4 -- 5. 创建 Plane (片) local planeObj Plane length:segLength width:segWidth pos:centerPos lengthSegs:1 widthSegs:1 planeObj.name obj.name _QuadFace -- 6. 设置 Plane 的朝向 (X宽度, Y长度, Z法线) planeObj.transform matrix3 widDir lenDir zDir centerPos -- 7. 将 Plane 的4个顶点精准对齐到选中的4个点 convertToPoly planeObj polyOp.setVert planeObj 1 p1 polyOp.setVert planeObj 2 p2 polyOp.setVert planeObj 3 p3 polyOp.setVert planeObj 4 p4 update planeObj -- 8. 强制刷新 选中 聚焦 select planeObj redrawViews() max zoomext sel format 完成 \n format 生成面物体: %\n planeObj.name )
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑