找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4165|回复: 40

[求助]:本人是新手,正学ObjectARX,问个问题,望高手能解答!

[复制链接]
发表于 2004-3-11 18:40:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
由于毕业设计需要,本人正在学习ObjectARX+Vc++,对MDT6.0进行二次开发!可是现在不知道从何下手,先做些什么,由于时间紧迫,能否有简单的例子可以参考?请高手能启蒙一下!谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2004-3-11 18:51:05 | 显示全部楼层

Re: [求助]:本人是新手,正学ObjectARX,问个问题,望高手能解答!

最初由 Jackilin 发布
[B]由于毕业设计需要,本人正在学习ObjectARX+Vc++,对MDT6.0进行二次开发!可是现在不知道从何下手,先做些什么,由于时间紧迫,能否有简单的例子可以参考?请高手能启蒙一下!谢谢! [/B]


ARX安装后,目录下得SAMPLES下面提供了很多现成的例子,你去看看。

另外多来论坛看看以前的帖子,自己写程序时候遇到问题可以发贴到论坛来。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-3-12 10:49:51 | 显示全部楼层

XDSoft大哥,请问这一大堆程序有什么用啊,大概是些什么意思啊?

#include "StdAfx.h"
#include "StdArx.h"
#include "resource.h"

HINSTANCE _hdllInstance =NULL ;

// This command registers an ARX command.
void AddCommand(const char* cmdGroup, const char* cmdInt, const char* cmdLoc,
                                const int cmdFlags, const AcRxFunctionPtr cmdProc, const int idLocal = -1);


// NOTE: DO NOT edit the following lines.
//{{AFX_ARX_MSG
void InitApplication();
void UnloadApplication();
//}}AFX_ARX_MSG

// NOTE: DO NOT edit the following lines.
//{{AFX_ARX_ADDIN_FUNCS
//}}AFX_ARX_ADDIN_FUNCS


/////////////////////////////////////////////////////////////////////////////
// DLL Entry Point
extern "C"
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
{
        if (dwReason == DLL_PROCESS_ATTACH)
        {
        _hdllInstance = hInstance;
        } else if (dwReason == DLL_PROCESS_DETACH) {

        }
        return TRUE;    // ok
}



/////////////////////////////////////////////////////////////////////////////
// ObjectARX EntryPoint
extern "C" AcRx::AppRetCode
acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)
{
        switch (msg) {
        case AcRx::kInitAppMsg:
                // Comment out the following line if your
                // application should be locked into memory
                acrxDynamicLinker->unlockApplication(pkt);
                acrxDynamicLinker->registerAppMDIAware(pkt);
                InitApplication();
                break;
        case AcRx::kUnloadAppMsg:
                UnloadApplication();
                break;
        }
        return AcRx::kRetOK;
}

// Init this application. Register your
// commands, reactors...
void InitApplication()
{
        // NOTE: DO NOT edit the following lines.
        //{{AFX_ARX_INIT
        AddCommand("JACKILIN", "TEST", "TEST", ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, Jackilintest);
        //}}AFX_ARX_INIT

        // TODO: add your initialization functions

}

// Unload this application. Unregister all objects
// registered in InitApplication.
void UnloadApplication()
{
        // NOTE: DO NOT edit the following lines.
        //{{AFX_ARX_EXIT
        acedRegCmds->removeGroup("JACKILIN");
        //}}AFX_ARX_EXIT

        // TODO: clean up your application
}

