这是博文来自于网友的提问。
从CAD中复制一些轮廓到Solidworks的草图里面之后,因为软件转换的精度问题,会导致草图直线的一些坐标出来1999.88这种小数,但是实际都是要取整的。 咨询我有没有好的办法可以解决这个问题。
思路: 遍历草图直线,或者端点,在获取完坐标之后 进行取整操作,并修改坐标点位。(因为当前草图全部为活动状态,所以就可以任意修改)
原始状态:
关键代码:
private void btnRoundPointLoc_Click(object sender, EventArgs e)
{
SldWorks swApp = PStandAlone.GetSolidWorks();
ModelDoc2 swModel = default(ModelDoc2);
ModelDocExtension swModelDocExt = default(ModelDocExtension);
SelectionMgr swSelMgr = default(SelectionMgr);
Feature swFeature = default(Feature);
//连接文件
swModel = (ModelDoc2)swApp.ActiveDoc;
swModelDocExt = (ModelDocExtension)swModel.Extension;
//选中草图
var status = swModelDocExt.SelectByID2("Sketch1", "SKETCH", 0, 0, 0, false, 0, null, 0);
swSelMgr = (SelectionMgr)swModel.SelectionManager;
//转换
swFeature = (Feature)swSelMgr.GetSelectedObject6(1, -1);
//进入编辑草图
swModel.EditSketch();
//获取草图中的所有草图点来修改坐标
var swSketch = (Sketch)swFeature.GetSpecificFeature2();
var points = (object[])swSketch.GetSketchPoints2();
for (int i = 0; i < points.Length; i++)
{
var p = (SketchPoint)points[i];
var x = p.X * 1000;
var y = p.Y * 1000;
p.X = Math.Round(x, 0) / 1000;
p.Y = Math.Round(y, 0) / 1000;
//Debug.Print(p.X.ToString() + " " + p.Y.ToString());
}
swModel.EditRebuild3();
swModel.EditSketch();
MessageBox.Show("完成了!");
}
结果: