明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: mxdwg

梦想mxdraw浏览,编辑控件

  [复制链接]
 楼主| 发表于 2010-11-2 19:42 | 显示全部楼层
本帖最后由 作者 于 2010-11-4 17:03:13 编辑

2010.11.01更新地址

 

http://www.mxdraw.com/?p=10&a=view&r=28

 

1. 增加线重显示

 

2. 增加射线显示

 

3. 增加块参照显示

 

4. 增加dwg批量转pdf功能,函数名为:static BOOL MxDraw::MultiDwgConvertPdf(IN const CString& sDwgFileDir,
  IN const CString& sPdfFileDir,IN CMxConvertPdfParam* pExParam = NULL);

 

5. 增加控件换肤功能,函数名为:static void MxDraw::SetTheme(PaintTheme theme);

 

6. 完善曲线打断函数,getSplitCurves,现在可以对Polyline,Line,Arc,做打断.

 

7. 完善多行文字的绘制处理功能。

 楼主| 发表于 2010-12-27 09:17 | 显示全部楼层
2010.12.24更新地址
http://www.mxdraw.com/?p=10&a=view&r=30
1. 增加Chm帮助文档

2. 增加固定夹点显示

3. 增加对多线显示支持

4. 增加PL 线自交功能

5.增加 实体删除,并把内存释放功能

6.增加实体被选择后的通知事件

7.修改一些细节错误
 楼主| 发表于 2011-4-15 12:16 | 显示全部楼层
本帖最后由 mxdwg 于 2011-4-15 12:21 编辑

2011.04.14更新下载地址:
http://www.mxdraw.com/?p=10&a=view&r=38

1. 更加完善的标注接口,MxDrawX.ocx里,可以非常方便绘制标注实体,和访问和修改标注实体信息

2.增加标注接口的VB调用例程,详细可以参考sample\MxDrawXTestVB6.0
如绘制对齐标注的代码:
        
  1.   Private Sub DrawDimAligned_Click()
  2.             MxDrawX1,AddDimStyle "MyDimStyle", "41,0.18,141,0.09,40,200", "77,1,271,3", "3,""+HZ""", "342,0"
  3.             MxDrawX1.DimStyle = "MyDimStyle"

  4.             '把颜色改回黑白色
  5.             MxDrawX1.DrawColor = 0

  6.             '把线型改成实线
  7.             MxDrawX1.LineType = ""

  8.             '设置线宽 4
  9.             MxDrawX1.LineWidth = 0


  10.             MxDrawX1.DrawDimAligned 0, 4000, 300, 4500, 150, 4600

  11.             '把所有的实体都放到当前显示视区
  12.             MxDrawX1.ZoomAll

  13.             '更新视区显示
  14.             MxDrawX1.UpdateDisplay
  15.             End Sub

3. 完善标注接口文档,和帮助文档

4. 增加线型标注

5. 增加对齐标注

6. 增加半径标注

7. 增加直径标注




本帖子中包含更多资源

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

x
 楼主| 发表于 2011-5-30 10:34 | 显示全部楼层
本帖最后由 mxdwg 于 2011-5-30 10:52 编辑

2011.05.24更新下载地址

http://www.mxdraw.com/?p=10&a=view&r=39

1. 图层亮度显示控制,可以把一些不重要的图层变成灰色显示,函数如下

  1. // -------------------------------------------------------------------------
  2. // Summary:
  3. //   设置显示亮度,默认值为100%
  4. // Parameters:
  5. //   bright   - 亮度百分数,取值为0 ~100
  6. //  pszLayerName - 图层名,为空,就设置所有图层
  7. //  hOcx            -   控件句柄,为空取当前句柄
  8. //  isAutoUpDisplay -   是否自动更新显示
  9. // -------------------------------------------------------------------------
  10. static bool MxDraw::SetDisplayBright(BYTE bright,LPCTSTR pszLayerName = NULL,
  11.   MXDRAWOCXHANDLE hOcx = NULL,bool isAutoUpDisplay = true);
