91色色视频手机版_久久综合亚洲色hezyo_欧美精品色精品一区二区三区_色欲v国产日韩欧美精品视频_久久91超碰色中文字幕总站

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

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

  首先我們要修改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作為基類(lèi),而且HgyModify函數在繼承類(lèi)中要重寫(xiě)并要求實(shí)現動(dòng)態(tài)調用,故此處必須聲明為虛擬函數。Virtual關(guān)健字即為C++面向對象的重要的特性。


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


  第三、修改tempapp.cpp文件:


  1、 刪除CircleTemperature、RigonTemperature及EllipseTemperature類(lèi)的所有相關(guān)內容。


  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;


  }


  為簡(jiǎn)單起見(jiàn),我們只對直線(xiàn)和圓定義超級編輯命令,


  在此定義有關(guān)line和circle類(lèi)。在tempapp.cpp


  文件中增加CircleTemperature和LineTemperature類(lèi),


  定義如下:


  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;


  }


  如您所見(jiàn),HgyModify函數也要完全重寫(xiě)。至此我們對CircleTemperature和LineTemperature的定義已經(jīng)完成。上面P_TO_P()只是一個(gè)點(diǎn)對點(diǎn)賦值,getPoint()是自定義的取點(diǎn)函數。增加全局變量:這樣我們在初始化或清除內存過(guò)程中可以存取該類(lèi)。


  LineTemperature *pLineTemp;


  CircleTemperature *pCircleTemp;


  InitApp()函數中更改部分:


  acedRegCmds- >addCommand("TEMPERATURE_APP",


  "MODIFY", "MODIFY",


  ACRX_CMD_TRANSPARENT, printEnergy);


  更改程序中別的函數中的相應的部分。


  注意printEnergy()函數中selectEntity()


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


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

服務(wù)熱線(xiàn)

0755-26825352

企業(yè)微信銷(xiāo)售咨詢(xún)