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_udops2) Create an system environment variable MYCORP_UDOP_2 and set it to
   c:\my_udops\cs_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_udops\cs_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

时间: 2024-10-03 12:38:26

NX开发 刀路生成的相关文章

“平面铣”生成“清理拐角”刀路

对“平面铣”工序的参数进行修改,可生成“清理拐角”刀路.

小强的HTML5移动开发之路(53)——jQueryMobile页面间参数传递

在单页模版中使用基于HTTP的方式通过POST和GET请求传递参数,而在多页模版中不需要与服务器进行通信,通常在多页模版中有以下三种方法来实现页面间的参数传递. 1.GET方式:在前一个页面生成参数并传入下一个页面,然后在下一个页面中进行GET内容解析. 2.通过HTML5的Web Storage进行参数传递. 3.建立当前页面变量,在前一个页面将所需传递的参数内容赋值到变量中,在后一个页面从变量中将参数取出来.(程序灵活性较弱) 一.以GET方式实现页面间参数传递 <!DOCTYPE html

HTML5移动开发之路(53)——jQueryMobile页面间参数传递

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:HTML5移动开发之路(53)--jQueryMobile页面间参数传递 在单页模版中使用基于HTTP的方式通过POST和GET请求传递参数,而在多页模版中不需要与服务器进行通信,通常在多页模版中有以下三种方法来实现页面间的参数传递. 1.GET方式:在前一个页面生成参数并传入下一个页面,然后在下一个页面中进行GET内容解析. 2.通过HTML5的Web Storage进行参数传递. 3.建立当前页面变量,在前一个页面将所需传递的

HTML5移动开发之路(23)—— jQuery Mobile入门

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:HTML5移动开发之路(23)-- jQuery Mobile入门 一.下载jQuery Mobile 下载地址:http://jquerymobile.com/ 点击Download 下载如下zip包 下载成功后如下图 解压目录如图: 点击index.html进入demo主页,这里面有很多例子. 二.创建JQuery Mobile的Helloword 1.创建demo 2.新建站点 3.站点建立成功后将生成的demo拷贝到站点中

饿了么基于Vue2.0的通用组件开发之路(分享会记录)

Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库.今天我们要分享的就是开发 Element 的一些心得. 官网:http://element.eleme.io/#/github:https://github.com/ElemeFE/element ## 设计目的 大部分项目起源都是源于业务方的需求,Element 也是一样.随着公司业务发展,内部开始衍生出很多后台系统,UED 部门也接到越来越多的设计需求,

驱动开发之路——1.1

一.什么是模块:      模块(module)是在内核空间运行的程序,实际上是一种目标对象文件,没有链接,不能独立运行,但是可以装载到系统中作为内核的一部分运行,从而可以动态扩充内核的功能.模块最主要的用处就是用来实现设备驱动程序. 使用模块的优点: 1,将来修改内核时,不必全部重新编译整个内核,可节省不少时间 2,系统中如果需要使用新模块,不必重新编译内核,只要插入相应的模块即可. 静态编译,把所需要的功能都编译到linux内核,会导致生成的内核会很大,如果我们要在现有的内核中新增或删除功能

测试开发之路--一个小小工程师的回首

关于背景 学生时代 高中:精力都放在魔兽3冰封王座上了,种族UD,全校第一.各个班级和周边网吧都挑战遍了.结果当然是不学无术的我高考失利,上了三流大学. 大一:因为酷爱电脑游戏报了计算机系.大一期间同样不思进取,打了一年的魔兽世界,60年代,全服第三工会中第一DPS. 大二:这一年幡然悔悟,痛定思痛,洗心革面,痛改前非,重新做人.花了一年时间把英语4级过了(底子太差...花了这么久). 大三:这一年学java,学校跟一个培训机构合作在学校办班.我跟一帮同学报名并组了个项目组,接接活,日子挺愉快.

HTML5移动开发之路(26)—— JavaScript回顾1

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:HTML5移动开发之路(26)-- JavaScript回顾1 很久没有怎么用过JavaScript了,感觉有点生疏,最近在看关于HTML5移动开发方面的资料,有一种直觉告诉我,JavaScript昨天.今天很重要,明天会更重要.现在好多基于JavaScript的框架给我们的开发带来了很大便利,但是要更好的使用这些工具,我们就必须对JavaScript有一个更高的认识,翻开以前的笔记,开始复习吧. 一.JavaScript的作用

基于CkEditor实现.net在线开发之路(1)

我以前的公司使用office sharepoint designer为界面设计器,嵌套各种自定义控件,进行各种管理软件,工作流的开发,遇到比较复杂的逻辑,则采用本地写类库,生成DLL上传到服务器,通过配置动态反射调用,从而能够快速实现各种功能,这种思路真的很不错,开发速度真的很快,几百万的项目一个月就开发完成了.从这个公司出来我就开始琢磨开发一个类似的平台,在偶然的一次看到FreeFrom在线智能表单设计,真的很不错,让我怦然心动,要是能开发一个WEB在线开发的平台,那就更完美了. 于是我开始分