复制代码

2. 增加Undo功能,可以无限制的回退到以前任何操作状态.
   调用static bool        MxDraw::EnableUndo(bool isEnable);启用控件的undo功能
  1. // -------------------------------------------------------------------------
  2. // Summary:
  3. //   是否启用undo功能,控件为了节约内存和效率,默认控件是不启用的
  4. //  该函数只会影响将要创建的控件的undo功能,如果已经创建的控件不受影响.
  5. //  所以建议最好在InitMxDraw函数后调用.
  6. // Parameters:
  7. //   isEnable - 是否启用Undo.
  8. // Returns:
  9. //   返回设置前的undo启用状态.
  10. // -------------------------------------------------------------------------
  11. static bool         EnableUndo(bool isEnable);
复制代码

3. 增加如下一些函数 :
    A. Mx_PutEntityInView ,把一个实体放到视区中,
    B. Mx_SetBright, 设置当前显示亮度
    增加MxDraw::DrawImage函数,可以在控件中方便插入一个光栅图.,支持PNG透明图片
      
  1. // -------------------------------------------------------------------------
  2. // Summary:
  3. //   向当前图形上插入Image对象
  4. // Parameters:
  5. //  hOcx - 插入的控件名柄
  6. //   dPosX - 插入位置X坐标
  7. //   dPosY - 插入位置Y坐标
  8. //   dScale - 缩放比例
  9. //  dAng - 插入旋转角度,单位为度
  10. //  pszFilePath - Image文件名,可以是Http路径.
  11. //  blkRecId - 插入的块表记录,如果为空,插入当前模形空间中。
  12. // Returns:
  13. //   返回插入的图象对象id,如果id为空,插入失败,调用MxDraw::GetLastError()函数返回错误信息
  14. // -------------------------------------------------------------------------
  15. static McDbObjectId DrawImage(MxDraw::MXDRAWOCXHANDLE hOcx,LPCTSTR pszFilePath,DOUBLE dPosX, DOUBLE dPosY, DOUBLE

  16. dScale = 1.0,
  17.   DOUBLE dAng = 0.0,McDbObjectId blkRecId = McDbObjectId::kNull);
复制代码

    C. 增加获得控件CStatusBarInformationReactor状态条信息的反应器.

4. 增加打开DWG文件,可以指定那内容不需要读取,达到快速打开文件的功能

5. 增加图纸比较功能

6. 增加保存图纸可以设置密码,和打开有密码的DWG文件.

7. 增加图面批注接口,批注对象是自定实体实现

8. 增加电子图章接口,图章对象是自定实体实现

9. 修改布局打印,白色实体打印不出来,点划显示成小短线,等问题。




本帖子中包含更多资源

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

x
发表于 2011-5-30 11:12 | 显示全部楼层
楼主相当给力,我目前正在学习ARX,先学习学习,以后可以多交流~~
 楼主| 发表于 2011-8-19 10:55 | 显示全部楼层
2011.08.18更新下载地址

http://www.mxdraw.com/?p=10&a=view&r=40

1.   增加多行文字编辑功能,并提供源码,在samples\PropertyEditor\PropertyEditor.sln工程中
         

