此段是可以生成程序的完整代码,只有从坐标(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_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

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

  1. 基于CkEditor实现.net在线开发之路(7)列表页面开发动作介绍

    一个列表页面不止是查询,它也包含了很多业务上功能的实现,这些业务功能的实现的逻辑我称之为动作.如触发单击按钮删除数据,更改业务表数据,调用webService,调用WCF接口,弹出新窗体新增.修改.查 ...

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

    Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库.今天我们要分享的就是开发 Element 的一些心得. 官网 ...

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

    我以前的公司使用office sharepoint designer为界面设计器,嵌套各种自定义控件,进行各种管理软件,工作流的开发,遇到比较复杂的逻辑,则采用本地写类库,生成DLL上传到服务器,通过 ...

  4. Android流媒体开发之路二:NDK开发Android端RTMP直播推流程序

    NDK开发Android端RTMP直播推流程序 经过一番折腾,成功把RTMP直播推流代码,通过NDK交叉编译的方式,移植到了Android下,从而实现了Android端采集摄像头和麦克缝数据,然后进行 ...

  5. 喵的Unity游戏开发之路 - 玩家控制下的球的滑动

  6. 喵的Unity游戏开发之路 - 游泳

    原文: https://mp.weixin.qq.com/s/-ERFNB1GRZ6UAkHOhP9UQw 很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀 ...

  7. 喵的Unity游戏开发之路 - 多场景:场景加载

    如果丢失格式.图片或视频,请查看原文:https://mp.weixin.qq.com/s/RDVMg6l41uc2IHBsscc0cQ 很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始 ...

  8. [敏杰开发]知识路书——图形化文献管理大师 Beta版发布喽!!!

    [敏杰开发]知识路书--图形化文献管理大师 Beta版发布喽!!! 一.总览 项目名称:知识路书 发布形式:网页应用 发布地址:http://roadmap.imcoming.top 二.运行环境与使 ...

  9. WEB开发之路——基础部分

    WEB开发之路 受BBC的<BBC: Brain Story>和<BBC: The Brain - A Secret History>的影响,我一直有志于探究人类大脑,2015 ...

随机推荐

  1. 786. 第k个数

    题目传送门 一.理解感悟 1.这是快速排序模板的练习题. 2.不一样的地方在于它可以利用快排模板,但却不需要真的把所有数据排序完成,每次一分为二后,只关心自己所有的那一半,就是可以节约一半的递归. 3 ...

  2. centos7环境变量配置错误以至于命令不可使用

    2021-07-16 问题: centos7在配置环境变量的时候少打了$,导致很多命令不能使用 解决方法: 在命令行输入: export PATH=/usr/local/sbin:/usr/local ...

  3. Blazor 组件库开发指南

    翻译自 Waqas Anwar 2021年5月21日的文章 <A Developer's Guide To Blazor Component Libraries> [1] Blazor 的 ...

  4. Vs code自动生成Doxygen格式注释

    前言 ​ 程序中注释的规范和统一性的重要性不言而喻,本文就推荐一种在用vscode编写代码时自动化生成标准化注释格式的方法,关于Doxygen规范及其使用可查看博文 代码注释规范之Doxygen. ​ ...

  5. Golang入门学习(四):常用的函数汇总

    文章目录 2.4 常用的内置函数 2.4.1 字符串常用内置函数 2.4.2 常用的时间和日期相关函数 2.4.3 内置函数 2.4 常用的内置函数 2.4.1 字符串常用内置函数 https://g ...

  6. 模拟BS服务器

    一.模拟BS服务器分析 二.BS模拟服务器代码实现 图片都是单独请求,后台单独线程,这边是通过构造方法传入的Runable接口的实现类匿名对象创建线程: 创建本地输入流读取到网络输出流传过来的信息再放 ...

  7. Nacos注册中心之概要设计

    本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star. 前言 在之前的文章中分析了Nacos配置中心,配置中心的核心是配置的创建.读取.推送. 注册中 ...

  8. Ebiten-纯Golang开发的跨平台游戏引擎

    Go语言不是让你玩的啊喂! 昨天跟好基友聊开发的事,他说他等着闲下来的时候就用PYGame写个像那个最近挺火的"文X游X"一样的游戏.(没收广告费啊!) 基友突然嘲笑我:" ...

  9. 批大小、mini-batch、epoch的含义

    每次只选取1个样本,然后根据运行结果调整参数,这就是著名的随机梯度下降(SGD),而且可称为批大小(batch size)为 1 的 SGD. 批大小,就是每次调整参数前所选取的样本(称为mini-b ...

  10. python循环以及控制语句

    python流程 学习完本篇,你将会通过python完成以下题目 试利用break语句求解2-100之间的素数. (1)素数是指除了能被1和它本身整除外,不能被其它数所整除的数.判断一个自然数是否是素 ...