iCAx开思工具箱

标题: 【讨论】pro/e二次开发如何实现这个函数功能 [打印本页]

作者: Superuser    时间: 2003-7-6 12:56
标题: 【讨论】pro/e二次开发如何实现这个函数功能
TOOl的例子里,想void Check() 功能,获取当前零件的孔的列表
  
  typedef struct surface_visit_data
{
   FILE      *fp;
   ProSolid   part;
} AxisVisitData_t;
  
/*===============================================================*\
FUNCTION:  UserDemoAxisAct()
PURPOSE :  Axis-visit action function that writes the
            axis name to a file
\*===============================================================*/
ProError UserDemoAxisAct(
     ProAxis     axis,
     ProError    filt_status,
     ProAppData  app_data)
{
     ProError          status;
     AxisVisitData_t  *p_data = (AxisVisitData_t*)app_data;
     ProSolid          part = p_data->part;
     FILE             *fp = p_data->fp;
     int               id;
     ProModelitem      modelitem;
     ProFeature        feature;
     ProFeattype       ftype;
     ProName           wname;
     char              name[PRO_NAME_SIZE];
     ProSelection      selection;
/*---------------------------------------------------------------*\
     Get the axis identifier.
\*---------------------------------------------------------------*/
     status = ProAxisIdGet (axis, [$id)]
     if (status != PRO_TK_NO_ERROR)
         return (status);
/*---------------------------------------------------------------*\
     Make a ProModelitem handle for the axis.
\*---------------------------------------------------------------*/
     status = ProModelitemInit (part, id, PRO_AXIS, [$modelitem)]
     if (status != PRO_TK_NO_ERROR)
         return (status);
/*---------------------------------------------------------------*\
     Get the feature to which the axis belongs.
\*---------------------------------------------------------------*/
     status = ProGeomitemFeatureGet ([$modelitem, &feature)]
     if (status != PRO_TK_NO_ERROR)
         return (status);
/*---------------------------------------------------------------*\
     Get the feature type.
\*---------------------------------------------------------------*/
     status = ProFeatureTypeGet ([$feature, &ftype)]
     if (status != PRO_TK_NO_ERROR)
         return (status);
/*---------------------------------------------------------------*\
     If the type was not HOLE, skip it.
\*---------------------------------------------------------------*/
  if (ftype != PRO_FEAT_HOLE )
        return (PRO_TK_NO_ERROR);
/*---------------------------------------------------------------*\
     Get the name of the axis.
\*---------------------------------------------------------------*/
     status = ProModelitemNameGet ([$modelitem, wname)]
     if (status != PRO_TK_NO_ERROR)
         return (status);
     ProWstringToString (name, wname);
/*---------------------------------------------------------------*\
     Print out the axis name and hole identifier.
\*---------------------------------------------------------------*/
     fprintf (fp, "Axis %s belongs to hole feature %d\n", name,
              feature.id);
/*---------------------------------------------------------------*\
     Highlight the owning hole.
\*---------------------------------------------------------------*/
     ProSelectionAlloc (NULL, [$feature, &selection)]
     ProSelectionHighlight (selection, PRO_COLOR_HIGHLITE);
     ProSelectionFree ([$selection)]
  
     return (PRO_TK_NO_ERROR);
}
/*===============================================================*\
FUNCTION:  UserDemoHoleList()
PURPOSE:   List the axes that belong to the hole features in
            a part, and report their names.
\*===============================================================*/
ProError UserDemoHoleList(
     ProSolid         part)
{
     ProError         status;
     AxisVisitData_t  data;
  
     data.part = part;
/*---------------------------------------------------------------*\
     Open the text file.
\*---------------------------------------------------------------*/
     data.fp = fopen ("visit_test.dat","w");
/*---------------------------------------------------------------*\
     Visit all the axes using the visit and filter functions
     above. Pass the owning solid and the text file pointer
     using the app_data argument.
\*---------------------------------------------------------------*/
     status = ProSolidAxisVisit (part, UserDemoAxisAct,
                                 NULL, (ProAppData)[$data)]
/*---------------------------------------------------------------*\
     Close the file
\*---------------------------------------------------------------*/
     fclose (data.fp);
  
     return (PRO_TK_NO_ERROR);
}
  
这个函数为帮助中的Example 5: Listing Holes in a Model  
  
