zoukankan      html  css  js  c++  java
  • NX开发 刀路生成

    此段是可以生成程序的完整代码,只有从坐标(10,10,10)到(500,500,500)一根刀轨。
    motion_ptr->feed_value 的值为0时生成G00,非0时生成G01。
    此代码只有直线,生成圆弧的方法类似,可参考open-api函数库里的ufd_cam_udop.c文件。
    加工CAM的入口函数是udop,此入口函数和常用的UG二次开发入口函数ufusr并列,不需要在ufusr中调用,直接在ufusr所在的CPP文件中写入udop函数即可,或者将udop放在一单独的.c文件中,在ufusr所在的CPP文件中包含也可以,#include "path.c"。
    编译出来的dll文件不能像普通的二次开发文件一样直接用Crtl + U 调用,必须先在ugii_env.dat文件中定义好变量,例如abs=d:path.dll。此abc即是变量,然后使用UG的自定义加工模板调用此变量就OK了。

    #include <uf_defs.h>
    #include <uf_cam.h>
    #include <uf_udop.h>
    #include <uf_oper.h>
    #include <uf_path.h>
    #include <uf.h>
    #include <uf_exit.h>
    #include <stdio.h>
    
    extern void udop(char *param, int *status, int parm_len)
    {
      char   op_name[UF_OPER_OPNAME_LEN];
      UF_UDOP_id_t                udop_id;
      UF_UDOP_purpose_t        purpose;
      UF_OPER_id_t                oper_id;
      UF_PATH_id_t                path_id;
    
      UF_CAM_exit_id_t    exit_id = (UF_CAM_exit_id_t)param;
      UF_initialize();
      UF_UDOP_ask_udop( exit_id, &udop_id);
      UF_UDOP_ask_oper( udop_id, &oper_id);
      UF_UDOP_ask_purpose( udop_id, &purpose);
      UF_OPER_ask_name( oper_id, op_name);
      UF_OPER_ask_path( oper_id, &path_id);
    
      if( purpose == UF_UDOP_GENERATE )
      {
          
        /************  To input GOTO/ motion*************/
          UF_PATH_linear_motion_t    motion,*motion_ptr = &motion;
          motion_ptr->feed_value = 0.0;
          motion_ptr->feed_unit = UF_PATH_FEED_UNIT_NONE;
          motion_ptr->type = UF_PATH_MOTION_TYPE_CUT;
          motion_ptr->tool_axis[0] =0.0;
          motion_ptr->tool_axis[1] =0.0;
          motion_ptr->tool_axis[2] =1.0;
            
          motion_ptr->position[0] =10.0;
          motion_ptr->position[1] =10.0;
          motion_ptr->position[2] =10.0;
          UF_PATH_create_linear_motion( path_id, motion_ptr);
          motion_ptr->position[0] =500.0;
          motion_ptr->position[1] =500.0;
          motion_ptr->position[2] =500.0;
          UF_PATH_create_linear_motion( path_id, motion_ptr);
    
          UF_PATH_cutcom_t  cutcom_data;
          cutcom_data.cutcom_mode = UF_PATH_CUTCOM_ON;
          cutcom_data.plane_type = UF_PATH_PLANE_TYPE_XY;
          cutcom_data.cutcom_on_status = 
                    UF_PATH_CUTCOM_ON_BEFORE_ENGAGE;
          cutcom_data.cutcom_off_status = 
                UF_PATH_CUTCOM_OFF_AFTER_RETRACT;
          cutcom_data.adjust_register = 2;
          cutcom_data.full_cutcom_output = TRUE;
          cutcom_data.adjust_flag = TRUE;
          UF_PATH_create_cutcom( path_id, &cutcom_data, NULL ); 
    
          UF_PATH_end_tool_path( path_id ); 
       }
      UF_terminate();
    }
    C语言

    以下是.NET例子

    /*=============================================================================
    
                        Copyright (c) 2009 Siemens PLM Software 
                        Unpublished - All rights reserved
    
    ===============================================================================
     
    =============================================================================
    File description: Sample NX/Open Application
    
    This is basic example of how to write a UDOP entry in CS
    To use this after you build the dll as cs_udop.dll
    1) Put the dll in a folder - for example c:my_udops
    2) Create an system environment variable MYCORP_UDOP_2 and set it to
       c:my_udopscs_udop.dll
    3) Now in NX CAM create a MILL_USER and in the UI enter MYCORP_UDOP_2
       for the "CAM API Exit Name in the user interface
       press either "User Parameters" or "Generate" to see the results
    
    ===============================================================================
    */
    
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.IO;
    using System.Globalization;
    using NXOpen;
    using NXOpen.UF;
    using NXOpen.UIStyler;
    
    namespace test1
    {
        public class Class1
        {
    
            //''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            //       SESSION ATTRIBUTES
            //''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            // Native .NET Session
            internal static NXOpen.Session Nts = Session.GetSession();
            // User Function Session
            internal static NXOpen.UF.UFSession Ufs = UFSession.GetUFSession();
            // Native UI Session
            internal static NXOpen.UI Uis = UI.GetUI();
            // Native CAM Session
            internal static NXOpen.CAM.CAMSession Cams = Nts.CAMSession;
            // Native Remote Utilities Session
            internal static NXOpen.RemoteUtilities Rus = RemoteUtilities.GetRemoteUtilities();
    
    
            //''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            //       SESSION OBJECT ATTRIBUTES
            //''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            // Native Listing Window
            internal static NXOpen.ListingWindow LW = Nts.ListingWindow;
            // Native Message Box
            internal static NXOpen.NXMessageBox MBox = Uis.NXMessageBox;
            // WorkPart
            internal static NXOpen.Part WorkPart = Nts.Parts.Work;
    
            // ************************************************************************************
    
            public static void Main()
            {
    
            }
    
            public static int udop(string inString)
            {
                IntPtr udopPtr = IntPtr.Zero;
                IntPtr operPtr = IntPtr.Zero;
                UFUdop.Purpose purpose;
                string operName = string.Empty;
                IntPtr pathPtr = IntPtr.Zero;
    
                Ufs.Udop.AskUdop(IntPtr.Zero, out udopPtr);
                Ufs.Udop.AskOper(udopPtr, out operPtr);
                Ufs.Udop.AskPurpose(udopPtr, out purpose);
                Ufs.Oper.AskName(operPtr, out operName);
                Ufs.Oper.AskPath(operPtr, out pathPtr);
    
                if (purpose == UFUdop.Purpose.UserParams)
                {
                    MBox.Show("User Params", NXMessageBox.DialogType.Information, "User Params");
                }
    
                if (purpose == UFUdop.Purpose.Generate)
                {
                    Ufs.Path.InitToolPath(pathPtr);
    
                    UFPath.LinearMotion linearMotion;
                    linearMotion.feed_value = 0;
                    linearMotion.type = UFPath.MotionType.MotionTypeCut;
                    linearMotion.feed_unit = UFPath.FeedUnit.FeedUnitNone;
                    double[] pos = { 0, 0, 0 };
                    linearMotion.position = pos;
                    double[] tAxis = { 0, 0, 1 };
                    linearMotion.tool_axis = tAxis;
                    Ufs.Path.CreateLinearMotion(pathPtr, ref linearMotion);
    
                    linearMotion.position[0] = 0;
                    linearMotion.position[1] = 0.707;
                    linearMotion.position[2] = 0.707;
                    linearMotion.tool_axis[0] = 0;
                    linearMotion.tool_axis[1] = 1;
                    linearMotion.tool_axis[2] = 0;
                    Ufs.Path.CreateLinearMotion(pathPtr, ref linearMotion);
    
                    linearMotion.position[0] = 1;
                    linearMotion.position[1] = 0;
                    linearMotion.position[2] = 0;
                    linearMotion.tool_axis[0] = 0;
                    linearMotion.tool_axis[1] = 1;
                    linearMotion.tool_axis[2] = 1;
                    Ufs.Path.CreateLinearMotion(pathPtr, ref linearMotion);
    
                    Ufs.Path.EndToolPath(pathPtr);
    
                }
                return 0;
            }
    
            // ************************************************************************************
    
            public static int GetUnloadOption(string arg)
            {
                return System.Convert.ToInt32(Session.LibraryUnloadOption.Immediately);
            }
        }
    }
    C#源码
    '=============================================================================
    '
    '                    Copyright (c) 2009 Siemens PLM Software 
    '                    Unpublished - All rights reserved
    '
    '===============================================================================
    ' 
    '=============================================================================
    'File description: Sample NX/Open Application
    '
    'This is basic example of how to write a UDOP entry in CS
    'To use this after you build the dll as cs_udop.dll
    '1) Put the dll in a folder - for example c:my_udops
    '2) Create an system environment variable MYCORP_UDOP_2 and set it to
    '   c:my_udopscs_udop.dll
    '3) Now in NX CAM create a MILL_USER and in the UI enter MYCORP_UDOP_2
    '   for the "CAM API Exit Name in the user interface
    '   press either "User Parameters" or "Generate" to see the results
    '
    '===============================================================================
    '
    
    
    Imports System.Collections
    Imports System.Collections.Generic
    Imports System.IO
    Imports System.Globalization
    Imports NXOpen
    Imports NXOpen.UF
    Imports NXOpen.UIStyler
    
    Namespace test1
        Public Class Class1
    
            '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            '       SESSION ATTRIBUTES
            '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            ' Native .NET Session
            Friend Shared Nts As NXOpen.Session = Session.GetSession()
            ' User Function Session
            Friend Shared Ufs As NXOpen.UF.UFSession = UFSession.GetUFSession()
            ' Native UI Session
            Friend Shared Uis As NXOpen.UI = UI.GetUI()
            ' Native CAM Session
            Friend Shared Cams As NXOpen.CAM.CAMSession = Nts.CAMSession
            ' Native Remote Utilities Session
            Friend Shared Rus As NXOpen.RemoteUtilities = RemoteUtilities.GetRemoteUtilities()
    
    
            '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            '       SESSION OBJECT ATTRIBUTES
            '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            ' Native Listing Window
            Friend Shared LW As NXOpen.ListingWindow = Nts.ListingWindow
            ' Native Message Box
            Friend Shared MBox As NXOpen.NXMessageBox = Uis.NXMessageBox
            ' WorkPart
            Friend Shared WorkPart As NXOpen.Part = Nts.Parts.Work
    
            ' ************************************************************************************
    
            Public Shared Sub Main()
    
            End Sub
    
            Public Shared Function udop(inString As String) As Integer
                Dim udopPtr As IntPtr = IntPtr.Zero
                Dim operPtr As IntPtr = IntPtr.Zero
                Dim purpose As UFUdop.Purpose
                Dim operName As String = String.Empty
                Dim pathPtr As IntPtr = IntPtr.Zero
    
                Ufs.Udop.AskUdop(IntPtr.Zero, udopPtr)
                Ufs.Udop.AskOper(udopPtr, operPtr)
                Ufs.Udop.AskPurpose(udopPtr, purpose)
                Ufs.Oper.AskName(operPtr, operName)
                Ufs.Oper.AskPath(operPtr, pathPtr)
    
                If purpose = UFUdop.Purpose.UserParams Then
                    MBox.Show("User Params", NXMessageBox.DialogType.Information, "User Params")
                End If
    
                If purpose = UFUdop.Purpose.Generate Then
                    Ufs.Path.InitToolPath(pathPtr)
    
                    Dim linearMotion As UFPath.LinearMotion
                    linearMotion.feed_value = 0
                    linearMotion.type = UFPath.MotionType.MotionTypeCut
                    linearMotion.feed_unit = UFPath.FeedUnit.FeedUnitNone
                    Dim pos As Double() = {0, 0, 0}
                    linearMotion.position = pos
                    Dim tAxis As Double() = {0, 0, 1}
                    linearMotion.tool_axis = tAxis
                    Ufs.Path.CreateLinearMotion(pathPtr, linearMotion)
    
                    linearMotion.position(0) = 0
                    linearMotion.position(1) = 0.707
                    linearMotion.position(2) = 0.707
                    linearMotion.tool_axis(0) = 0
                    linearMotion.tool_axis(1) = 1
                    linearMotion.tool_axis(2) = 0
                    Ufs.Path.CreateLinearMotion(pathPtr, linearMotion)
    
                    linearMotion.position(0) = 1
                    linearMotion.position(1) = 0
                    linearMotion.position(2) = 0
                    linearMotion.tool_axis(0) = 0
                    linearMotion.tool_axis(1) = 1
                    linearMotion.tool_axis(2) = 1
                    Ufs.Path.CreateLinearMotion(pathPtr, linearMotion)
    
    
                    Ufs.Path.EndToolPath(pathPtr)
                End If
                Return 0
            End Function
    
            ' ************************************************************************************
    
            Public Shared Function GetUnloadOption(arg As String) As Integer
                Return System.Convert.ToInt32(Session.LibraryUnloadOption.Immediately)
            End Function
        End Class
    End Namespace
    VB.NET源码

    原文地址:http://www.cnblogs.com/bizca/p/4667874.html 

  • 相关阅读:
    unitTest单元测试框架
    Day06_页面发布与课程管理
    Day05_RabbitMQ研究
    Day04_页面静态化
    Day04_freemarker
    Day03_CMS页面管理开发
    Java概述练习题
    01_语言概述
    00_编程入门
    德道经
  • 原文地址:https://www.cnblogs.com/bizca/p/4667874.html
Copyright © 2011-2022 走看看