2.   增加MxGraph类,用于搜索CAD图上的曲线组成的图形,并创建图类型的数据结构,方便图面搜索使用,现在可以用它求两个曲线,或两点之间的最短路径
如:



  1. // 求两个曲线,之间的最短路径

  2. // 定义一个图对象
  3. MxGraph mxgraph;
  4. MrxDbgRbList spFilter = Mx::mcutBuildList(RTDXF0,_T("LINE,ARC,POLYLINE"),0);
  5. // 由一个曲线id1,创建图.
  6. if(mxgraph.Create(id1,spFilter.data()) != MxGraph::kOk)
  7. {
  8.   return false;
  9. }
  10. // 得到边id1在图中的编号
  11. long lNum11 = MXGRAPH_NULL_NUMBER;
  12. long lNum12 = MXGRAPH_NULL_NUMBER;
  13. if(!mxgraph.GetEdgeNumber(id1,lNum11,lNum12) )
  14.   return false;
  15. // 得到边id2在图中的编号
  16. long lNum21 = MXGRAPH_NULL_NUMBER;
  17. long lNum22 = MXGRAPH_NULL_NUMBER;
  18. if(!mxgraph.GetEdgeNumber(id2,lNum21,lNum22) )
  19.   return false;
  20. long lSNum = lNum11;
  21. long lENum = lNum21;
  22. {
  23.   std::vector<MxGraphVertex*> vecVertex;
  24.   std::vector<MxGraphEdge*>   vecEdge;
  25.   // 返回端点lNum11到端点lNum21的最短路径
  26.   mxgraph.GetShortestPath(lNum11,lNum21,vecVertex,vecEdge);
  27.   if(vecEdge[0]->GetId() == id1)
  28.   {
  29.    lSNum = lNum11;
  30.   }
  31.   else
  32.   {
  33.    lSNum = lNum12;
  34.   }
  35.   if( vecEdge[vecEdge.size() - 1]->GetId() == id2)
  36.   {
  37.    lENum = lNum21;
  38.   }
  39.   else
  40.   {
  41.    lENum = lNum22;
  42.   }
  43. }

  44. std::vector<MxGraphVertex*> vecVertex;
  45. std::vector<MxGraphEdge*>   vecEdge;
  46. mxgraph.GetShortestPath(lSNum,lENum,vecVertex,vecEdge);
  47. if(vecEdge.size() < 2
  48.   || vecEdge[0]->GetId() != id1
  49.   || vecEdge[vecEdge.size() - 1]->GetId() != id2
  50.   )
  51. {
  52.   return false;
  53. }
复制代码

3.   修改了一堆错误

发表于 2011-10-9 21:34 | 显示全部楼层
坚决支持!
 楼主| 发表于 2011-10-24 14:33 | 显示全部楼层
2011.10.23更新
http://www.mxdraw.com/?p=10&a=view&r=41

华军下载地址:
http://www.newhua.com/soft/100760.htm

更新内容:
1.增加视区变化通知接口
COM接口:事件名称 :Mx_ViewModify,如Js调用
function CustomEvent(sEventName)
{
  
if(sEventName == "Mx_ViewModify")
   {
var pParam = wdwg.CustomEventParam();
        // 得到当前视区显示的文档范围.
        // cent.x
        //alert( pParam.AtDouble(0));
        // cent.y
        // alert( pParam.AtDouble(1));
        // width
        //alert( pParam.AtDouble(2));
        // hieght
        //alert( pParam.AtDouble(3));
   }
}
VC接口:
CMxDrawFilterWinMsgObject::OnViewModify

2.增加Mx_DrawImageToBackground函数,把光栅图当着背景显示,VC接口为OpenBackgroundImageFile

3.增加,保存dwg图时,保存预览图功能,并把当前的显示范围也保存

4.命令行状态和多行文本编辑支持,右键菜单,复制粘贴,命令行窗口大小可以调用。并支持F2显示桌面窗口

5.保存的时候 ,是否自动备分,设置接口MxDraw::SetIsAutoBakFile

6.增加简化命令输入,和定制命令名

7.支持文件保存为二进流,和从二进制流加载图纸功能。
COM接口:ReadBinStream ,WriteBinStream
如VB代码:
            Dim aryData     As Variant
            MxDrawX1.WriteBinStream aryData, "", 23

            Dim ln As Long
            ln = UBound(aryData)

            ReDim sbyte(0 To ln) As Byte

            Dim str$
            For i = 0 To ln
                sbyte(i) = aryData(i)
                'str = str & " " & (aryData(i))
            Next

            'MsgBox str

            'MxDrawX1.ReadBinStream aryData, "", 16777215

            MxDrawX1.ReadBinStream sbyte, "", 16777215

