NX二次开发--以圆标识选中的箭头

加工方向选择
加工方向选择时以圆标识其选择的方向箭头

这个是在UG二次开发CAM模块中需要用到的功能,根据驱动曲面的uv参数,生成8个临时的箭头以表示加工方向,以圆标识选中的箭头。

                        //根据曲面的uv参数,设置8个方向

                        double[] point1 = new double[3];
                        double[] u11 = new double[3];
                        double[] v11 = new double[3];
                        double[] u21 = new double[3];
                        double[] v21 = new double[3];
                        double[] unitNorm = new double[3];
                        double[] radii = new double[2];
                        double[] paramters = new double[2] { 0.05, 0.05 };
                        uFModl.AskFaceProps(driverSurface.Tag, paramters, point1, u11, v11, u21, v21, unitNorm, radii);
                        uFDisp.LabeledConehead(UFConstants.UF_DISP_ALL_ACTIVE_VIEWS, point1, u11, 0, "1");
                        uFDisp.LabeledConehead(UFConstants.UF_DISP_ALL_ACTIVE_VIEWS, point1, v11, 0, "2");

                        double[] point2 = new double[3];
                        double[] u12 = new double[3];
                        double[] v12 = new double[3];
                        double[] u22 = new double[3];
                        double[] v22 = new double[3];
                        paramters = new double[2] { 0.05, 0.95 };
                        uFModl.AskFaceProps(driverSurface.Tag, paramters, point2, u12, v12, u22, v22, unitNorm, radii);

                        v12 = new double[3] { -1.0 * v12[0], -1.0 * v12[1], -1.0 * v12[2] };

                        uFDisp.LabeledConehead(UFConstants.UF_DISP_ALL_ACTIVE_VIEWS, point2, v12, 0, "3");
                        uFDisp.LabeledConehead(UFConstants.UF_DISP_ALL_ACTIVE_VIEWS, point2, u12, 0, "4");

                        double[] point3 = new double[3];
                        double[] u13 = new double[3];
                        double[] v13 = new double[3];
                        double[] u23 = new double[3];
                        double[] v23 = new double[3];

                        paramters = new double[2] { 0.95, 0.95 };
                        uFModl.AskFaceProps(driverSurface.Tag, paramters, point3, u13, v13, u23, v23, unitNorm, radii);

                        u13 = new double[3] { -1.0 * u13[0], -1.0 * u13[1], -1.0 * u13[2] };
                        v13 = new double[3] { -1.0 * v13[0], -1.0 * v13[1], -1.0 * v13[2] };

                        uFDisp.LabeledConehead(UFConstants.UF_DISP_ALL_ACTIVE_VIEWS, point3, u13, 0, "5");
                        uFDisp.LabeledConehead(UFConstants.UF_DISP_ALL_ACTIVE_VIEWS, point3, v13, 0, "6");

                        double[] point4 = new double[3];
                        double[] u14 = new double[3];
                        double[] v14 = new double[3];
                        double[] u24 = new double[3];
                        double[] v24 = new double[3];

                        paramters = new double[2] { 0.95, 0.05 };
                        uFModl.AskFaceProps(driverSurface.Tag, paramters, point4, u14, v14, u24, v24, unitNorm, radii);
                        u14 = new double[3] { -1.0 * u14[0], -1.0 * u14[1], -1.0 * u14[2] };
                        uFDisp.LabeledConehead(UFConstants.UF_DISP_ALL_ACTIVE_VIEWS, point4, v14, 0, "7");
                        uFDisp.LabeledConehead(UFConstants.UF_DISP_ALL_ACTIVE_VIEWS, point4, u14, 0, "8");

                        //选择加工方向
                        string message = "选择加工方向";
                        int num = 8;
                        double[] origins = new double[24] { point1[0],point1[1],point1[2], point1[0], point1[1], point1[2] ,
                        point2[0],point2[1],point2[2],  point2[0],point2[1],point2[2],
                        point3[0],point3[1],point3[2], point3[0],point3[1],point3[2],
                        point4[0],point4[1],point4[2], point4[0],point4[1],point4[2]};



                        double[] directions = new double[24] {u11[0],u11[1],u11[2], v11[0], v11[1], v11[2] ,
                        v12[0],v12[1],v12[2], u12[0], u12[1], u12[2],
                        u13[0],u13[1],u13[2], v13[0], v13[1], v13[2] ,
                        v14[0],v14[1],v14[2], u14[0], u14[1], u14[2]};
                        string[] labels = new string[8] { "1", "2", "3", "4", "5", "6", "7", "8" };
                        UFDisp.ConeheadAttrbSTag[] attributes = new UFDisp.ConeheadAttrbSTag[8];

                        for (int i = 0; i < 8; i++)
                        {
                            attributes[i].cone_radius = 0.075;
                            attributes[i].total_length = 1.0;
                            attributes[i].staff_length = 1.0;
                            attributes[i].color = 0;
                            attributes[i].font = 1;
                            attributes[i].density = 1;
                        }
                        double selection_point = 0.5;
                        int display_coneheads = UFConstants.UF_UI_DISP_SELECTED;

                        int response;

                        int cuttingDirectionNew = 0;

                        theUFUi.SelectConehead(message, num, origins, directions, labels, attributes, selection_point, display_coneheads, out cuttingDirectionNew, out response);

                        if(cuttingDirectionNew>=1&cuttingDirectionNew<=8)
                        {
                            cuttingDirection = cuttingDirectionNew;
                        }

