找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1468|回复: 13

[求助] 大过年的

[复制链接]
发表于 2018-2-17 17:29:39 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 why1025 于 2018-2-17 17:33 编辑

问个问题,拖动实体时如何处理尺寸,谢谢,拖动多个实体,其中一些是尺寸
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 20个

财富等级: 恭喜发财

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

使用道具 举报

 楼主| 发表于 2018-2-17 21:48:01 | 显示全部楼层
本帖最后由 why1025 于 2018-2-17 21:49 编辑

virtual AcDbDimDataPtrArray*

dimData(

const double dimScale);
主要是这个函数,不知道怎么用

dimScaleInput DIMSCALE used to display the dynamic dimension
This function sets the DIMSCALE to be used when the dynamic dimension is displayed. It returns a pointer to an AcDbDimDataPtrArray object that the application maintains. This array contains a set of AcDbDimData object pointers: one for each dynamic dimension. The order of the potential (editable) dimensions in the AcDbDimDataPtrArray determines the order in which potential dimensions become active (focal) when the user presses the TAB key.
The application must override this method in the derived class to support dynamic dimensions. The default implementation in the AcEdJig base class simply returns a null pointer.
The dimScale value is calculated based on the zoom factor in the current viewport. Its purpose is to allow the application to determine the correct placement of the dimension line.
The application can add, delete or modify this setting during a prompting sequence. AutoCAD always displays the current dynamic dimensions.
It is the responsibility of the application to allocate and delete the AcDbDimData objects.
See the System Variables section of the AutoCAD Command Reference for information on DIMSCALE.
Comments?

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

使用道具 举报

 楼主| 发表于 2018-2-17 21:52:56 | 显示全部楼层
