iCAx开思工具箱

标题: 关于设置图纸比例问题 [打印本页]

作者: my-scarecrow    时间: 2009-11-30 09:17
标题: 关于设置图纸比例问题
/*
The code in the following example modifies the scale of a drawing
member view.
*/
#include <stdio.h>
#include <uf.h>
#include <uf_defs.h>
#include <uf_draw.h>
#include <uf_draw_types.h>
#include <uf_modl.h>
#include <uf_obj.h>
#include <uf_view.h>
void ufusr(char *param, int *retcod, int param_len)
{
    char                drawing_name [MAX_ENTITY_NAME_SIZE] = "SHT1";
    char               * view_name [MAX_ENTITY_NAME_SIZE] ={"[email=EF@2]EF@2","ER@3[/email]"};
    char                error_message[MAX_LINE_SIZE + 1] = "";
    tag_t               view_tag = NULL_TAG;
    tag_t               drawing_tag = NULL_TAG;      // a1.这里的NULL_TAG 是什么意思?
    int                 ifail = 0;
tag_t               exp_tag = NULL_TAG;
double              scale;
    ifail = UF_initialize();
    if (!ifail)
    {
        /* Get the tag of drawing. */  
        ifail = UF_DRAW_ask_current_drawing (&drawing_tag);
    }
    if (!ifail)
    {
        /* Get the name of first drawing. */
        ifail = UF_OBJ_ask_name(drawing_tag, drawing_name);  //2.这里的意思是 获取该图纸的名称吗?
    }
    if (!ifail)
    {
        /* Get the name of the drawing's first view. */      //3.如果我想同时修改三个视图的比例,该怎么写?
        ifail = uc6499 (drawing_name, &view_name);
    }
    if (!ifail)
    {
        /* Get the view's tag. */
        ifail = UF_VIEW_ask_tag_of_view_name (&view_name,
&view_tag);
    }
  if (!ifail)
    {
       ifail =  UF_DRAW_ask_view_scale (view_tag, &exp_tag,&scale);
    }
    if (!ifail)
    {
        /* Set the parametric view scale. */
        ifail = UF_DRAW_set_view_scale (view_tag, 2);
    }
    printf ("UF_DRAW_set_view_scale sample ");
    if (ifail)
    {
        ifail = UF_get_fail_message( ifail, error_message );
        printf( "fails.\nError is: %s\n", error_message );
    }
    else
        printf( "is successful.\n" );
    UF_terminate();
}


作者: ffhi    时间: 2009-11-30 14:45
1#  
作者: ffhi    时间: 2009-11-30 14:47
1#  
从你的帖子来看,你可能对NX的开发是一点基础都没有,建议你找本基础的书的来看看,打点基础,不然就算大家解决了你的这三个问题,对你还是没有用的。
作者: my-scarecrow    时间: 2009-11-30 17:07
问题我已经解决了, 代码如下


//////////////////////////////////////////////////////////////////////////////
//
//  draw1.cpp
//
//  Description:
//      Contains Unigraphics entry points for the application.
//
//////////////////////////////////////////////////////////////////////////////

//  Include files
#include <uf.h>
#include <uf_exit.h>
#include <uf_ui.h>
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
#        include <strstream>
#   include <iostream>
        using std:strstream;
        using std::endl;       
        using std::ends;
        using std::cerr;
#else
#        include <strstream.h>
#   include <iostream.h>
#endif
#include "draw21.h"
#include <stdio.h>
#include <uf_defs.h>
#include <uf_draw.h>
#include <uf_draw_types.h>
#include <uf_modl.h>
#include <uf_obj.h>
#include <uf_view.h>

//----------------------------------------------------------------------------
//  Activation Methods
//----------------------------------------------------------------------------

