UGNX二次开发——截图功能
在NX中没有截图功能,为了方便加工工艺人员制定工艺是制作缩略图,本文介绍三种方法,也许会有第四种,参考【NX二次开发】视图对象截图。但是个人认为适合自己的才是最好。因为要制作一个案例,参考知网论文:一种自动输出数控程序清单的NX二次开发方法中用到该功能,因此提前进行实验功能是否可以使用。本人做过Creo二次开发,sw二次开法,NX二次开发,截至目前最感兴趣的是NX二次开发,作为新生真的有太多的无奈了,程序有太多的BUG了,能坚持到现在,其中要感谢各位博客博主,也要感谢王牌飞行员_里海,以及其他大佬,自学这个已经一年有余,每次遇到BUG是总会有人伸出援手,对此万分感谢。因此博主会分享给各位自己在学习中的一些问题以及解决方案。当然也有自己的小专题,有时需要一瓶饮料,内容可能不是那么完美,但是足够给新手提供思路。
第一种方法,使用单选函数进行截图。个人评价代码太多,哈哈哈,好像之高清截图。
//用户定义
#include <uf_ui.h>
#include <uf_part.h>
#include <uf_csys.h>
#include <uf_disp.h>
#include <uf_modl.h>
#include <uf_trns.h>
#include <uf_ui.h>
#include <uf_vec.h>
#include <uf_view.h>
#include <afx.h>//用户定义
// 获取输入体相对于NX视图的左上角与右下角坐标
static void GetTwoPoints(tag_t body, double leftT[3], double rightB[3])
{// 创建临时坐标系UF_initialize();double temp = 0.0;double csys[12] = { 0.0 };tag_t mtxId = NULL_TAG, csysId = NULL_TAG;uc6430("", &csys[0], &temp);uc6433("", &csys[3]);UF_CSYS_create_matrix(&csys[3], &mtxId);UF_CSYS_create_temp_csys(&csys[0], mtxId, &csysId);// 计算包围盒并求得左上角与右下角的坐标double min[3] = { 0.0 };double dists[3] = { 0.0 };double dirs[3][3] = { { 0.0 },{ 0.0 },{ 0.0 } };UF_MODL_ask_bounding_box_aligned(body, csysId, 0, min, dirs, dists);UF_VEC3_affine_comb(min, dists[1], &dirs[1][0], leftT);UF_VEC3_affine_comb(min, dists[0], &dirs[0][0], rightB);// 将绝对坐标系的点转换为NX视图坐标int status = 0;double matrix[12] = { 0.0 };double abs[9] = { 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0 };uf5940(abs, &csys[0], matrix, &status);uf5941(leftT, matrix);uf5941(rightB, matrix);UF_terminate();
}
// NX视图坐标转屏幕像素坐标
static bool GetScreenPt(double p1[3], double p2[3], POINT pts[2])
{UF_initialize();HWND nxHwnd = (HWND)UF_UI_get_default_parent();HWND drawZone = FindWindowEx(nxHwnd, NULL, L"NX