如何将这段代码加入void Check()
作者: Superuser    时间: 2003-7-7 12:44
void Check()  
{  
  
ProError status;
ProMdl model;
     status = ProMdlCurrentGet([$model)]
UserDemoHoleList((ProSolid)model);
}
  
check()函数这样写的,获取pro/e当前模型,之后调用UserDemoHoleList()
添加必要的头文件,编译结果
作者: Superuser    时间: 2003-7-7 12:47
有一处错误,
PRO_FEAT_HOLE,不知在哪里定义的,
TOOL可否给看看
作者: Superuser    时间: 2003-7-7 12:49
这是所有的头文件
  
#include &ltroToolkit.h>  
#include &ltroMenu.h>  
#include &ltroMenuBar.h>  
#include &ltroUtil.h>  
#include &ltroUIDialog.h>
#include &ltroUILabel.h>
#include &ltroUIPushbutton.h>
#include &ltroAxis.h>
#include &ltroModelitem.h>
#include &ltroSolid.h>
#include <ProHole.h>
#include <ProFeature.h>
作者: Superuser    时间: 2003-7-8 08:28
怎么没人回复?
作者: zzabccn    时间: 2003-7-8 13:00
#include&ltroFeatType.h>
作者: zzabccn    时间: 2003-7-8 14:21
看样子 ,得把下面这段调出来才行!
extern "C" void Check()
{
  FILE *fp;
  fp=fopen("test1.txt","w");
  fprintf(fp,"this file create with proetk appliction");
  fclose (fp);
}
作者: Superuser    时间: 2003-7-8 18:17
加头文件,
#include "stdio.h"
  
有两处警告,两处错误,
  
上面的老大你编译通过了吗
作者: zzabccn    时间: 2003-7-8 22:02
没有,你呢?
stdio.h我加了,
作者: Superuser    时间: 2003-7-8 23:15
调不通Deleting intermediate files and output files for project 'tookit - Win32 Debug'.
--------------------Configuration: tookit - Win32 Debug--------------------
Compiling resources...
Compiling...
StdAfx.cpp
Compiling...
tookit.cpp
Linking...
   Creating library Debug/tookit.lib and object Debug/tookit.exp
LINK : warning LNK4049: locally defined symbol "_fclose" imported
LINK : warning LNK4049: locally defined symbol "_fopen" imported
tookit.obj : error LNK2001: unresolved external symbol __imp__fprintf
Debug/tookit.dll : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
Creating browse info file...
  
tookit.dll - 2 error(s), 2 warning(s)
  
不知道怎么回事,期待高手了
作者: Superuser    时间: 2003-7-9 09:10
问题出再链接,编译都已经通过了
感谢zzabccn
作者: zzabccn    时间: 2003-7-9 10:11
我用这个向导编译成功.但不知用上述办法是如何解决的.能说一下吗?
作者: Superuser    时间: 2003-7-9 11:03
我还没有解决
作者: Superuser    时间: 2003-7-9 11:22
这个向导我有的,好我试试
作者: Superuser    时间: 2003-7-9 13:00
调试成功!
加分鼓励,写出详细步骤继续加分--------by TOOL
运行结果:
作者: Superuser    时间: 2003-7-9 13:03
点击菜单menu2
  
三个孔特征,被加亮
作者: Superuser    时间: 2003-7-9 13:05
在工作目录下有一个visit_test.dat
显示内容如下:
作者: Superuser    时间: 2003-7-9 13:22
感谢zzabccn   
  
建议大家仔细看看这个例子,会有收获的
  
最后谈谈我的感想,仅供参考
   
1、用pro/e开发向导做,可能会更好一些,因为编译和链接环境已经被设置好了我们并不需要做什么,只要加一些头文件
2、用MFC AppWizard dll来做,需要对编译链接选项非常了解,我觉得把
开发向导的环境移植过去也应该可以的,那位老大有兴趣可以试试
  
3、pro/e开发向导,对MFC资源的如何引用,我不是很清楚,至少AfxMessageBox("haha");没有编译通过
  
以上这些想法和问题,期待大家有更深入的探讨
作者: Superuser    时间: 2003-7-9 13:55
介绍函数UserDemoHoleList()功能  
这个函数访问系统中当前零件属于孔特征的轴,然后将轴的名字和标识符写入文件visit_text.dat,最后加亮孔特征
作者: zzabccn    时间: 2003-7-11 10:59
今天我发现这个向导创建的是win32动态连接库.
作者: Superuser    时间: 2003-7-13 21:25
应该是吧




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