NX secondary development UF_MTX4_vec_multiply function introduction

Article author: Caspian
Source website:https://blog.csdn.net/WangPaiFeiXingYuan

UF_MTX4_vec_multiply

Defined in: uf_mtx.h 
void UF_MTX4_vec_multiply(const double vec [ 4 ] , const double mtx [ 16 ] , double vec_product [ 4 ] )

overview overview

Returns a 4D vector which is the product of a 4D vector and a 4x4
matrix.

Returns a 4D vector which is a 4D vector and the product of a 4x4 matrix.

UFUN example

Welcome to subscribe to "3000 Cases of Caspian NX Secondary Development Column"https://blog.csdn.net/wangpaifeixingyuan/category_8840986.html , click the link to scan the code to subscribe (continuously updated). Hundreds of people have subscribed. The subscription is permanent and can be read indefinitely. If you need help, please send a private message.

parameters parameters

const double thing [ 4 ] Input Vector to multiply
direction method
const double mtx [ 16 ] Input Matrix to multiply
Matrix multiplication
double vec_product [ 4 ] Output Product (a vector) vec_product = vec X mtx
乘积(向量) vec _ Product = vec X mtx

Split

Application and comprehensive analysis of C++ language in UG secondary development

  1. C++ is an extension of the C language. It can perform procedural programming of the C language, object-based design characterized by abstract data types, and object-oriented programming. C++ is highly adaptable to the scale of problems it handles.
  2. C++ not only has the practical characteristics of efficient computer operation, but is also committed to improving the programming quality of large-scale programs and the problem description capabilities of programming languages.

In the secondary development of UG, C++ language has the following characteristics

  1. The C++ language supports multiple programming styles
  2. Many features of C++ exist in the form of libraries, ensuring the simplicity of the language and the efficiency of development and operation.
  3. Compared with C language, C++ introduces the concept of object-oriented, making the human-computer interaction interface developed by UG more concise.
  4. By using the more than 2,000 API functions that come with UG, combined with the high-level language C++ and the programming software Visual Studio, UG can be secondary developed.
  5. It should be noted that there are many versions of Visual Studio and UG on the market, and not all versions are compatible.

The programming process usually includes the following steps:

  1. Problem analysis: Conduct an in-depth analysis of the problem to be solved and understand the specific needs and limitations of the problem.
  2. Requirements definition: Clarify the goals and functions of the program, including user needs, system requirements, etc.
  3. Design: Design according to needs, including algorithm design, data structure design, interface design, etc.
  4. Coding: Based on the design results, use a programming language to implement the program code.
  5. Testing: Ensure the correctness of the program through various testing methods, including unit testing, integration testing, system testing, etc.
  6. Maintenance: Modifying and improving the program to solve possible problems or meet new needs.
  7. Document writing: Write program documentation to describe the program's functions, operating methods, precautions, etc.

The following is an example of secondary development to create voxel features (blocks, cylinders, cones, spheres)

#include <stdio.h>
#include <stdarg.h>
#include <uf_modl_primitives.h>
#include <uf_ui_ugopen.h>
#include <uf.h>
#include <uf_defs.h>
//封装打印函数,用于将信息打印到信息窗口
//QQ3123197280
int ECHO(const char* szFormat, ...)
{
    
    
	char szMsg[5000] = "";
	va_list arg_ptr;
	va_start(arg_ptr, szFormat);
	vsprintf_s(szMsg, szFormat, arg_ptr);
	va_end(arg_ptr);
	UF_UI_open_listing_window();
	
	UF_UI_write_listing_window(szMsg);
	return 0;
}
extern DllExport void ufusr(char* param, int* returnCode, int rlen)
{
    
    
	UF_initialize();
	//创建块
	UF_FEATURE_SIGN sign = UF_NULLSIGN;
	//块起点相对于ABS
	double block_orig[3] = {
    
     0.0,0.0,0.0 };
	//方向相对于WCS
	char* block_len[3] = {
    
     "10", "30", "10" };
	tag_t blk_obj;//体特征
	UF_MODL_create_block1(sign, block_orig, block_len, &blk_obj);
	int iEdit = 0;  
	char* size[3];
	UF_MODL_ask_block_parms(blk_obj, iEdit, size);
	ECHO("%s,%s,%s\n", size[0], size[1], size[2]);//输出: p6=10,p7=30,p8=10
	//创建圆柱
	UF_FEATURE_SIGN sign1 = UF_NULLSIGN;
	double origin[3] = {
    
     10.0,0.0,10.0 };
	char  height[] = "20";
	char  diam[] = "10";
	double direction[3] = {
    
     0,0,1 };//方向
	tag_t  cyl_obj_id;
	UF_MODL_create_cyl1(sign1, origin, height, diam, direction, &cyl_obj_id);
	int iEdit2 = 0;  
	char* cDiameter;
	char* cHeight;
	UF_MODL_ask_cylinder_parms(cyl_obj_id, iEdit2, &cDiameter, &cHeight);
	ECHO("%s,%s\n", cDiameter, cHeight);//输出:p9=10,p10=20
	UF_free(cDiameter);
	UF_free(cHeight);
	//创建圆锥
	UF_FEATURE_SIGN sign2 = UF_NULLSIGN;
	double origin2[3] = {
    
     0.0,0.0,10.0 };
	char  height2[] = "20";
	char* diam2[2] = {
    
     "10" ,"5" };
	double direction2[3] = {
    
     0,0,1 };//方向
	tag_t  cone_obj_id;
	UF_MODL_create_cone1(sign2, origin2, height2, diam2, direction2, &cone_obj_id);
	int iEdit3 = 0;  
	char* cD1;
	char* cD2;
	char* cH;
	char* cAngle;
	UF_MODL_ask_cone_parms(cone_obj_id, iEdit3, &cD1, &cD2, &cH, &cAngle);
	ECHO("%s,%s,%s,%s\n", cD1, cD2, cH, cAngle);//输出:p11=10,p12=5,p13=20,p14=7.1250163489018
	UF_free(cD1);
	UF_free(cD2);
	UF_free(cH);
	UF_free(cAngle);
	//创建球
	UF_FEATURE_SIGN sign3 = UF_NULLSIGN;
	double douCenter2[3] = {
    
     0.0,0.0,30.0 };
	char  cDiam[] = "8";
	tag_t  sphere_obj_id;
	UF_MODL_create_sphere1(sign3, douCenter2, cDiam, &sphere_obj_id);
	int iEdit4 = 0;  
	char* cDiam_parm;
	UF_MODL_ask_sphere_parms(sphere_obj_id, iEdit4, &cDiam_parm);
	ECHO("%s\n", cDiam_parm);//输出:p15=8
	UF_free(cDiam_parm);
	UF_terminate();
}
extern int ufusr_ask_unload(void)
{
    
    
	return (UF_UNLOAD_IMMEDIATELY);
}

Effect:
Effect

Guess you like

Origin blog.csdn.net/WangPaiFeiXingYuan/article/details/134939251