其主要的函数是UFUI.SelectConehead()。

double []origion = new double[24],指的是8个方向的点数据,{x1,y1,z1,x2,y2,z2,x3,y3,z3...};

double []direction = new double[24],指的是8个方向的矢量数据.

string []lables  = new string[8],指的是8个方向箭头上的标识

UFDisp.ConeheadAttrbSTag[] attributes = new UFDisp.ConeheadAttrbSTag[8]; 是8个箭头的属性,可以设置相同的,也可以设置成不一样的。

最终的输出是选中的方向索引值

如果用C++,即UG OPEN,其代码如下:

tMachArea = tag_MachObject;
		double point1[3];
		double u11[3];
		double v11[3];
		double u21[3];
		double v21[3];
		param[1]=param[0]=0.05;
		UF_MODL_ask_face_props(tMachArea, param, point1, u11, v11, u21, v21, unit_norm, radii);
		UF_DISP_labeled_conehead(UF_DISP_ALL_ACTIVE_VIEWS, point1, u11, 0, "1");
		UF_DISP_labeled_conehead(UF_DISP_ALL_ACTIVE_VIEWS, point1, v11, 0, "2");
		

		double point2[3];
		double u12[3];
		double v12[3];
		double u22[3];
		double v22[3];

		param[0]=0.05;	param[1]=0.95;
		UF_MODL_ask_face_props(tMachArea, param, point2, u12, v12, u22, v22, unit_norm, radii);
		v12[0]=-v12[0];		v12[1]=-v12[1];		v12[2]=-v12[2];
		UF_DISP_labeled_conehead(UF_DISP_ALL_ACTIVE_VIEWS, point2, v12, 0, "3");
		UF_DISP_labeled_conehead(UF_DISP_ALL_ACTIVE_VIEWS, point2, u12, 0, "4");


		double point3[3];
		double u13[3];
		double v13[3];
		double u23[3];
		double v23[3];
		
		param[0]=0.95;	param[1]=0.95;
		UF_MODL_ask_face_props(tMachArea, param, point3, u13, v13, u23, v23, unit_norm, radii);
		u13[0]=-u13[0];	u13[1]=-u13[1];	u13[2]=-u13[2];
		v13[0]=-v13[0];	v13[1]=-v13[1];	v13[2]=-v13[2];
		UF_DISP_labeled_conehead(UF_DISP_ALL_ACTIVE_VIEWS, point3, u13, 0, "5");
		UF_DISP_labeled_conehead(UF_DISP_ALL_ACTIVE_VIEWS, point3, v13, 0, "6");

		double point4[3];
		double u14[3];
		double v14[3];
		double u24[3];
		double v24[3];
		
		param[0]=0.95;	param[1]=0.05;
		UF_MODL_ask_face_props(tMachArea, param, point4, u14, v14, u24, v24, unit_norm, radii);
		u14[0]=-u14[0];	u14[1]=-u14[1];	u14[2]=-u14[2];
		UF_DISP_labeled_conehead(UF_DISP_ALL_ACTIVE_VIEWS, point4, v14, 0, "7");
		UF_DISP_labeled_conehead(UF_DISP_ALL_ACTIVE_VIEWS, point4, u14, 0, "8");
		
		char message[] = "选择加工方向";
		int num = 8;

		double origins[24] = {point1[0],point1[1],point1[2],point1[0],point1[1],point1[2],
											point2[0],point2[1],point2[2],point2[0],point2[1],point2[2],
											point3[0],point3[1],point3[2],point3[0],point3[1],point3[2],
											point4[0],point4[1],point4[2],point4[0],point4[1],point4[2]};


		double directions[24] = {u11[0],u11[1],u11[2],v11[0],v11[1],v11[2],
											v12[0],v12[1],v12[2],u12[0],u12[1],u12[2],
											u13[0],u13[1],u13[2],v13[0],v13[1],v13[2],
											v14[0],v14[1],v14[2],u14[0],u14[1],u14[2]};


		char *st[8] =  {"1","2","3","4","5","6","7","8"};

		char **labels = st;
		
	
	    UF_DISP_conehead_attrb_s_tag attributes[8] ;

		for (int i=0;i<8;i++)
		{
			attributes[i].density = 1;
			attributes[i].color = 0;
			attributes[i].cone_radius = 0.075;
			attributes[i].total_length = 1.0;
			attributes[i].font = 1;
			attributes[i].staff_length = 0.6;
		}	


		double selectPoint = 0.5;

		int display_coneheads = UF_UI_DISP_SELECTED;

		int response;

		int cuttingDirectionNew = 0;

		UF_UI_select_conehead(message,num,origins,directions,labels,attributes,selectPoint,display_coneheads,&cuttingDirectionNew,&response);



		if (cuttingDirectionNew>0&&cuttingDirectionNew<9)
		{
				in_MachDirection = cuttingDirectionNew;
		}
	

猜你喜欢

转载自blog.csdn.net/yang19861007/article/details/108593744
今日推荐