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_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开发 刀路生成的更多相关文章
- 基于CkEditor实现.net在线开发之路(7)列表页面开发动作介绍
一个列表页面不止是查询,它也包含了很多业务上功能的实现,这些业务功能的实现的逻辑我称之为动作.如触发单击按钮删除数据,更改业务表数据,调用webService,调用WCF接口,弹出新窗体新增.修改.查 ...
- 饿了么基于Vue2.0的通用组件开发之路(分享会记录)
Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库.今天我们要分享的就是开发 Element 的一些心得. 官网 ...
- 基于CkEditor实现.net在线开发之路(1)
我以前的公司使用office sharepoint designer为界面设计器,嵌套各种自定义控件,进行各种管理软件,工作流的开发,遇到比较复杂的逻辑,则采用本地写类库,生成DLL上传到服务器,通过 ...
- Android流媒体开发之路二:NDK开发Android端RTMP直播推流程序
NDK开发Android端RTMP直播推流程序 经过一番折腾,成功把RTMP直播推流代码,通过NDK交叉编译的方式,移植到了Android下,从而实现了Android端采集摄像头和麦克缝数据,然后进行 ...
- 喵的Unity游戏开发之路 - 玩家控制下的球的滑动
- 喵的Unity游戏开发之路 - 游泳
原文: https://mp.weixin.qq.com/s/-ERFNB1GRZ6UAkHOhP9UQw 很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀 ...
- 喵的Unity游戏开发之路 - 多场景:场景加载
如果丢失格式.图片或视频,请查看原文:https://mp.weixin.qq.com/s/RDVMg6l41uc2IHBsscc0cQ 很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始 ...
- [敏杰开发]知识路书——图形化文献管理大师 Beta版发布喽!!!
[敏杰开发]知识路书--图形化文献管理大师 Beta版发布喽!!! 一.总览 项目名称:知识路书 发布形式:网页应用 发布地址:http://roadmap.imcoming.top 二.运行环境与使 ...
- WEB开发之路——基础部分
WEB开发之路 受BBC的<BBC: Brain Story>和<BBC: The Brain - A Secret History>的影响,我一直有志于探究人类大脑,2015 ...
随机推荐
- linux centos7 read 命令
2021-08-24 1. 命令简介 read 命令就是读取控制台输入,会将从键盘输入的数据分割成一个个字段依次存储在 parameter[0] .parameter[1] ......,若是没有指定 ...
- Windows下安装Apollo时的几个常见问题
今天在本地安装Apollo时遇到几个问题,觉得还是记录下来,希望能给有需要的朋友提供帮助. 安装的过程参考这篇教程,https://www.jianshu.com/p/6cf4b15ba82f.流程基 ...
- Python - 面向对象编程 - 小实战(2)
需求 小明和小美都爱跑步 小明体重 75 公斤 小美体重 45 公斤 每次跑步会减肥 0.5 公斤 每次吃东西体重增加 1 公斤 需求分析 小明.小美都是一个具体的对象,他们都是人,所以应该抽象成人类 ...
- VUE002. 动态使用webpack打包处理后的静态图片路径({ img: require('xxx.png') })
案例摘要 需求是通过v-for循环渲染数组中数据,其中包括本地包的图片文件.话不多说直接上代码: <a-radio-group class="template-radio"& ...
- [CVE-2020-1956] Apache Kylin远程命令执行漏洞复现
Apache Kylin是一个开源的.分布式的分析型数据仓库,提供Hadoop/Spark之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay 开发并贡献至开源社区. ...
- IIS中配置WCF站点
http://msdn.microsoft.com/zh-cn/library/aa751852.aspx http://blog.csdn.net/hsg77/article/details/389 ...
- POJ2251——Dungeon Master(三维BFS)
和迷宫问题区别不大,相比于POJ1321的棋盘问题,这里的BFS是三维的,即从4个方向变为6个方向. 用上队列的进出操作较为轻松. #include<iostream> #include& ...
- 【OI技巧】解决cin、cout因输入输出慢而TLE的问题
语言本身没有问题!! 语言本身没有问题!! 语言本身没有问题!! C++本来的设计就是将输入输出流和C的标准输入输出挂钩在一起,这样就导致cin,cout输入输出前先要将内容放入缓冲区,最后再由cin ...
- 【PHP数据结构】图的存储结构
图的概念介绍得差不多了,大家可以消化消化再继续学习后面的内容.如果没有什么问题的话,我们就继续学习接下来的内容.当然,这还不是最麻烦的地方,因为今天我们只是介绍图的存储结构而已. 图的顺序存储结构:邻 ...
- php curl发送数据和文件
function mycurl($file, $url, $aid) { // 如果文件名是中文名,将中文字符编码转换一下 $file=iconv("UTF-8","gb ...