#Ezcad3之3D加工曲线
使用列表加工3D曲线焦距不变化问题
问题描述
客户反馈列表加工3D曲线不变焦距问题,后面自己测试发现确实是这样。代码如下
Task.Run(() =>
{
double[,] pt3Ds = new double[16, 3]
{
{ 0, 0, 0},
{ 5, 0, 0},
{ 5, 5, 0},
{ 0, 5, 0},
{ 0, 0, 0},
{10, 10, 15 },
{20, 10, 15 },
{20, 20, 15 },
{10, 20, 15},
{10, 10, 15},
{ 30, 0, 0 },
{ 30, 30, 0 },
{ -30, 30, 0 },
{ -30, -30, 0 },
{ 30, -30, 0 },
{ 30, 0, 0 },
};
EzdKernel.E3_ERR err = EzdKernel.E3_MarkerListReady(m_idMarker, m_idEM, 0x0000);
//EzdKernel.E3_MarkertSetLoopStartToList(m_idMarker);
err = EzdKernel.E3_MarkerOneCurveToList2(m_idMarker, 0, 0, 16, 0x0000, pt3Ds);
err = EzdKernel.E3_MarkerSentBufToCardAndRunList(m_idMarker);
//循环
//EzdKernel.E3_MarkerDoLoopToList(m_idMarker);
//列表结束标志
err = EzdKernel.E3_MarkerListEndToList(m_idMarker);
//等待列表执行完成
err = EzdKernel.E3_MarkerWaitForFinish(m_idMarker);
err = EzdKernel.E3_MarkerListEnd(m_idMarker);
}).ContinueWith(t =>
{
MessageBox.Show("退出加工");
});
解决方案1:
既然列表加工不行,我就绘制一个3D曲线对象然后加工。通过绘制出来然后加工,这样也可以在标准软件中保存起来,方便观看绘制的图像正不正确。
Pt3d[] pt3Ds1 = {
new Pt3d( 0, 0, 0 ),
new Pt3d( 5, 0, 0 ),
new Pt3d( 5, 5, 0 ),
new Pt3d( 0, 5, 0 ),
new Pt3d( 0, 0, 0 ),
new Pt3d(0, 0, 15 ),
new Pt3d(5, 0, 15 ),
new Pt3d(5, 5, 15 ),
new Pt3d( 0, 5, 15 ),
new Pt3d( 0, 0, 15 ),
new Pt3d( 0, 0, 0 ),
};
EzdKernel.E3_ID m_id3D = EzdKernel.E3_ID.INVALID;
EzdKernel.E3_CreateLines3d_2(m_idEM, 0, pt3Ds1, pt3Ds1.Length, false, ref m_id3D);
EzdKernel.E3_MarkerSetPenOutput(m_idMarker, 0, 0);
EzdKernel.E3_MarkEnt2(m_idMarker, m_idEM, m_id3D, 0, 0, 1);
- 代码发给客户之后,客户那边还是有所顾虑,客户那边的3d数据有点多,考虑会不会绘制3d曲线数据的时候会不会很长。还是想用列表的加工的方式。但是没想出列表加工那里写的不对,先让客户使用绘制曲线的方式。后面再研究列表问题。
- 之前在玻璃钻孔,有同事用这个接口绘制3d的螺旋线的方式,,完成钻孔项目。
解决方案2:
列表接口标刻3D曲线模式需改修改为0x00100000
//其他代码不变,修改flag值为0x00100000就正常
err = EzdKernel.E3_MarkerOneCurveToList2(m_idMarker, 0, 0, 16, 0x00100000, pt3Ds);
/// <summary>
/// 标刻一条3D曲线
/// </summary>
/// <param name="idMarker"></param>
/// <param name="type">0</param>
/// <param name="pen"></param>
/// <param name="ptNum"></param>
/// <param name="nFlag">0x00100000</param>
/// <param name="ptBuf"></param>
/// <returns></returns>
[DllImport("Ezcad3kernel", EntryPoint = "E3_MarkerOneCurveToList2", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
static extern E3_ERR e3_MarkerOneCurveToList2(E3_POINTER idMarker, int type, int pen, int ptNum, int nFlag, double[,] ptBuf);
public static E3_ERR E3_MarkerOneCurveToList2(E3_ID idMarker, int type, int pen, int ptNum, int nFlag, double[,] ptBuf)
{
return e3_MarkerOneCurveToList2(idMarker, type, pen, ptNum, nFlag, ptBuf);
}