8.修改布局名称支持中文

9.增加打印功能从图上选择打印范围 ,或取上一次打印范围等功能,输入打印范围
  同时增加:Mx_Print 接口,可以不出打印窗口,而直接打印,可以用这个接口实现批量打印
            例如:VB代码。

            '打印10,10,100,100范围的图纸到当前系统默认设置打印机
            Dim printParam As MxDrawResbuf
            Set printParam = New MxDrawResbuf
            ' 打印的左下角10,10
            printParam.AddDouble 10
            printParam.AddDouble 10

            ' 打印的右上角100,100
            printParam.AddDouble 100
            printParam.AddDouble 100

            ' 开始打印
            MxDrawX1.CallCustomFunctionEx "Mx_Print", printParam


10.命令行支持输入相对坐标,距离,输入关键字等功能

11.增加判断了图纸的改动接口,MxDraw::IsModifyed

12.增加保存jpg文件也能上传到服务器

13.修改AddLayer函数,有反删除功能

14.增加曲线的延长线相交

15.增加显示或隐基藏工具条上某个按钮功能,并增加工具条从服务器上的文件加载。

16.修改带形的线显示不对问题

17.增加OLE对象的读取与保存功能

18.增加自定义实体的CDC绘接口,用户可以使用CDC指定绘制图形,来实现更多的特殊的显示效果,使用该接口实现了一个DrawImageMark 函数,可以在图上绘一个图形标记,而它不会随视区的缩放而变化。
接口为 :MxDraw::DrawImageMark

19.增加PL线打碎功能。

发表于 2011-10-26 00:30 | 显示全部楼层
太牛了 厉害!!!
 楼主| 发表于 2011-12-5 12:33 | 显示全部楼层
2011.12.02更新下载地址
http://www.mxdraw.com/?p=10&a=view&r=42

1. 完善与用户交输入函数,并把与用户交的函数用类封装,源码在sample\MxMrxDbg中方便使用,详列表如下
  MrxDbgUiPrAngle 对应 acedGetAngle
  MrxDbgUiPrDist  对应 acedGetDist
  MrxDbgUiPrDouble对应 acedGetReal
  MrxDbgUiPrEntity对应 acedEntSel
  MrxDbgUiPrInt   对应 acedGetInt
  MrxDbgUiPrKeyWord 对应 acedGetKword
  MrxDbgUiPrPoint   对应 acedGetPoint
  MrxDbgUiPrString  对应 acedGetString
