国产黄色免费在线观看,大学生一级毛片全黄毛片黄,免费黄色小视频,黄色网页在线-在线播放不卡,亚洲韩日午夜视频,亚洲黄网站,久久99精品久久久久久

歡迎光臨深圳市凱迪賢模具有限公司官網!
0755-26825352
18948189678
開發(fā)AutoCAD的超級編輯命令

/ 2021/6/5 10:42:06
許多二次開發(fā)軟件均提供超級編輯命令,如Genius 14、HMCAD 6.0等等。讀者或許對這些命令很感興趣,能不能自己開發(fā)類似的功能呢?只要您對C++和ARX編程有一些了解,利用Autodesk提供的ObjectARX SDK軟件包(可以到Autodesk網址上免費下載),您能很方便的寫出此類程序,雖說不能和專業(yè)人員提供的超級編輯命令相媲美,但也能給您帶來不少方便。本文利用ObjectARX提供的范例程序(缺省安裝ObjectARX SDK后的路徑是X:\OBJECTARX\ARXLABS\LAB07)進行簡單的修改即可實現(xiàn)我們所要求的功能。以下是采用ObjectARX SDK 2.0,在MSVC 5.0編譯環(huán)境下測試通過。

  首先我們要修改enttemp.h文件:


  原文件如下:


  class EntTemperature : public AcRxObject


  {


  public:


  ACRX_DECLARE_MEMBERS(EntTemperature);


  virtual double reflectedEnergy(AcDbEntity* pEnt) const = 0;


  };


  將斜體部分修改成如下:


  virtual Adesk::Boolean HgyModify(AcDbEntity* pEnt)


  const = 0;


  因為我們以后要以EntTemperature作為基類,而且HgyModify函數(shù)在繼承類中要重寫并要求實現(xiàn)動態(tài)調用,故此處必須聲明為虛擬函數(shù)。Virtual關健字即為C++面向對象的重要的特性。


  第二、刪除tempapp.def文件中的energy文本。


  第三、修改tempapp.cpp文件:


  1、 刪除CircleTemperature、RigonTemperature及EllipseTemperature類的所有相關內容。


  2、 修改原文件中如下的內容:


  class DefaultTemperature : public EntTemperature


  {


  public:


  virtual double reflectedEnergy(AcDbEntity* pEnt) const;


  };


  double DefaultTemperature::reflectedEnergy


  (AcDbEntity* pEnt) const


  {


  ads_printf(" This entity has no area, and no reflection. ");


  return -1.0;


  }


  修改后的內容如下:


  class DefaultTemperature : public EntTemperature


  {


  public:


  virtual Adesk::Boolean HgyModify(AcDbEntity* pEnt) const;


  };


  Adesk::Boolean DefaultTemperature::


  HgyModify(AcDbEntity* pEnt) const


  {


  ads_printf(" The entity hasn't defined,


  and nothing to be modified. ");


  return Acad::eOk;


  }


  為簡單起見,我們只對直線和圓定義超級編輯命令,


  在此定義有關line和circle類。在tempapp.cpp


  文件中增加CircleTemperature和LineTemperature類,


  定義如下:


  class CircleTemperature : public EntTemperature


  {


  public:


  virtual Adesk::Boolean HgyModify(AcDbEntity* pEnt) const;


  };


  Adesk::Boolean


  CircleTemperature::HgyModify(AcDbEntity* pEnt) const


  {


  AcDbCircle *pCircle = AcDbCircle::cast(pEnt);


  if (!pCircle) {


  ads_printf("The entity selected is not a circle ");


  pEnt- >close();


  return Acad::eNotImplementedYet;


  }


  AcGePoint3d p,q;


  double r;


  p=P_TO_P(pCircle- >center());


  if (getPoint((double*)(&p), "Center Point: ", p)== RTNORM


  && ads_getdist((double*)(&p), "Blob radius: ", &r) == RTNORM)


  {


  pCircle- >setCenter(p);


  pCircle- >setRadius(r);


  pCircle- >close();


  }


  return Acad::eOk;


  }


  class LineTemperature : public EntTemperature


  {


  public:


  virtual Adesk::Boolean HgyModify(AcDbEntity* pEnt) const;


  };


  Adesk::Boolean


  LineTemperature::HgyModify(AcDbEntity* pEnt) const


  {


  AcDbLine *pLine = AcDbLine::cast(pEnt);


  if (!pLine) {


  ads_printf("The entity selected is not a line. ");


  pEnt- >close();


  return eNotImplementedYet;


  }


  AcGePoint3d p,q;


  p= P_TO_P (pLine- >startPoint());


  if (getPoint ((double*)(&p), "From Point: ", p)== RTNORM


  && getPoint((double*)(&p), "To point: ", q) == RTNORM)


  {


  pLine- >setStartPoint(p);


  pLine- >setEndPoint(q);


  pLine- >close();


  }


  return Acad::eOk;


  }


  如您所見,HgyModify函數(shù)也要完全重寫。至此我們對CircleTemperature和LineTemperature的定義已經完成。上面P_TO_P()只是一個點對點賦值,getPoint()是自定義的取點函數(shù)。增加全局變量:這樣我們在初始化或清除內存過程中可以存取該類。


  LineTemperature *pLineTemp;


  CircleTemperature *pCircleTemp;


  InitApp()函數(shù)中更改部分:


  acedRegCmds- >addCommand("TEMPERATURE_APP",


  "MODIFY", "MODIFY",


  ACRX_CMD_TRANSPARENT, printEnergy);


  更改程序中別的函數(shù)中的相應的部分。


  注意printEnergy()函數(shù)中selectEntity()


  函數(shù)的第二個參數(shù)必須是AcDb::kForWrite;


  編譯后在AutoCAD(如R14)中測試運行,敲入modify后隨便選取直線或圓,您就會能體會到超級編輯命令的方便之處。或許您會認為此命令沒有什么特別之處,但若您仔細研究lab10子目錄中的內容,定義自己的實體如門、窗或機械特征,特別是您自己才會用到的特殊對象,給對象增加此命令,您就會體會到ARX編程的魅力了。#p#分頁標題#e#

服務熱線

0755-26825352

企業(yè)微信銷售咨詢