2026-05-11 Ezcad3之3D加工曲线 使用列表加工3D曲线焦距不变化问题

#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);
 }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容