// This functions registers an ARX command.
// It can be used to read the localized command name
// from a string table stored in the resources.
void AddCommand(const char* cmdGroup, const char* cmdInt, const char* cmdLoc,
                                const int cmdFlags, const AcRxFunctionPtr cmdProc, const int idLocal)
{
        char cmdLocRes[65];

        // If idLocal is not -1, it's treated as an ID for
        // a string stored in the resources.
        if (idLocal != -1) {

                // Load strings from the string table and register the command.
                ::LoadString(_hdllInstance, idLocal, cmdLocRes, 64);
                acedRegCmds->addCommand(cmdGroup, cmdInt, cmdLocRes, cmdFlags, cmdProc);

        } else
                // idLocal is -1, so the 'hard coded'
                // localized function name is used.
                acedRegCmds->addCommand(cmdGroup, cmdInt, cmdLoc, cmdFlags, cmdProc);
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-12 23:50:00 | 显示全部楼层
还需要努力啊!给你一篇文章吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-3-13 09:54:16 | 显示全部楼层
实在太感谢了!我为了毕业设计才认识,什么叫ObjectARX,说实在的要我在几天内学会编程,简直就是不太可能!请问,高手,能教一下有没速成的方法啊!设计的主要内容是,我现在搞的是mdt6.0的三维图象设计!模型已经建好了,老师叫我通过OBJECTARX对它进行二次开发,还说和对AUTOCAD开发是一样的!主要是编程改变图象的颜色和对图象的尺寸进行参数化,对我一个刚学的人来说,简直就是太难了!请问高手能不能指点一二啊,跪谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-13 10:46:32 | 显示全部楼层
改变图象的颜色在AUTOCAD里不难,先选择所要改变图象的实体,然后改变实体的颜色。但不知对图象的尺寸进行参数化是什么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-3-13 12:23:45 | 显示全部楼层
用MDT6.0进行三维图象设计的时候,可以对图象的尺寸进行参数化,也就是,假设,我们设定长度为a(变量),宽度为b=a*0.8  ,那么当我们输入长度为100是,整个图象就变成100*80,如果我们输入200,那么图象就变为200*160。这是MDT6.0画图时,可以实现的,现在我们就是想编程调用图象出来,然后对a进行赋值,想赋多少就多少!就是这样!不知道您有没办法呢,或是有相关的程序!谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-13 12:34:33 | 显示全部楼层
在平面实现这个不难,把图象作为一个DWG块插入,然后由用户设定缩放比例就行了。
  AcDbDatabase *pNewDb =new AcDbDatabase(Adesk::kFalse);// 创建一个空的数据库pNewDb
        acDocManager->lockDocument(acDocManager->curDocument());//如果确定你不需要LockDocument, 这一行可以不要
        //static char sFileName[] = "g:\\工作图纸\\港务局铺面加层方案.dwg ";       
        int es=pNewDb->readDwgFile(sFileName , _SH_DENYNO,false); //读入dwg文件
        if (es!=Acad::eOk)
        {
        acutPrintf("\nThe file %s cannot be opend",sFileName);
        return;
        }   
        AcDbDatabase *pDb;
        pDb =acdbHostApplicationServices ()->workingDatabase () ;// 用pDb来表示当前数据库   
        pDb->insert(AcGeMatrix3d::kIdentity, pNewDb);// 这里假定不对dwg文件做比例和转角的变换
但不知三维图象设计有什么要求。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-3-13 17:43:39 | 显示全部楼层
衷心感谢您的帮忙,程序还没试不知道行不行,现在正在看一些基础的程序,可能您给的内容我还需要消化几天!不过还是非常非常感谢您!不知道您有没更快的联系方式呢,比如象qq啊,email啊,或者,希望您多能上这论坛!我刚学问题一大把!再次感谢!
extern "C" AcRx::AppRetCode acrxEntryPoint( AcRx::AppMsgCode msg, void* appId)
{
    switch( msg )
    {
    case AcRx::kInitAppMsg:
        acrxDynamicLinker->unlockApplication(appId);
        acrxDynamicLinker->registerAppMDIAware(appId);
        initApp();
        break;
    case AcRx::kUnloadAppMsg:
        unloadApp();
        break;
    case AcRx::kInitDialogMsg:
        
        break;
    default:
        break;
    }
    return AcRx::kRetOK;
}   请问这个程序怎么理解啊??您能帮忙稍微解释一下吗??特别是第一个case之后的acrxDynamicLinker->unlockApplication(appId);
acrxDynamicLinker->registerAppMDIAware(appId); 是什么意思,或有什么功能?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-13 19:08:17 | 显示全部楼层
这只不过是Autodesk公司开发的一个ARX程序的入口函数,主要是处理消息的。你可以多读一下ARX自带的arxlabs和docs目录的内容会有一些帮助,不过只有E文的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-3-14 10:11:49 | 显示全部楼层
谢谢您,我找到那些关于ObjectARX的介绍!还有上次您给我的那个更改图形颜色的程序,是不是颜色可以由我们任改啊??或是只有规定更改为我们设定的某个特定的颜色!请问你叫什么名字,我想把你的名字写我的毕业论文里啊!谢谢
还有就是这个函数的功能是什么啊???
void AddCommand(const char* cmdGroup, const char* cmdInt, const char* cmdLoc,
                                const int cmdFlags, const AcRxFunctionPtr cmdProc, const int idLocal)
{
        char cmdLocRes[65];

        // If idLocal is not -1, it's treated as an ID for
        // a string stored in the resources.
        if (idLocal != -1) {
                HMODULE hModule = GetModuleHandle("studyexercise.arx");//这里看不明白是什么意思????

                // Load strings from the string table and register the command.
                ::LoadString(hModule, idLocal, cmdLocRes, 64);
                acedRegCmds->addCommand(cmdGroup, cmdInt, cmdLocRes, cmdFlags, cmdProc);

        } else
                // idLocal is -1, so the 'hard coded'
                // localized function name is used.
                acedRegCmds->addCommand(cmdGroup, cmdInt, cmdLoc, cmdFlags, cmdProc);
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-14 11:01:15 | 显示全部楼层
上次的函数是修改成“3”色(即红色),你可以根据CAD的要求设置它的值,什么颜色都可以。上面的函数的功能是在CAD里注册命令。你在广州什么大学?学什么的?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-3-14 16:42:00 | 显示全部楼层
我在华南农业大学啊!学农业机械的,以前只学过C语言,和AUTOCAD基本的操作,而且只学点皮毛而已,对什么MDT6.0啊,什么二次开发啊,毕业设计才第一次听过!毕业设计是搞个性化产品定制智能CAD系统开发的,我的导师问她,什么都说不知道,我实在是没办法啊!所以只能找高手帮忙啦!那个ADDCOMMAND是自己写的函数吧,整个函数主要是完成什么动作啊?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-14 17:15:58 | 显示全部楼层
是ARX向导自动生成的,功能是在CAD里注册命令,不用理会它,只要知道功能就行了。我开始连C语言都没学,是学ARX用到时才开始学的,懂C语言很重要,它是ARX的基础,其实ARX就是C语言,只不过AutoDesk公司开发了一个接口和一些专用函数。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-3-14 18:26:33 | 显示全部楼层
我现在买了一本关于ARX所有的函数库查询词典在看!希望能有点用!你还是学生吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-29 15:14 , Processed in 0.411060 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表