在例子中有个grip,阿恒例子中acrectjig,acrect里面写的代码非常多,理不出头绪,找不出哪段代码是控制尺寸拖动的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-17 21:55:08 | 显示全部楼层
  1. //
  2. // (C) Copyright 1998-2002 by Autodesk, Inc.
  3. //
  4. // Permission to use, copy, modify, and distribute this software in
  5. // object code form for any purpose and without fee is hereby granted,
  6. // provided that the above copyright notice appears in all copies and
  7. // that both that copyright notice and the limited warranty and
  8. // restricted rights notice below appear in all supporting
  9. // documentation.
  10. //
  11. // AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
  12. // AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
  13. // MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE.  AUTODESK, INC.
  14. // DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
  15. // UNINTERRUPTED OR ERROR FREE.
  16. //
  17. // Use, duplication, or disclosure by the U.S. ** is subject to
  18. // restrictions set forth in FAR 52.227-19 (Commercial Computer
  19. // Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
  20. // (Rights in Technical Data and Computer Software), as applicable.

  21. #include "acrectjig.h"
  22. #include "geassign.h"
  23. #include "acmain.h"
  24. #include "acrect.h"
  25. #include <math.h>

  26. // AcRectJig class member function implementation.
  27. //

  28. AcRectJig::AcRectJig(AcDbDatabase* pDb, AcRectangle* pRect)
  29. {
  30.     mElevation = 0.0;
  31.     mNormal.set(0,0,1);
  32.     mpDb = pDb;
  33.     mpRect = pRect;
  34.     mLockWidth = false;
  35.     mLockHeight = false;
  36.     mKeyword = 0;
  37.     mpDimData = NULL;
  38. }

  39. AcRectJig::~AcRectJig()
  40. {
  41.     // Delete AcDbDimData if any
  42.     //
  43.     if (mpDimData) {
  44.         for (int i = 0; i < mpDimData->length(); i++) {
  45.             AcDbDimData *pData = (*mpDimData);
  46.             AppData *pAppData = (AppData*)pData->appData();
  47.             if (pAppData)
  48.                 delete pAppData;
  49.             delete pData;
  50.                 }

  51.             delete mpDimData;
  52.     }
  53. }

  54. Acad::ErrorStatus
  55. AcRectJig::setPlane()
  56. {
  57.     // Acquire current UCS transformation matrix.
  58.     // We save the matrix for later use.
  59.     //
  60.     acdbUcsMatrix(mUcsToWcsMat);
  61.     mWcsToUcsMat = mUcsToWcsMat.inverse();

  62.     // Get data from user coordinate system.
  63.     //
  64.     AcGePoint3d orgPt;
  65.     AcGeVector3d xAxis, yAxis, zAxis;
  66.     mUcsToWcsMat.getCoordSystem(orgPt, xAxis, yAxis, zAxis);

  67.     // Get the current elevation w.r.t current UCS, w.r.t the current space.
  68.     //
  69.     struct resbuf rb;
  70.     ads_getvar(/*MSG0*/"CVPORT", &rb);
  71.     double elev;
  72.     if (rb.resval.rint == 1)
  73.         elev = mpDb->pelevation();  // Paper space
  74.     else
  75.         elev = mpDb->elevation();   // Model space

  76.     // Convert elevation from UCS to WCS.
  77.     //
  78.     orgPt += elev * zAxis;
  79.     mElevation = zAxis.dotProduct(orgPt.asVector());
  80.     mNormal = zAxis;
  81.     mHorizDir = xAxis;
  82.     mVertDir = mNormal.crossProduct(mHorizDir);
  83.     return Acad::eOk;
  84. }

  85. Acad::ErrorStatus
  86. AcRectJig::acquireDefPoints()
  87. {
  88.     setUserInputControls((UserInputControls)
  89.         (AcEdJig::kAccept3dCoordinates
  90.          | AcEdJig::kGovernedByOrthoMode
  91.          | AcEdJig::kNoNegativeResponseAccepted
  92.          | AcEdJig::kNullResponseAccepted
  93.          | AcEdJig::kNoZeroResponseAccepted));

  94.     setPlane();
  95.     const char* prompt = "\nSpecify first corner point: ";
  96.     setDispPrompt(prompt);

  97.     int stat = acquirePoint(mWcsPt1);
  98.     return (stat == AcEdJig::kNormal) ? Acad::eOk : Acad::eInvalidInput;
  99. }

  100. void AcRectJig::prepRect()
  101. {
  102.     assert(mpRect);
  103.     mpRect->setDatabaseDefaults();
  104.     mpRect->setNormal(mNormal);
  105.     mpRect->setElevation(mElevation);
  106.     mpRect->setCenter(mWcsPt1);
  107.     mpRect->setHorizDir(mHorizDir);
  108. }


  109. void AcRectJig::dragIt()
  110. {
  111.     AcEdJig::DragStatus stat;
  112.     const char* prompt = "\nSpecify other corner point: ";

  113.     do {
  114.         setDispPrompt(prompt);
  115.         stat = drag();
  116.         //keywordHandler(stat);

  117.     } while (stat != AcEdJig::kNormal && stat != AcEdJig::kCancel &&
  118.              stat != AcEdJig::kNull);

  119.     // Use AcDimJig's append
  120.     if (stat == AcEdJig::kNormal) {
  121.         append();

  122.     } else {
  123.         delete mpRect;
  124.     }
  125. }

  126. // This function is called by the drag function in order to
  127. // aquire a sample input
  128. //
  129. AcEdJig::DragStatus AcRectJig::sampler()
  130. {
  131.     DragStatus stat;

  132.     setUserInputControls((UserInputControls)
  133.         (AcEdJig::kAccept3dCoordinates
  134.          | AcEdJig::kGovernedByOrthoMode
  135.          | AcEdJig::kAcceptOtherInputString  
  136.          | AcEdJig::kNoNegativeResponseAccepted
  137.          | AcEdJig::kNullResponseAccepted
  138.          | AcEdJig::kNoZeroResponseAccepted));

  139.     //const char* keyWord = "Horz Vert All None";
  140.     //setKeywordList(keyWord);

  141.     AcGePoint3d pnt;
  142.     stat = acquirePoint(pnt);
  143.     if (stat == kNormal) {
  144.         if (pnt == mWcsPt2)   {
  145.             return AcEdJig::kNoChange;
  146.         } else {
  147.             mWcsPt2 = pnt;
  148.         }
  149.     }

  150.     return stat;
  151. }

  152. // This function is called to update the entity based on the
  153. // input values
  154. //
  155. Adesk::Boolean AcRectJig::update()
  156. {
  157.     AcGeVector3d diaVec = mWcsPt2 - mWcsPt1;
  158.     AcGePoint3d cenPt = mWcsPt1 + 0.5 * diaVec;
  159.     double width = fabs(diaVec.dotProduct(mHorizDir));
  160.     double height = fabs(diaVec.dotProduct(mVertDir));

  161.     if (!(mLockWidth || mLockHeight))
  162.         mpRect->setCenter(cenPt);

  163.     if (!mLockWidth)
  164.         mpRect->setWidth(width);

  165.     if (!mLockHeight)
  166.         mpRect->setHeight(height);

  167.     updateDimData();

  168.     return Adesk::kTrue;
  169. }

  170. // This function must be implemented to return a pointer to
  171. // the entity being manipulated by the jig.
  172. //
  173. AcDbEntity* AcRectJig::entity() const
  174. {
  175.     return mpRect;
  176. }

  177. AcDbDimDataPtrArray*
  178. AcRectJig::dimData(const double dimScale)
  179. {
  180.     addDimData(kHorizontalDim | kVerticalDim, dimScale);

  181.     switch (mKeyword) {
  182.     case AcEdJig::kKW1:
  183.         appendDimData(kHorizontalDim);
  184.         break;

  185.     case AcEdJig::kKW2:
  186.         appendDimData(kVerticalDim);
  187.         break;

  188.     case AcEdJig::kKW3:
  189.         appendDimData(kHorizontalDim | kVerticalDim);
  190.         break;
  191.     }


  192.     return mpDimData;
  193. }

  194. AcDbDimDataPtrArray*
  195. AcRectJig::dimData() const
  196. {
  197.     //addDimData(kHorizontalDim | kVerticalDim, 1.0);
  198.     return mpDimData;
  199. }

  200. bool
  201. AcRectJig::addDimData(int which, double dimScale)
  202. {
  203.     if (mpRect == NULL)
  204.         return false;

  205.     if (mpDimData == NULL) {
  206.         mpDimData = new AcDbDimDataPtrArray();
  207.     } else {
  208.         for (int i = 0; i < mpDimData->length(); i++) {
  209.             AcDbDimData *pData = (*mpDimData);
  210.             AppData *pAppData = (AppData*)pData->appData();
  211.             if (pAppData)
  212.                 delete pAppData;
  213.             delete pData;
  214.                 }
  215.         
  216.             mpDimData->setLogicalLength(0);
  217.     }

  218.     double width = mpRect->width();
  219.     double height = mpRect->height();
  220.     AcGePoint3d cenPt = mpRect->center();

  221.     AcGeVector3d vertDir = mNormal.crossProduct(mHorizDir);
  222.     AcGePoint3d pt1, pt2, pt3, pt4, dimPt1, dimPt2;
  223.     double horizRot = 0.0;
  224.     //double horizRot = userToLocalAngle(mNormal, mHorizDir);

  225.     pt1 = cenPt + 0.5 * width * mHorizDir + 0.5 * height * vertDir;
  226.     pt2 = cenPt - 0.5 * width * mHorizDir + 0.5 * height * vertDir;
  227.     pt3 = cenPt - 0.5 * width * mHorizDir - 0.5 * height * vertDir;
  228.     pt4 = cenPt + 0.5 * width * mHorizDir - 0.5 * height * vertDir;

  229.     if (which & kHorizontalDim) {
  230.         AcDbAlignedDimension *pAlnDim1 = new AcDbAlignedDimension();
  231.         dimPt1 = cenPt + (0.5 * height + 0.5 * dimScale) * vertDir;
  232.         pAlnDim1->setDatabaseDefaults();
  233.         pAlnDim1->setNormal(mNormal);
  234.         pAlnDim1->setElevation(mElevation);
  235.         pAlnDim1->setHorizontalRotation(-horizRot);
  236.         pAlnDim1->setXLine1Point(pt1);
  237.         pAlnDim1->setXLine2Point(pt2);
  238.         pAlnDim1->setDimLinePoint(dimPt1);
  239.         pAlnDim1->setDimtad(1);

  240.         AcDbDimData *dimData1 = new AcDbDimData(pAlnDim1);
  241.         AppData *appData1 = new AppData(1, dimScale);
  242.         dimData1->setAppData(appData1);
  243.         dimData1->setDimFocal(true);
  244.         //dimData1->setDimInvisible(true);
  245.         dimData1->setDimEditable(true);
  246.         mpDimData->append(dimData1);
  247.     }

  248.     if (which & kVerticalDim) {
  249.         AcDbAlignedDimension *pAlnDim2 = new AcDbAlignedDimension();
  250.         dimPt2 = cenPt + (0.5 * width + 0.5 * dimScale) * mHorizDir;
  251.         pAlnDim2->setDatabaseDefaults();
  252.         pAlnDim2->setNormal(mNormal);
  253.         pAlnDim2->setElevation(mElevation);
  254.         pAlnDim2->setHorizontalRotation(-horizRot);
  255.         pAlnDim2->setXLine1Point(pt1);
  256.         pAlnDim2->setXLine2Point(pt4);
  257.         pAlnDim2->setDimLinePoint(dimPt2);
  258.         pAlnDim2->setDimtad(1);
  259.         AcDbDimData *dimData2 = new AcDbDimData(pAlnDim2);
  260.         AppData *appData2 = new AppData(2, dimScale);
  261.         dimData2->setAppData(appData2);
  262.         //dimData2->setDimFocal(true);
  263.         dimData2->setDimEditable(false);
  264.                 dimData2->setDimHideIfValueIsZero(true);
  265.         //dimData2->setDimInvisible(true);
  266.         mpDimData->append(dimData2);
  267.     }

  268.     return true;
  269. }

  270. bool
  271. AcRectJig::updateDimData()
  272. {
  273.     if (!mpRect || !mpDimData || (mpDimData->length() <= 0))
  274.         return false;

  275.     double width = mpRect->width();
  276.     double height = mpRect->height();
  277.     AcGePoint3d cenPt = mpRect->center();
  278.     AcGeVector3d vertDir = mNormal.crossProduct(mHorizDir);
  279.     int dimIndex1 = 0, dimIndex2 = 0;
  280.     AcGePoint3d pt1, pt2, pt3, pt4, dimPt;
  281.     pt1 = cenPt + 0.5 * width * mHorizDir + 0.5 * height * vertDir;
  282.     pt2 = cenPt - 0.5 * width * mHorizDir + 0.5 * height * vertDir;
  283.     pt3 = cenPt - 0.5 * width * mHorizDir - 0.5 * height * vertDir;
  284.     pt4 = cenPt + 0.5 * width * mHorizDir - 0.5 * height * vertDir;

  285.     for (int i = 0; i < mpDimData->length(); i++) {
  286.          AcDbDimData *pData = (*mpDimData);
  287.          AppData *pDimAppData = (AppData*)pData->appData();         
  288.          int dimIndex = pDimAppData ? pDimAppData->index() : 0;
  289.          double dimScale = pDimAppData->dimScale();
  290.          AcDbDimension *pDim = (AcDbDimension*)pData->dimension();

  291.          if (pDim->isKindOf(AcDbAlignedDimension::desc())) {
  292.              AcDbAlignedDimension *pAlnDim = AcDbAlignedDimension::cast(pDim);
  293.              switch (dimIndex) {
  294.              case 1:
  295.                  dimPt = cenPt + (0.5 * height + 0.5 * dimScale) * vertDir;
  296.                  pAlnDim->setXLine1Point(pt1);
  297.                  pAlnDim->setXLine2Point(pt2);
  298.                  pAlnDim->setDimLinePoint(dimPt);
  299.                  break;

  300.              case 2:
  301.                  dimPt = cenPt + (0.5 * width + 0.5 * dimScale) * mHorizDir;
  302.                  pAlnDim->setXLine1Point(pt1);
  303.                  pAlnDim->setXLine2Point(pt4);
  304.                  pAlnDim->setDimLinePoint(dimPt);
  305.                  break;
  306.              }
  307.          }
  308.         }

  309.     return true;
  310. }

  311. Acad::ErrorStatus
  312. AcRectJig::setDimValue(const AcDbDimData* dimData,
  313.                        const double dimValue)
  314. {
  315.     if (dimData == NULL)
  316.         return Acad::eInvalidInput;

  317.     AppData *pDimAppData = (AppData*)dimData->appData();
  318.     int dimIndex = pDimAppData ? pDimAppData->index() : 0;

  319.     switch (dimIndex) {
  320.     case 1:
  321.         mpRect->setWidth(dimValue);
  322.         mLockWidth = true;
  323.         break;

  324.     case 2:
  325.         mpRect->setHeight(dimValue);
  326.         mLockHeight = true;
  327.         break;
  328.         }

  329.     return Acad::eOk;
  330.     mpRect->setWidth(dimValue);
  331.     return Acad::eOk;
  332. }

  333. void
  334. AcRectJig::keywordHandler(AcEdJig::DragStatus& kword)
  335. {
  336.     switch (kword) {
  337.     case AcEdJig::kKW1:
  338.         mKeyword = kHorizontalDim;
  339.         break;

  340.     case AcEdJig::kKW2:
  341.         mKeyword = kVerticalDim;
  342.         break;

  343.     case AcEdJig::kKW3:
  344.         mKeyword = kHorizontalDim | kVerticalDim;
  345.         break;

  346.     case AcEdJig::kKW4:
  347.                 mKeyword = kNone;
  348.         break;
  349.     }
  350. }

  351. bool
  352. AcRectJig::appendDimData(int which, double dimScale)
  353. {
  354.     if (mpRect == NULL)
  355.         return false;

  356.     if (mpDimData == NULL) {
  357.         mpDimData = new AcDbDimDataPtrArray();
  358.     }
  359.        
  360.     double width = mpRect->width();
  361.     double height = mpRect->height();
  362.     AcGePoint3d cenPt = mpRect->center();

  363.     AcGeVector3d vertDir = mNormal.crossProduct(mHorizDir);
  364.     AcGePoint3d pt1, pt2, pt3, pt4, dimPt1, dimPt2;
  365.     double horizRot = 0.0;
  366.     //double horizRot = userToLocalAngle(mNormal, mHorizDir);

  367.     pt1 = cenPt + 0.5 * width * mHorizDir + 0.5 * height * vertDir;
  368.     pt2 = cenPt - 0.5 * width * mHorizDir + 0.5 * height * vertDir;
  369.     pt3 = cenPt - 0.5 * width * mHorizDir - 0.5 * height * vertDir;
  370.     pt4 = cenPt + 0.5 * width * mHorizDir - 0.5 * height * vertDir;

  371.     if (which & kHorizontalDim) {
  372.         AcDbAlignedDimension *pAlnDim1 = new AcDbAlignedDimension();
  373.         dimPt1 = cenPt - (0.5 * height + 0.5 * dimScale) * vertDir;
  374.         pAlnDim1->setDatabaseDefaults();
  375.         pAlnDim1->setNormal(mNormal);
  376.         pAlnDim1->setElevation(mElevation);
  377.         pAlnDim1->setHorizontalRotation(-horizRot);
  378.         pAlnDim1->setXLine1Point(pt3);
  379.         pAlnDim1->setXLine2Point(pt4);
  380.         pAlnDim1->setDimLinePoint(dimPt1);
  381.         pAlnDim1->setDimtad(1);

  382.         AcDbDimData *dimData1 = new AcDbDimData(pAlnDim1);
  383.         AppData *appData1 = new AppData(3, dimScale);
  384.         dimData1->setAppData(appData1);
  385.         //dimData1->setDimFocal(true);
  386.         //dimData1->setDimInvisible(true);
  387.         dimData1->setDimEditable(true);
  388.         mpDimData->append(dimData1);
  389.     }

  390.     if (which & kVerticalDim) {
  391.         AcDbAlignedDimension *pAlnDim2 = new AcDbAlignedDimension();
  392.         dimPt2 = cenPt - (0.5 * width + 0.5 * dimScale) * mHorizDir;
  393.         pAlnDim2->setDatabaseDefaults();
  394.         pAlnDim2->setNormal(mNormal);
  395.         pAlnDim2->setElevation(mElevation);
  396.         pAlnDim2->setHorizontalRotation(-horizRot);
  397.         pAlnDim2->setXLine1Point(pt2);
  398.         pAlnDim2->setXLine2Point(pt3);
  399.         pAlnDim2->setDimLinePoint(dimPt2);
  400.         pAlnDim2->setDimtad(1);
  401.         AcDbDimData *dimData2 = new AcDbDimData(pAlnDim2);
  402.         AppData *appData2 = new AppData(4, dimScale);
  403.         dimData2->setAppData(appData2);
  404.         //dimData2->setDimFocal(true);
  405.         dimData2->setDimEditable(true);
  406.         //dimData2->setDimInvisible(true);
  407.         mpDimData->append(dimData2);
  408.     }

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

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2018-2-18 12:10:44 | 显示全部楼层

你贴的这个例子,已经很完整的处理DIM的拖动了,编译运行,调试它,适当修改修改,看看变化,加深理解。你只有需要拖动过程中修改DIM的特有的属性才会用到,否则用拖动实体的,处理一般的情况。比如改位置,旋转移动什么的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-18 19:23:15 | 显示全部楼层
还有个问题,这段代码在cad2004里面能看出尺寸拖动的效果,到2006里面就没尺寸了,不知道怎么回事
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-2-18 21:09:26 | 显示全部楼层

既然是ADESK的例子,那你就去看看2006 ARX目录下面的同名的文件是怎么写的,哪里有变化了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-18 22:14:32 | 显示全部楼层
各位大师,有没有联系的qq或者邮箱,这个论坛太麻烦了,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-2-18 23:00:10 | 显示全部楼层

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

使用道具 举报

 楼主| 发表于 2018-2-18 23:42:08 | 显示全部楼层
这是我写的一个类
  1. // (C) Copyright 2005-2007 by Autodesk, Inc.
  2. //
  3. // Permission to use, copy, modify, and distribute this software in
  4. // object code form for any purpose and without fee is hereby granted,
  5. // provided that the above copyright notice appears in all copies and
  6. // that both that copyright notice and the limited warranty and
  7. // restricted rights notice below appear in all supporting
  8. // documentation.
  9. //
  10. // AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
  11. // AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
  12. // MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE.  AUTODESK, INC.
  13. // DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
  14. // UNINTERRUPTED OR ERROR FREE.
  15. //
  16. // Use, duplication, or disclosure by the U.S. ** is subject to
  17. // restrictions set forth in FAR 52.227-19 (Commercial Computer
  18. // Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
  19. // (Rights in Technical Data and Computer Software), as applicable.
  20. //

  21. //-----------------------------------------------------------------------------
  22. #include "StdAfx.h"
  23. #include "ArcTestJig.h"

  24. //-----------------------------------------------------------------------------
  25. CArcTestJig::CArcTestJig () : AcEdJig ()
  26.         //,
  27.         //mCurrentInputLevel(0), mpEntity(NULL)
  28.         ,m_Stage(center), m_pDimData(NULL), __PI(atan (1.)*4)
  29. {
  30.         m_pArc = new AcDbArc(AcGePoint3d::kOrigin, AcGeVector3d::kZAxis, 100., 0., __PI/2);
  31. }

  32. CArcTestJig::~CArcTestJig () {
  33.         if(m_pDimData == NULL)
  34.                 return;
  35.         for(int ii = 0; ii < m_pDimData->length(); ii++)
  36.                 delete m_pDimData->at(ii);

  37.         delete m_pDimData;
  38.         m_pDimData = NULL;
  39. }

  40. //-----------------------------------------------------------------------------
  41. AcEdJig::DragStatus CArcTestJig::startJig ( /**pEntity*/) {
  42.         //- Store the new entity pointer
  43.         //mpEntity =pEntity ;
  44.         //- Setup each input prompt
  45.         ////////////////////AcString inputPrompts [1] ={
  46.         ////////////////////        "\nPick point"
  47.         ////////////////////} ;
  48.         //////////////////////- Setup kwords for each input
  49.         ////////////////////AcString kwords [1] ={
  50.         ////////////////////        ""
  51.         ////////////////////} ;

  52.         ////////////////////bool appendOk =true ;
  53.         ////////////////////AcEdJig::DragStatus status =AcEdJig::kNull ;
  54.         //////////////////////- Loop the number of inputs
  55.         ////////////////////for ( mCurrentInputLevel =0 ; mCurrentInputLevel < 1 ; mCurrentInputLevel++ ) {
  56.         ////////////////////        //- Add a new input point to the list of input points
  57.         ////////////////////        mInputPoints.append (AcGePoint3d ()) ;
  58.         ////////////////////        //- Set the input prompt
  59.         ////////////////////        setDispPrompt (inputPrompts [mCurrentInputLevel]) ;
  60.         ////////////////////        //- Setup the keywords required
  61.         ////////////////////        setKeywordList (kwords [mCurrentInputLevel]) ;

  62.         ////////////////////        bool quit =false ;
  63.         ////////////////////        //- Lets now do the input
  64.         ////////////////////        status =drag () ;
  65.         ////////////////////        if ( status != kNormal ) {
  66.         ////////////////////                //- If it's a keyword
  67.         ////////////////////                switch ( status ) {
  68.         ////////////////////                        case kCancel:
  69.         ////////////////////                        case kNull:
  70.         ////////////////////                                quit =true ;
  71.         ////////////////////                                break ;

  72.         ////////////////////                        case kKW1:
  73.         ////////////////////                        case kKW2:
  74.         ////////////////////                        case kKW3:
  75.         ////////////////////                        case kKW4:
  76.         ////////////////////                        case kKW5:
  77.         ////////////////////                        case kKW6:
  78.         ////////////////////                        case kKW7:
  79.         ////////////////////                        case kKW8:
  80.         ////////////////////                        case kKW9:
  81.         ////////////////////                                //- Do something

  82.         ////////////////////                                break ;
  83.         ////////////////////          }
  84.         ////////////////////        } else {
  85.         ////////////////////                appendOk =true ;
  86.         ////////////////////        }

  87.         ////////////////////        //- If to finish
  88.         ////////////////////        if ( quit )
  89.         ////////////////////                break ;
  90.         ////////////////////}

  91.         //////////////////////- If the input went well
  92.         ////////////////////if ( appendOk )
  93.         ////////////////////        //- Append to the database
  94.         ////////////////////        append () ;
  95.         ////////////////////else
  96.         ////////////////////        //- Clean up
  97.         ////////////////////        delete m_pArc  ;

  98.         ////////////////////return (status) ;


  99.         CString sPrompt;

  100.         m_Stage = center;
  101.         sPrompt = _T("\n输入圆弧圆心Center of arc: ");
  102.         setDispPrompt(sPrompt);
  103.         AcEdJig::DragStatus sts = drag();
  104.         if(sts != kNormal)
  105.                 return sts;

  106.         m_Stage = startpnt;
  107.         sPrompt = _T("\n输入圆弧起点Start point of arc: ");
  108.         setDispPrompt(sPrompt);
  109.         m_pArc->getStartPoint(m_PntPrev);
  110.         sts = drag();
  111.         if(sts != kNormal)
  112.                 return sts;

  113.         m_Stage = endpnt;
  114.         sPrompt = _T("\n输入圆弧终点End point of arc: ");
  115.         setDispPrompt(sPrompt);
  116.         m_pArc->getEndPoint(m_PntPrev);
  117.         sts = drag();
  118.         if(sts == kNormal)
  119.         {
  120.                 AcDbObjectId idArc = append();
  121.         }

  122.         return sts;
  123. }

  124. //-----------------------------------------------------------------------------
  125. //- Input sampler
  126. AcEdJig::DragStatus CArcTestJig::sampler () {
  127.         //- Setup the user input controls for each input
  128.         ////////AcEdJig::UserInputControls userInputControls [1] ={
  129.         ////////        /*AcEdJig::UserInputControls::*/(AcEdJig::UserInputControls)0
  130.         ////////} ;
  131.         //////////- Setup the cursor type for each input
  132.         ////////AcEdJig::CursorType cursorType [1] ={
  133.         ////////        /*AcEdJig::CursorType::*/(AcEdJig::CursorType)0
  134.         ////////} ;
  135.         //////////- Setup the user input controls for each sample
  136.         ////////setUserInputControls (userInputControls [mCurrentInputLevel]) ;
  137.         ////////setSpecialCursorType (cursorType [mCurrentInputLevel]) ;

  138.         ////////AcEdJig::DragStatus status =AcEdJig::kCancel ;
  139.         //////////- Check the current input number to see which input to do
  140.         ////////switch ( mCurrentInputLevel+1 ) {
  141.         ////////        case 1:
  142.         ////////                // TODO : get an input here
  143.         ////////                //status =GetStartPoint () ;
  144.         ////////                break ;

  145.         ////////        default:
  146.         ////////                break ;
  147.         ////////}
  148.         ////////return (status) ;


  149.         setUserInputControls((UserInputControls)        (        AcEdJig::kAccept3dCoordinates        | AcEdJig::kNullResponseAccepted));

  150.         DragStatus sts;
  151.         AcGePoint3d pntTemp;
  152.         if(m_Stage == startpnt)
  153.                 sts = acquirePoint(pntTemp, m_pArc->center());
  154.         else
  155.                 sts = acquirePoint(pntTemp);
  156.         if(sts == AcEdJig::kNormal)
  157.         {
  158.                 if(pntTemp.isEqualTo(m_PntPrev))
  159.                         sts = kNoChange;
  160.                 m_PntPrev = pntTemp;
  161.         }
  162.         return sts;
  163. }

  164. //-----------------------------------------------------------------------------
  165. //- Jigged entity update
  166. Adesk::Boolean CArcTestJig::update () {
  167.         //- Check the current input number to see which update to do
  168.        
  169.         ////switch ( mCurrentInputLevel+1 ) {
  170.         ////        case 1:
  171.         ////                // TODO : update your entity for this input
  172.         ////                //mpEntity->setCenter (mInputPoints [mCurrentInputLevel]) ;
  173.         ////                break ;

  174.         ////        default:
  175.         ////                break ;
  176.         ////}

  177.         ////return (updateDimData ()) ;

  178.         if(m_pArc == NULL)
  179.                 return false;

  180.         switch(m_Stage)
  181.         {
  182.         case center:
  183.                 m_pArc->setCenter(m_PntPrev);
  184.                 break;

  185.         case startpnt:
  186.                 {
  187.                         AcGeVector3d vStart = m_PntPrev - m_pArc->center();
  188.                         double dRadius = vStart.length();
  189.                         vStart.normalize();
  190.                         double dStart = vStart.angleTo(AcGeVector3d::kXAxis, m_pArc->normal().negate());
  191.                         if(dStart > __PI)
  192.                                 dStart -= __PI*2;
  193.                         m_pArc->setRadius(dRadius);
  194.                         m_pArc->setStartAngle(dStart);
  195.                         m_pArc->setEndAngle(dStart + __PI/2);
  196.                 }
  197.                 break;

  198.         case endpnt:
  199.                 setEndAngleTo(m_PntPrev);
  200.                 break;

  201.         default:
  202.                 return false;
  203.         }

  204.         updateDimData();
  205.         return true;
  206. }

  207. //-----------------------------------------------------------------------------
  208. //- Jigged entity pointer return
  209. AcDbEntity *CArcTestJig::entity () const {
  210.         return ((AcDbEntity *)m_pArc) ;
  211. }

  212. //-----------------------------------------------------------------------------
  213. //- Dynamic dimension data setup
  214. AcDbDimDataPtrArray *CArcTestJig::dimData (const double dimScale) {

  215.         /* SAMPLE CODE:
  216.         AcDbAlignedDimension *dim =new AcDbAlignedDimension () ;
  217.         dim->setDatabaseDefaults () ;
  218.         dim->setNormal (AcGeVector3d::kZAxis) ;
  219.         dim->setElevation (0.0) ;
  220.         dim->setHorizontalRotation (0.0) ;
  221.         dim->setXLine1Point (m_originPoint) ;
  222.         dim->setXLine2Point (m_lastPoint) ;
  223.         //- Get the dimPoint, first the midpoint
  224.         AcGePoint3d dimPoint =m_originPoint + ((m_lastPoint - m_originPoint) / 2.0) ;
  225.         //- Then the offset
  226.         dim->setDimLinePoint (dimPoint) ;
  227.         dim->setDimtad (1) ;

  228.         AcDbDimData *dimData = new AcDbDimData (dim) ;
  229.         //AppData *appData =new AppData (1, dimScale) ;
  230.         //dimData.setAppData (appData) ;
  231.         dimData->setDimFocal (true) ;
  232.         dimData->setDimHideIfValueIsZero (true) ;

  233.         //- Check to see if it is required
  234.         if ( getDynDimensionRequired (m_inputNumber) )
  235.                 dimData->setDimInvisible (false) ;
  236.         else
  237.                 dimData->setDimInvisible (true) ;

  238.         //- Make sure it is editable TODO:
  239.         dimData->setDimEditable (true) ;
  240.         mDimData.append (dimData) ;

  241.         return (&mDimData) ;
  242.         */


  243.         if(m_Stage != endpnt)
  244.                 return NULL;
  245.        
  246.         if(m_pDimData == NULL)
  247.                 return NULL;
  248.         for(int ii = 0; ii < m_pDimData->length(); ii++)
  249.                 delete m_pDimData->at(ii);

  250.         delete m_pDimData;
  251.         m_pDimData = NULL;
  252.         ////releaseDimData();

  253.         m_pDimData = new AcDbDimDataPtrArray();

  254.         AcDbDimData* pNewData(NULL);

  255.         // Arc Dimension
  256.         //AcDbArcDimension* pArcDim = new AcDbArcDimension();
  257.         //pArcDim->setDatabaseDefaults();
  258.         //pArcDim->setNormal(m_pArc->normal());
  259.         //pArcDim->setElevation(0.0);
  260.         //pArcDim->setHorizontalRotation(0.0);
  261.         //pArcDim->setDimscale(dimScale);
  262.         //pArcDim->setDimtad(1);
  263.         ////        pArcDim->setDynamicDimension(true);

  264.         //////这个是我自己后加的,但没效果,
  265.         //AcGePoint3d pt;
  266.         //m_pArc->getStartPoint(pt);
  267.         //pArcDim->setTextPosition(pt);
  268.         //pArcDim->setDynamicDimension(true);
  269.         /////////////////////

  270.         //pNewData = new AcDbDimData(pArcDim);
  271.         //pNewData->setDimHideIfValueIsZero(false);
  272.         //pNewData->setDimEditable(true);
  273.         //pNewData->setDimFocal(true);

  274.         //m_pDimData->append(pNewData);

  275.         // Chord Dimension
  276.         AcDbAlignedDimension* pChordDim = new AcDbAlignedDimension();
  277.         pChordDim->setDatabaseDefaults();
  278.         pChordDim->setNormal(m_pArc->normal());
  279.         pChordDim->setElevation(0.0);
  280.         pChordDim->setHorizontalRotation(0.0);
  281.         pChordDim->setDimtad(1);
  282.         //pChordDim->setDynamicDimension(true);

  283.         pNewData = new AcDbDimData(pChordDim);
  284.         pNewData->setDimHideIfValueIsZero(false);
  285.         pNewData->setDimEditable(true);
  286.         pNewData->setDimFocal(false);

  287.         m_pDimData->append(pNewData);

  288.         // set dimension location
  289.         updateDimData();

  290.         return m_pDimData;
  291.         ////return (NULL) ;
  292. }

  293. //-----------------------------------------------------------------------------
  294. //- Dynamic dimension data update
  295. Acad::ErrorStatus CArcTestJig::setDimValue (const AcDbDimData *pDimData, const double dimValue) {
  296.         ////Acad::ErrorStatus es =Acad::eOk ;

  297.         /* SAMPLE CODE:
  298.         //- Convert the const pointer to non const
  299.         AcDbDimData *dimDataNC =const_cast<AcDbDimData *>(pDimData) ;
  300.         int inputNumber =-1 ;
  301.         //- Find the dim data being passed so we can determine the input number
  302.         if ( mDimData.find (dimDataNC, inputNumber) ) {
  303.                 //- Now get the dimension
  304.                 AcDbDimension *pDim =(AcDbDimension *)dimDataNC->dimension () ;
  305.                 //- Check it's the type of dimension we want
  306.                 AcDbAlignedDimension *pAlnDim =AcDbAlignedDimension::cast (pDim) ;
  307.                 //- If ok
  308.                 if ( pAlnDim ) {
  309.                         //- Extract the dimensions as they are now
  310.                         AcGePoint3d dimStart =pAlnDim->xLine1Point () ;
  311.                         AcGePoint3d dimEnd =pAlnDim->xLine2Point () ;
  312.                         //- Lets get the new point entered by the user
  313.                         AcGePoint3d dimEndNew =dimStart + (dimEnd - dimStart).normalize () * dimValue ;
  314.                         //- Finally set the end dim point
  315.                         pAlnDim->setXLine2Point (dimEndNew) ;
  316.                         //- Now update the jig data to reflect the dynamic dimension input
  317.                         mInputPoints [mCurrentInputLevel] =dimEndNew ;
  318.                 }
  319.         }*/
  320.         ////return (es) ;




  321.         AcDbDimension* pDim = (AcDbDimension *)pDimData->dimension();
  322.         //pDim=dimData->

  323.         //AcDbArcDimension* pArcDim = AcDbArcDimension::cast(pDim);
  324.         //if(pArcDim)
  325.         //{
  326.         //        AcGePoint3d pntNewEnd;
  327.         //        Acad::ErrorStatus es = m_pArc->getPointAtDist(dimValue, pntNewEnd);
  328.         //        if(Acad::eOk != es)
  329.         //                return es;

  330.         //        ////////setEndAngleTo(pntNewEnd);

  331.         //        return Acad::eOk;
  332.         //}
  333.         //else
  334.         //{
  335.                 AcDbAlignedDimension* pChordDim =  AcDbAlignedDimension::cast(pDim);
  336.                 if(pChordDim)
  337.                 {
  338.                         double dRadius = m_pArc->radius();
  339.                         if(dimValue > dRadius*2)
  340.                                 return Acad::eNotApplicable;


  341.                         double dAngDlt = asin(dimValue/(dRadius*2));
  342.                         double dNewEnd = m_pArc->startAngle() + dAngDlt*2;
  343.                         m_pArc->setEndAngle(dNewEnd);
  344.                         return Acad::eOk;
  345.                 }
  346.         //}

  347.         return  Acad::eInvalidInput;
  348. }

  349. //-----------------------------------------------------------------------------
  350. //- Various helper functions
  351. //- Dynamic dimdata update function
  352. Adesk::Boolean CArcTestJig::updateDimData () {
  353.         //- Check the dim data store for validity
  354.        
  355.         ////if ( mDimData.length () <= 0 )
  356.                 ////return (true) ;

  357.         if(m_pDimData == NULL || m_pArc == NULL)
  358.                 return false;

  359.         if(m_pDimData->length() < 2)
  360.                 return false;

  361.         double  dRadius = m_pArc->radius();
  362.         AcGePoint3d  pntCenter = m_pArc->center();

  363.         AcGePoint3d  pntStart;
  364.         m_pArc->getStartPoint(pntStart);
  365.         double dStart;
  366.         m_pArc->getStartParam(dStart);

  367.         AcGePoint3d  pntEnd;
  368.         m_pArc->getEndPoint(pntEnd);
  369.         double dEnd;
  370.         m_pArc->getEndParam(dEnd);

  371.         //AcDbArcDimension* pArcDim = AcDbArcDimension::cast(m_pDimData->at(0)->dimension());
  372.         //if(pArcDim)
  373.         //{
  374.         //        pArcDim->setArcSymbolType(2); // no symbol
  375.         //        pArcDim->setCenterPoint(pntCenter);
  376.         //        pArcDim->setXLine1Point(pntStart);
  377.         //        pArcDim->setXLine2Point(pntEnd);
  378.         //        pArcDim->setArcStartParam(dStart);
  379.         //        pArcDim->setArcEndParam(dEnd);

  380.         //        AcGeVector3d vStart = (pntStart - pntCenter).normalize();
  381.         //        AcGeVector3d vEnd = (pntEnd - pntCenter).normalize();
  382.         //        AcGeVector3d vMid = vStart + vEnd;
  383.         //        vMid.normalize();

  384.         //        if(vStart.angleTo(vEnd, m_pArc->normal()) > __PI)
  385.         //                vMid.negate();

  386.         //        pArcDim->setArcPoint(pntCenter + (dRadius + ARCDIM_OFFSET)*vMid );

  387.         //        pArcDim->setHasLeader(false);
  388.         //}

  389.         AcDbAlignedDimension* pChordDim = AcDbAlignedDimension::cast(m_pDimData->at(0)->dimension());
  390.         if(pChordDim)
  391.         {
  392.                 pChordDim->setXLine1Point(pntStart);
  393.                 pChordDim->setXLine2Point(pntEnd);
  394.                 AcGeVector3d vDir = (pntEnd - pntStart).normalize();

  395.                 pChordDim->setDimLinePoint(pntStart + ARCDIM_OFFSET*vDir.perpVector());
  396.         }
  397.         /* SAMPLE CODE :
  398.         //- Extract the individual dimData
  399.         AcDbDimData *dimData =mDimData [m_inputNumber] ;
  400.         //- Now get the dimension
  401.         AcDbDimension *pDim =(AcDbDimension *)dimData->dimension () ;
  402.         //- Check it's the type of dimension we want
  403.         AcDbAlignedDimension *pAlnDim =AcDbAlignedDimension::cast (pDim) ;
  404.         //- If ok
  405.         if ( pAlnDim ) {
  406.                 //- Check to see if it is required
  407.                 if ( getDynDimensionRequired (m_inputNumber) )
  408.                         dimData->setDimInvisible (false) ;
  409.                 else
  410.                         dimData->setDimInvisible (true) ;
  411.                 pAlnDim->setXLine1Point (m_originPoint) ;
  412.                 pAlnDim->setXLine2Point (m_lastPoint) ;
  413.                 //- Get the dimPoint, first the midpoint
  414.                 AcGePoint3d dimPoint =m_originPoint + ((m_lastPoint - m_originPoint) / 2.0) ;
  415.                 //- Then the offset
  416.                 pAlnDim->setDimLinePoint (dimPoint) ;
  417.         } */
  418.         return (true) ;
  419. }

  420. //-----------------------------------------------------------------------------
  421. //- Std input to get a point with no rubber band
  422. AcEdJig::DragStatus CArcTestJig::GetStartPoint () {
  423.         AcGePoint3d newPnt ;
  424.         //- Get the point
  425.         AcEdJig::DragStatus status =acquirePoint (newPnt) ;
  426.         //- If valid input
  427.         if ( status == AcEdJig::kNormal ) {
  428.                 //- If there is no difference
  429.                 if ( newPnt.isEqualTo (mInputPoints [mCurrentInputLevel]) )
  430.                         return (AcEdJig::kNoChange) ;
  431.                 //- Otherwise update the point
  432.                 mInputPoints [mCurrentInputLevel] =newPnt ;
  433.         }
  434.         return (status) ;
  435. }

  436. //-----------------------------------------------------------------------------
  437. //- Std input to get a point with rubber band from point
  438. AcEdJig::DragStatus CArcTestJig::GetNextPoint () {
  439.         AcGePoint3d oldPnt =mInputPoints [mCurrentInputLevel] ;
  440.         AcGePoint3d newPnt ;
  441.         //- Get the point
  442.         AcEdJig::DragStatus status =acquirePoint (newPnt, oldPnt) ;
  443.         //- If valid input
  444.         if ( status == AcEdJig::kNormal ) {
  445.                 //- If there is no difference
  446.                 if ( newPnt.isEqualTo (mInputPoints [mCurrentInputLevel]) )
  447.                         return (AcEdJig::kNoChange) ;
  448.                 //- Otherwise update the point
  449.                 mInputPoints [mCurrentInputLevel] =newPnt ;
  450.         }
  451.         return (status) ;
  452. }


  453. void  CArcTestJig::setEndAngleTo(AcGePoint3d pntEnd)
  454. {
  455.         AcGeVector3d vEnd = (pntEnd - m_pArc->center()).normalize();
  456.         double dNewEnd = vEnd.angleTo(AcGeVector3d::kXAxis, m_pArc->normal().negate());
  457.         //         if(dNewEnd > __PI)
  458.         //                 dNewEnd -= __PI*2;
  459.         m_pArc->setEndAngle(dNewEnd);
  460. }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-18 23:44:06 | 显示全部楼层
本帖最后由 why1025 于 2018-2-18 23:48 编辑

头文件
  1. <div><div>// (C) Copyright 2005-2007 by Autodesk, Inc.
  2. //
  3. // Permission to use, copy, modify, and distribute this software in
  4. // object code form for any purpose and without fee is hereby granted,
  5. // provided that the above copyright notice appears in all copies and
  6. // that both that copyright notice and the limited warranty and
  7. // restricted rights notice below appear in all supporting
  8. // documentation.
  9. //
  10. // AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
  11. // AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
  12. // MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE.  AUTODESK, INC.
  13. // DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
  14. // UNINTERRUPTED OR ERROR FREE.
  15. //
  16. // Use, duplication, or disclosure by the U.S. ** is subject to
  17. // restrictions set forth in FAR 52.227-19 (Commercial Computer
  18. // Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
  19. // (Rights in Technical Data and Computer Software), as applicable.

  20. //-----------------------------------------------------------------------------
  21. //- ArcTestJig.h
  22. #pragma once

  23. //-----------------------------------------------------------------------------
  24. class CArcTestJig : public AcEdJig {

  25. private:
  26.         //- Member variables
  27.         //- current input level, increment for each input
  28.         int mCurrentInputLevel ;
  29.         //- Dynamic dimension info
  30.         AcDbDimDataPtrArray mDimData ;

  31. public:
  32.         //- Array of input points, each level corresponds to the mCurrentInputLevel
  33.         AcGePoint3dArray mInputPoints ;
  34.         //- Entity being jigged
  35.          //*mpEntity ;
  36.          #define ARCDIM_OFFSET  20.0
  37.          enum stage
  38.          {
  39.                  center = 1,
  40.                  startpnt,
  41.                  endpnt
  42.          };

  43.          stage        m_Stage;
  44.          AcGePoint3d  m_PntPrev;
  45.          AcDbArc*     m_pArc;

  46.          AcDbDimDataPtrArray* m_pDimData;

  47.          double     __PI;
  48. public:
  49.         CArcTestJig () ;
  50.         ~CArcTestJig () ;

  51.         //- Command invoke the jig, call passing a new'd instance of the object to jig
  52.         AcEdJig::DragStatus startJig ( /**pEntityToJig*/) ;

  53. protected:
  54.         //- AcEdJig overrides
  55.         //- input sampler
  56.         virtual DragStatus sampler () ;
  57.         //- jigged entity update
  58.         virtual Adesk::Boolean update () ;
  59.         //- jigged entity pointer return
  60.         virtual AcDbEntity *entity () const ;
  61.         //- dynamic dimension data setup
  62.         virtual AcDbDimDataPtrArray *dimData (const double dimScale) ;
  63.         //- dynamic dimension data update
  64.         virtual Acad::ErrorStatus setDimValue (const AcDbDimData *pDimData, const double dimValue) ;

  65.         //- Standard helper functions
  66.         //- dynamic dimdata update function
  67.         virtual Adesk::Boolean updateDimData () ;

  68.         //- Std input to get a point with no rubber band
  69.         AcEdJig::DragStatus GetStartPoint () ;
  70.         //- Std input to get a point with rubber band from point
  71.         AcEdJig::DragStatus GetNextPoint () ;

  72.         void  setEndAngleTo(AcGePoint3d pntEnd);
  73. } ;</div><div>测试代码</div><div>static void ArcTest2002_MyC2(void)
  74. {
  75.   // Add your code for command ArcTest2002._MyC2 here
  76.   CArcTestJig arcJig;
  77.   arcJig.startJig();
  78. }</div><div>编译完只能看到圆弧,看不到尺寸
  79. </div>
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-18 23:52:06 | 显示全部楼层
编译完只能看到圆弧,看不到尺寸,帮忙查查原因
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2018-4-8 11:50:57 | 显示全部楼层
2006和2008以上,注意下重l载的worlddraw和subworlddraw的不同。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 06:37 , Processed in 0.459679 second(s), 53 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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