找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 603|回复: 3

[求助]:有关自定义类的永久反应器问题

[复制链接]
发表于 2005-11-24 09:27:26 | 显示全部楼层 |阅读模式

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

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

×
我以AcDbSpline为基类写了一个自定义类WJRedSpline类,
现在我又要写一个永久反应器类WJRedPtRector,以AcDbObject为基类,在这个类的modified函数中如何来识别我的那个类:WJRedSpline呢?
void WJRedPtRector::modified(const AcDbObject* dbObj)
{
        assertNotifyEnabled();
        // TODO: implement this function.
  //cast返回指定类型的对象
  //分析被修改实体
  acdbOpenObject(pEnt,m_OtherEntityID,AcDb::kForWrite);
  if(pEnt->isA()==AcDbLine::desc())
  {
    //被驱动实体为直线
    pModifyLine=AcDbLine::cast(pEnt);
    ModifyEntStyle=0;
    if(m_ModifyPtStyle==0)
    {
      //被驱动点为端点
      if(m_ModifyPtNo==0)
        pModifyLine->getStartPoint(modPt);
      else
        pModifyLine->getEndPoint(modPt);
    }   
  }
  else if(pEnt->isA()==WJRedSpline::desc())//????这里有问题啊!
  {
    //被驱动实体为曲线
   
  }
  //分析被修改实体结束
  
  //分析驱动实体
  if(dbObj->isA()==AcDbLine::desc())
  {
    //驱动实体为直线
    pLine=AcDbLine::cast(dbObj);
    pLine->getStartPoint(strPt);
    pLine->getEndPoint(endPt);
    midPt.x=(strPt.x+endPt.x)/2;
    midPt.y=(strPt.y+endPt.y)/2;
    switch(m_PtStyle)
    {
      case 0://驱动点为端点
        if(m_PtNo==0)
          newPt=strPt;
        else
          newPt=endPt;
        break;
      case 1://驱动点为中点
        newPt=midPt;
        break;
      case 2://驱动点为交点
        acdbOpenObject(pIntEnt,m_InsEntityID,AcDb::kForRead);
        pLine->intersectWith(pIntEnt,AcDb::kOnBothOperands,InsPts);
        pIntEnt->close();
        dis0=10000000;
        for(i=0;i<InsPts.length();i++)
        {
          dis1=acutDistance(asDblArray(InsPts),asDblArray(modPt));
          if(dis1<dis0)
          {
            newPt=InsPts;
            dis0=dis1;
          }         
        }
        pIntEnt->close();
        break;
      case 3://驱动点为垂足
        break;
      case 4://驱动点为线上点
        break;
    }
    //进行驱动
    if(m_ModifyPtNo==0)
      pModifyLine->setStartPoint(newPt);
    else
      pModifyLine->setEndPoint(newPt);
    pModifyLine->close();
      
  }
  pEnt->close();
        AcDbObject::modified(dbObj);
}
//在类库的搜索路径中以加入了WJMySpline.lib的搜索路径,同时在工程的连接中也加入了WJMySpline.lib,同时WJRedPtRector的头文件中也包含了:#include "WJRedSpline.h",但就是不正确啊,编译错误如下:
MyPtRector.cpp
d:\pbkcad服装cad\myspline\wjredspline.h(10) : warning C4005: 'DLLIMPEXP' : macro redefinition?????
        d:\pbkcad服装cad\myptrector\wjredptrector.h(9) : see previous definition of 'DLLIMPEXP'
rxdebug.cpp
WJRedPtRector.cpp
d:\pbkcad服装cad\myspline\wjredspline.h(10) : warning C4005: 'DLLIMPEXP' : macro redefinition??????
        d:\pbkcad服装cad\myptrector\wjredptrector.h(9) : see previous definition of 'DLLIMPEXP'
Generating Code...
Linking...
   Creating library Debug/WJMyPtRector.lib and object Debug/WJMyPtRector.exp

WJMyPtRector.dbx - 0 error(s), 0 warning(s)
请高人帮帮我啊,急死我了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-11-24 10:38:14 | 显示全部楼层
宏定义重复了

你可以修改一下DLLIMPEXP的定义

#ifndef DLLIMPEXP
#define DLLIMPEXP __declspec(dllexport)


而且这只是一个warning,应该没有影响吧~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-24 13:22:40 | 显示全部楼层
非常感谢pianette对我的密切关注,问题终于解决了,我是这样处理的
将我的永久反应器类的头文件稍做改动,将所有的DLLIMPEXP改为DLLIMPEXP1,如下
#if !defined(ARX__WJREDPTRECTOR_H__20051122_121348)
#define ARX__WJREDPTRECTOR_H__20051122_121348
#if _MSC_VER > 1000
#pragma once
#endif
#pragma warning(disable: 4275 4251)
#ifdef _MYPTRECTOR_
#define DLLIMPEXP1 __declspec(dllexport)
#else
#define DLLIMPEXP1
#endif
#ifndef WJMYPTRECTOR_DBXSERVICE
#define WJMYPTRECTOR_DBXSERVICE "WJMYPTRECTOR_DBXSERVICE"
#endif
#include "dbmain.h"
#include "WJRedSpline.h"
这个问题让我伤透了脑筋,整整花了3天的时间啊,终于解决,但为何这样还是一知半解啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-24 15:54:11 | 显示全部楼层
^_^  不用谢,我刚来此地,人生地不熟的,还请多多关照呢~

因为这个宏定义在你写在你的 .h 文件中,这个.h文件包含一次,DLLIMPEXP 就定义一次,被包含多次,就被定义多次,导致重复定义现象。
因此,只要在每次宏定义以前做一些判断就好了。

#ifdef _MYPTRECTOR_
<FONT color=red>#ifndef DLLIMPEXP1</FONT>
#define DLLIMPEXP1 __declspec(dllexport)
<FONT color=red>#endif</FONT>
#else
<FONT color=red>#ifndef DLLIMPEXP1</FONT>
#define DLLIMPEXP1
<FONT color=red>#endif</FONT>
#endif
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 02:22 , Processed in 0.334371 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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