//  Unigraphics Startup
//      This entry point activates the application at Unigraphics startup
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen )
{
    /* Initialize the API environment */
    int errorCode = UF_initialize();

    if ( 0 == errorCode )
    {
        /* TODO: Add your application code here */
        char                drawing_name [30] = "SHT1";
    char                view_name[30] = "ES@4";
        char                view_name2[30] = "MF@9";
        char                view_name3[30] = "MT@8";
    char                view_name4[30] = "R@7";
//        char                view_name5[30] = "T@5";
        char                view_name6[30] = " F@6";
    char                error_message[30] = "";
    tag_t               view_tag;
        tag_t               view_tag2 ;
        tag_t               view_tag3;
        tag_t               view_tag4;
//        tag_t               view_tag5;
        tag_t               view_tag6;
    tag_t               drawing_tag = NULL_TAG;      
    int                 ifail=0,ifail2=0,ifail3=0,ifail4=0,ifail5=0,ifail6=0;
        tag_t               exp_tag ;
        tag_t               exp_tag2;
        tag_t               exp_tag3 ;
        tag_t               exp_tag4 ;
        //tag_t               exp_tag5 ;
        tag_t               exp_tag6 ;
        double              scale;
    ifail = UF_initialize();
    if (!ifail)
    {
        /* Get the tag of drawing. */  
        ifail = UF_DRAW_ask_current_drawing (&drawing_tag);
    }
    if (!ifail)
    {
        /* Get the name of first drawing. */
        ifail = UF_OBJ_ask_name(drawing_tag, drawing_name);   
    }
    if (!ifail)
    {
        /* Get the name of the drawing's first view. */      
        ifail = uc6499 (drawing_name, view_name);
                ifail2= uc6499 (drawing_name, view_name2);
                ifail3= uc6499 (drawing_name, view_name3);
                ifail4= uc6499 (drawing_name, view_name4);
        //        ifail5= uc6499 (drawing_name, view_name5);
                ifail5= uc6499 (drawing_name, view_name6);
    }
    if (!ifail)
    {
        /* Get the view's tag. */
        ifail = UF_VIEW_ask_tag_of_view_name (view_name,
&view_tag);
                ifail2 = UF_VIEW_ask_tag_of_view_name (view_name2,
&view_tag2);
                ifail3 = UF_VIEW_ask_tag_of_view_name (view_name3,
&view_tag3);
                ifail4 = UF_VIEW_ask_tag_of_view_name (view_name4,
&view_tag4);
        /*        ifail5 = UF_VIEW_ask_tag_of_view_name (view_name5,
&view_tag5);*/
                ifail6 = UF_VIEW_ask_tag_of_view_name (view_name6,
&view_tag6);
    }
         if (!ifail)
    {
       ifail =  UF_DRAW_ask_view_scale (view_tag, &exp_tag,&scale);
           ifail2 =  UF_DRAW_ask_view_scale (view_tag2, &exp_tag2,&scale);
           ifail3 =  UF_DRAW_ask_view_scale (view_tag3, &exp_tag3,&scale);
       ifail4 =  UF_DRAW_ask_view_scale (view_tag4, &exp_tag4,&scale);
        //   ifail5 =  UF_DRAW_ask_view_scale (view_tag5, &exp_tag5,&scale);
           ifail6 =  UF_DRAW_ask_view_scale (view_tag6, &exp_tag6,&scale);
    }
    if (!ifail)
    {
        /* Set the parametric view scale. */
        ifail = UF_DRAW_set_view_scale (view_tag,0.9);
                ifail2 = UF_DRAW_set_view_scale (view_tag2,0.9);
                ifail3 = UF_DRAW_set_view_scale (view_tag3,0.9);
                ifail4 = UF_DRAW_set_view_scale (view_tag4,0.9);
        //        ifail5 = UF_DRAW_set_view_scale (view_tag5,0.9);
                ifail6 = UF_DRAW_set_view_scale (view_tag6,0.9);
    }
    printf ("UF_DRAW_set_view_scale sample ");
    if (ifail)
    {
        ifail = UF_get_fail_message( ifail, error_message );
        printf( "fails.\nError is: %s\n", error_message );
    }
    else

        /* Terminate the API environment */
        errorCode = UF_terminate();
    }

    /* Print out any error messages */
    PrintErrorMessage( errorCode );
}

//----------------------------------------------------------------------------
//  Utilities
//----------------------------------------------------------------------------

// Unload Handler
//     This function specifies when to unload your application from Unigraphics.
//     If your application registers a callback (from a MenuScript item or a
//     User Defined Object for example), this function MUST return
//     "UF_UNLOAD_UG_TERMINATE".
extern "C" int ufusr_ask_unload( void )
{
    return( UF_UNLOAD_UG_TERMINATE );
}

/* PrintErrorMessage
**
**     Prints error messages to standard error and the Unigraphics status
**     line. */
static void PrintErrorMessage( int errorCode )
{
    if ( 0 != errorCode )
    {
        /* Retrieve the associated error message */
        char message[133];
        UF_get_fail_message( errorCode, message );

        /* Print out the message */
        UF_UI_set_status( message );

        // Construct a buffer to hold the text.
        ostrstream error_message;

        // Initialize the buffer with the required text.
        error_message << endl
                      << "Error:" << endl
                      << message
                      << endl << endl << ends;

            // Write the message to standard error
        cerr << error_message.str();
    }
}
作者: my-scarecrow    时间: 2009-11-30 17:08
代码功能是实现5个视图的比例更改(改为0.9),因为我才刚接触二次开发才几天,如果有不懂的地方,还希望各位高手赐教
作者: zss3208    时间: 2009-12-2 15:45
4#
作者: my-scarecrow    时间: 2009-12-3 12:39
1. view_mane[30] 中的 view_name是自己随便命名的, 无特定要求
2.[30] 意思是工程图纸里你指定要修改的试图名称最大字符不能超过30个,诸如 ES@4,MF@9,MT@8等, 不过这些名称是NX 软件提供默认的视图名称,也就是工程图里视图的默认名称
作者: zss3208    时间: 2009-12-7 14:01
标题: RE: 关于设置图纸比例问题
7#  

我还是有点不明白~比如说,如图,高显视图的viewname在UG底部提示框里是"ORTHO@12",那么在命名的时候是不是需要先声明view_name="ORTHO@12"。。我的意思就是是不是需要先知道UG里视图的名称才再能给view_name赋值啊??
(, 下载次数: 0)
作者: zale_lzj    时间: 2009-12-9 00:13
zss3208 发表于 2009-12-7 14:01
7# my-scarecrow

我还是有点不明白~比如说,如图,高显视图的viewname在UG底部提示框里是"ORTHO@12",那么在命名的时候是不是需要先声明view_name="ORTHO@12"。。我的意思就是是不是需要先知道UG里视图的名称才再 ...


首先获取各视图的Tag,然后查询名称,可以不需要预先输入的
作者: my-scarecrow    时间: 2009-12-10 00:20
这只是你想修改指定的试图的前提下
作者: LIUCHANGLIN    时间: 2010-5-7 21:27
UF_VIEW_ask_tag_of_view_name(view_name2,&view_tag2);
视图名称不就是view_tag吗?




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3