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 ...
随机推荐
- Jenkins拉取Git远程仓库中指定目录至本地指定目录
Jenkins拉取源码是非常实用的操作,比如每天在跑自动化测试前,拉取Git远程仓库中最新的脚本至本地.那么,Jenkins如何拉取Git远程仓库中指定目录至本地指定目录呢?下面来看看具体的设置方法. ...
- 启动线程组报错:Error occurred starting thread group :test_1, error message:Invalid duration 0 set in Thread Group:test_1, see log file for more details
线程组基础信息都已经配置好,启动时报错,如下图: 排查原因:勾选了线程组调度器,并未设置参数 解决方案:取消勾选或者设置参数
- Django项目从创建到运行
环境: Windows Server 2008 R2 标准版 1.安装python运行环境(省略) 2.安装Django pip install Django==3.1.5 # 不写版本号也可以 3. ...
- error : Hooks can only be called inside of the body of a function component. 依赖包和主包加载多个react 引发冲突问题
1. 结论: 在依赖包和主包的node-modules中,同时install包含react , react-dom 或者react-redux时,跑测试或者启动的时候,显示如下error.当然出现这个 ...
- VSCode一些设置
//每次保存后自动格式化 "editor.formatOnSave": true, // #每次保存的时候将代码按eslint格式进行修复 "editor.codeAct ...
- outerHTML和outerText的赋值是异步的
用JavaScript操作DOM时,经常有生成复杂HTML结构的需求.此时,通常不是用标准DOM接口(如createElement().setAttribute().append()等)来语句式地生成 ...
- 配置IIS Express 允许外部访问
修改applicationhost.config 配置允许外部访问 操作步骤: 1. 查看本机IP地址记录IP地址,例如:10.1.20.138 2. 如下图,找到要发布的站点的名称 记录站点的名称, ...
- 批量ip段/子网转换
#coding=utf-8 import re import struct from sys import argv class CIDRHelper(object): def ipFormatChk ...
- PHP的bz2压缩扩展工具
在日常的开发和电脑使用中,我们经常会接触到压缩和解压的一些工具,PHP 也为我们准备了很多相关的操作扩展包,都有直接可用的函数能够方便的操作一些压缩解压功能.今天,我们先学习一个比较简单但不太常用的压 ...
- Java基础系列(27)- 什么是方法
何谓方法 System.out.println();它是什么呢 # System:类 # out:对象 # println():方法 Java方法是语句的集合,它们在一起执行一个功能 方法是解决一类问 ...