2. 新增加,剪切,延伸,导角,导圆角,打碎,绘多义线,绘多边线功能,源码在sample\MxEdit中
如 绘多边线的代码:




  1. void CMxDrawPolygon::Do()
  2. {
  3. MrxDbgUiPrIntDef getEdgeNum(_T("输入边的数目"),NULL,MrxDbgUiPrInt::kRange,s_iEdgeNum);
  4. getEdgeNum.setRange(3,3000);
  5. if(getEdgeNum.go() != MrxDbgUiPrBase::kOk)
  6.   return;

  7. s_iEdgeNum = getEdgeNum.value();

  8. MrxDbgUiPrPoint getCenterPoint(_T("指定正多边形的中心点或 [边(E)]"),_T("E"));
  9. MrxDbgUiPrBase::Status ret = getCenterPoint.go();

  10. if(ret == MrxDbgUiPrBase::kOk)
  11. {
  12.   // 点取多边形的中点.
  13.   McGePoint3d centerPoint = getCenterPoint.value();

  14.   MrxDbgUiPrKeyWordDef getKey(_T("[内接于圆(I)/外切于圆(C)]"),
  15.    _T("I C"),
  16.    s_isInternallyTangent ? _T("I") : _T("C"),
  17.    s_isInternallyTangent ? _T("内接") : _T("外切")
  18.    );

  19.   if(getKey.go() != MrxDbgUiPrBase::kOk)
  20.    return;

  21.   if(getKey.isKeyWordPicked(_T("I")) )
  22.   {
  23.    s_isInternallyTangent = true;
  24.   }
  25.   else if(getKey.isKeyWordPicked(_T("C")) )
  26.   {
  27.    s_isInternallyTangent = false;
  28.   }

  29.   //

  30.   MrxDbgUiPrDist getOtherDist(_T("指定圆的半径"),NULL,MrxDbgUiPrDist::kNoNegNoZero,centerPoint);

  31.   CMxDrawPolygonDragDraw dragDraw(centerPoint,s_isInternallyTangent,s_iEdgeNum);
  32.   getOtherDist.setUserDraw(&dragDraw);

  33.   if(getOtherDist.go() == MrxDbgUiPrBase::kOk)
  34.   {
  35.    double dDist = getOtherDist.value();
  36.    McDbPolyline* pPolyline = NULL;
  37.    if(getOtherDist.isKeyboardInput() )
  38.     pPolyline = dragDraw.GetObject(&dDist);
  39.    else
  40.     pPolyline = dragDraw.GetObject();

  41.    MrxDbgUtils::addToCurrentSpaceAndClose(pPolyline);
  42.   }
  43. }
  44. else if(ret == MrxDbgUiPrBase::kKeyWord)
  45. {
  46.   // 输入了关键字.
  47.   if(getCenterPoint.isKeyWordPicked(_T("E")))
  48.   {
  49.    // 由边绘制多边线。
  50.    MrxDbgUiPrPoint getFristPoint(_T("指定边的第一个端点"));
  51.    MrxDbgUiPrBase::Status ret = getFristPoint.go();
  52.    if(ret != MrxDbgUiPrBase::kOk)
  53.     return;

  54.    McGePoint3d firstPoint = getFristPoint.value();

  55.    MrxDbgUiPrPoint getSecondPoint(_T("指定边的第二个端点"));

  56.    CMxDrawPolygonFromTowPoint dragDraw(firstPoint,s_iEdgeNum);
  57.    getSecondPoint.setUserDraw(&dragDraw);

  58.    if(getSecondPoint.go() == MrxDbgUiPrBase::kOk)
  59.    {
  60.     McDbPolyline* pPolyline = dragDraw.GetObject(getSecondPoint.value());
  61.     MrxDbgUtils::addToCurrentSpaceAndClose(pPolyline);
  62.    }
  63.   }
  64. }
  65. }

复制代码


3. 完善绘直线,绘圆,绘圆弧,缩放,旋转命令
4. 增加把一个实体绘制到jpg文件函数
      
  1.   // -------------------------------------------------------------------------
  2. // Summary:
  3. //   把一个实体显示保存到一个jpg文件。
  4. // Parameters:
  5. //  pEnt   - 该实体可以是一个临时的对象,不需要求必须在数据库中
  6. //  sJpgFilePath - 保存的jpg文件路径
  7. //  iWidth   - jpg文件的像素宽度,-1默认为1000
  8. //  iHeight   - jpg文件的像素高度,-1默认为1000
  9. //  pBkColor  - 绘制的背景颜色,为空取当前背景颜色.
  10. //  pDatabase  - 数据库指针,传空,就取pEnt本身所在数据库。
  11. // Returns:
  12. //   成功返TRUE
  13. // -------------------------------------------------------------------------
  14. static BOOL MxDraw::DrawEntityToJpg(
  15.   IN McDbEntity* pEnt,
  16.   IN CString sJpgFilePath,
  17.   IN int iWidth = -1,
  18.   IN int iHeight = -1,
  19.   IN COLORREF* pBkColor  = NULL,
  20.   IN McDbDatabase* pDatabase = NULL);
复制代码

本帖子中包含更多资源

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

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-7 17:44 , Processed in 0.215753 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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