UG模具网

 找回密码
 注册

QQ登录

只需一步,快速开始

瑞洪模具学校UG专业培训招生
查看: 65|回复: 0

[原创] 在网页中引用DWG控件,交互绘图,和响应鼠标点击对象的方法 [MXDRAW CAD控件文档]

[复制链接]
  • TA的每日心情

    2018-8-30 08:48
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    0

    主题

    0

    帖子

    -91

    金币

    乞丐

    积分
    -75
    发表于 2018-8-8 15:37:06 | 显示全部楼层 |阅读模式

    马上注册,结交更多好友,享用更多功能,让你轻松学习交流!

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

    x
    下面帮助的完整例子,在控件安装目录的Sample\Ie\iedemo.htm中./ R4 i. G# A: v+ x: }
    1. 主要用到函数说明* J2 N! l; u7 O$ ^, R+ |$ y) G
    A. ImplementCommandEventFun! L! z; a$ g) a
    控件的命令事件函数,与用户交互的操作,需要放到命令事件函数内实现,这样控件才能保证正常的Windows 消息循环被处理。
    3 F( X; j) h* U! }& LB. ImplementMouseEventFun& G* Z$ b9 b: b+ |) @; C; M
    控件的鼠标事件函数,可以用JS程序里,响应鼠标事件,详细说明如下:
    ' b1 P4 P" j0 b( U* Gvoid MouseEvent(LONG lType, DOUBLE dX, DOUBLE dY, LONG* lRet);5 {8 u, J% Q& C- H6 b, a
    LONG lType         事件类型,1鼠标移动,2是鼠标左键按下,3是鼠标右键按下,4是鼠标左键双击 5是鼠标左键释放 6是鼠标右键释放 7是鼠标中键按下 8是鼠标中键释放 9是鼠标中键双击 10是鼠标中键滚动 9 P- Y0 @* @+ z' A
    DOUBLE dX         事件发生时的鼠标X坐标,文档坐标
    ( I' P8 d( b- S! b1 O0 V- ZDOUBLE dY         事件发生时的鼠标Y坐标,文档坐标
    $ `2 `# Q- J4 L5 h* QLONG* lRet         lRet 返回非0,消息将不在往下传递
    $ ~0 P! g% G* i7 Y. tC.       DrawLine
    8 |( D0 }# a! A/ ]! j, n* L) Q用于在DWG图上绘制一条直线,详细说明如下:. b1 M. A$ s+ T1 c6 E* ^
    参数         说明 * ^9 l. a+ {1 Y5 q
    DOUBLE dX1         直线的开始点x坐标 7 i+ `, Y( s, P) V' _: ~
    DOUBLE dY1         直线的开始点y坐标 ! p; x% }7 i1 d" m' y
    DOUBLE dX2         直线的结束点x坐标 ! ^8 T% r# y, b0 O+ a
    DOUBLE dY2         直线的结束点y坐标
    3 I0 o  l4 O/ T3 q- }* o4 jD.      IMxDrawSelectionSet::SelectAtPoint2
    8 u6 t: v2 d. y" D返回一点坐标下面的实体对象,可以设置过滤条件,返回某层,某类型等属性的对象。
    ( u- k  x0 b3 r2.      JS中实现代码说明8 s5 y! L% h0 [8 o! B4 ]" o1 B
    A.      在网页中引用控件,
    ( D/ W  i; v: U! Fclsid: 74A777F8-7A8F-4e7c-AF47-7074828086E2是控件的GUID.
    : ?- `$ _1 V" v4 ?% X1 [4 Z控件程序可以做成CAB安装包,并可进行数据签名,方便网页中自动安装下载.! c9 I& {  f4 ^( U
    详细参考例子:http://www.mxdraw.com/iedemo.html4 O  ^( ?( A" L
       <objectclassid="clsid: 74A777F8-7A8F-4e7c-AF47-7074828086E2"id="MxDrawXCtrl" codebase="http://www.mxdraw.com/MxDrawX.CAB#version=1,0,0,1"width=100% height=90%> , e& a) n. {% M: S+ y: f: q
                              <paramname="_Version" value="65536">7 s! r0 A6 `: \0 T
                              <paramname="_ExtentX" value="24262">
    2 Q7 K6 F+ Z8 P% S4 h; r                          <paramname="_ExtentY" value="16219">
    1 `* B7 }3 E3 n- o% h1 p                          <paramname="_StockProps" value="0">: W/ {: e$ g8 Q/ x0 r4 Q4 m7 F4 ?
                                <!--<param name="DwgFilePath"value="http://www.mxdraw.com/downland/test.dwg"> -->
    * M9 E( B4 }% f9 I+ R8 A4 z                            <paramname="IsRuningAtIE" value="1">
    $ p+ n' w0 v; Y0 F* q+ j# Q4 q+ A% W5 N                            <paramname="EnablePrintCmd" value="1">* c+ B- w6 [! H' }
                                <paramname="ShowStatusBar" value="1">
    0 j: H+ j& a0 J1 }% W7 ]1 Q& w# m' L: L                            <paramname="ShowMenuBar" value="1">
    3 v, T2 w! K  ^. {8 A                            <paramname="ShowToolBars" value="1">
    % a  X( Q0 B. C3 J/ d# Q4 m, |                            <paramname="ShowCommandWindow" value="1">
    : |3 ~% R" w* N3 k" E, m                            <paramname="ShowModelBar" value="1">
    ) ]+ j) a7 i( z5 K) {' T9 M                            <paramname="IniFilePath"value="AutoActive=N,LoadMrx=PropertyEditor.mrx">
    ! v2 k) V0 c! k% Q2 I5 |                       <param name="ToolBarFiles" value="MxDraw-ToolBar.mxt,MxDraw-ToolBar-DrawParam.mxt,MxDraw-ToolBar-Draw.mxt,MxDraw-ToolBar-Edit.mxt">' _/ _5 w) P1 {1 f/ |5 O7 n( @
      </object>
    % k' v4 n! D% q  W$ b+ d3 x0 s) ~<script>
    / q" F; w# I; \4 F 
    7 d+ i2 A6 l' a, M' H; HB.       设置命令事件回调函数
    2 K( I2 \/ j6 r% d+ {5 r+ odocument.getElementById("MxDrawXCtrl").ImplementCommandEventFun= DoCommandEventFunc;) U( F# G5 L+ V+ }5 \
    C.      设置鼠标事件回调函数2 t. b, X3 }6 a7 {
    document.getElementById("MxDrawXCtrl").ImplementMouseEventFun= MouseEvent;
    3 W7 `, [1 j  R6 wD.      在命令事件交互绘制一条直线
    " `, U& @3 X  n: Z该事件将会被,网页中的myclick按钮点击触发,如下:
    7 T% F  H6 Q$ Q' I; {function myclick(); e$ Q9 ?% c0 D: W; K
    {" B3 j6 D& N' v; g/ j: ?2 _
           document.getElementById("MxDrawXCtrl").DoCommand(1);, G4 ?: A/ }  ?  g2 }
    }
    8 F; ?& l; p& J9 w: r下面是绘制直线代码:- _- g2 {( b+ U7 U+ v# J5 l. F
    function DoCommandEventFunc(iCmd)
    0 y: B, b. {1 @; ^3 A( X{- d* m* v3 ]2 j/ k  d, w- O
         // 命令事件ID.. g. T) R9 i! k
        if (iCmd == 1)
    $ ?- ^1 l# `3 |3 B( c1 z    {
    6 i& T6 I7 d  H          // 得到网页的中的控件对象.
    ' q$ _  _- ^$ }% |5 @                   varmxOcx = document.all.item("MxDrawXCtrl");$ K+ m# ^" a5 z4 W0 d
                mxOcx.focus();
      E6 a5 G  Q, J2 L# p6 Q2 L; |  G) m                   varpoint1 = mxOcx.GetPoint(null,"\n 点取开始点:");- }5 I* a+ i+ c
                       if(point1== null)( w& K/ S, k) @6 g5 s
                       {
    ! N* O* F8 ]7 t+ E% v* @3 y/ p                       return;
    , a# C0 D  b) p2 b$ w( b                   }- c5 F0 Y( p3 ^
                       varpoint2 = mxOcx.GetPoint(point1,"\n 点取结束点:");& ]/ A' P+ {0 r' i' C9 @
                       if(point1== null)
    , S, B+ X0 _& V% o& i                   {9 a2 e) _# r8 q# b
                           return;
    + L  Z# B# X/ d, J                   }
    ; U: N' T1 c7 I% }4 K' ~         // 绘制一条直线.* y3 A7 u, E7 I3 J" T5 f# z- P. N
            mxOcx.DrawLine(point1.x,point1.y,point2.x,point2.y);
    5 ?$ h& K( o* ~         }
    6 O; B0 q6 W( t& d+ T4 @1 v}9 k8 E; R/ c. A% \3 |0 T) N
     5 t; v3 n  l) E# y. l+ B
    E.       在鼠标事件中得到鼠标点击的对象.
    ! J8 q8 U4 ~+ r0 {7 b: afunction MouseEvent(dX,dY,lType)
    , y4 x7 s1 c& R# l" |{) n% A" u# b7 X% @( P
         // 4是鼠标左键双击# A: w0 k) m1 V8 D
             if(lType== 4)
    $ [5 w* s* A) x$ U, Z7 I         {! h) b  e' g- ~6 F
              // 得到网页的中的控件对象   2 k3 [' ?/ {& @# t5 v8 }
                       varaxMxDrawX1 = document.getElementById("MxDrawXCtrl");
    $ K3 Y0 C4 I& n0 }- c         // 创建一个选择集对象
    9 ?4 D# W# E- K                   varss = axMxDrawX1.CallCustomFunction("Mx_NewSelectionSet","");9 ^. x; {6 J* U
             // 创建一个点对象
    * I3 Z$ n" G, B3 r0 k( ^                   varpt = axMxDrawX1.CallCustomFunction("Mx_NewPoint","");7 \# _4 s; w' e. V5 ?
             // 创建一个过滤条件对象
    5 F% _) ?" [* q' r! |" \          var fil= axMxDrawX1.CallCustomFunction("Mx_NewResbuf","");+ E2 ?0 b) i8 z* S1 ~
             // 把鼠标点击坐标,赋值给点对象.+ N# Y4 X6 Z3 Z  |8 K/ B% T
    pt.x = dX;
    5 y% {3 d5 N! |/ o9 W         pt.y =dY;5 {, r9 b7 X- J& ^+ `4 f1 Q- s
              // 在该点处构造选择集.
    ' q2 e. u& @* b2 n6 \         ss.SelectAtPoint2(pt,fil);
    . z% ]# F5 J# z+ ?/ x. q$ f          //ss.Coune是选择集中对象数目- D* |; R9 j. J: W. d
               if(ss.Count > 0)% [( y# d, C( a
                         {
    2 M4 P, r- {" p0 S; i                 // 得到选择集中的第一个点对象.
    , n0 i1 C8 c9 S' F. j! }; A                         var ent = ss.Item(0);
    - r; n/ V- Q+ ?3 }+ n" ^: Y* P9 e                 // 输出信息.
    # S1 D9 m* |) e" `' M  E                         alert("点击了" + ent.ObjectName + "对象");
      [+ [6 ^0 X& b3 c6 I2 v. o9 T" O                }
    - x. n! a( C5 J# C3 L: ~! x                 // 取消后面的命令。
    / b! ?( K! d2 C  s8 P% l           axMxDrawX1.SendStringToExecute("");3 x5 j" D0 b" D2 W& w0 K& y5 V
                       return1;2 a$ j7 ?( z" G' d$ S1 G
            }  B2 p0 y1 p( j5 E. F" z
             return 0;. Z/ X5 L* ?- H  U; k1 g* ^
    }
    1 Q: l8 v2 j0 V" ?
    瑞洪模具学校,专业的模具设计培训!招生热线:13535692060 咨询:18138921941 唐老师
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    QQ|小黑屋|手机版|Archiver|UG模具网 ( 粤ICP备10229226号 )

    GMT+8, 2020-3-29 07:51 , Processed in 0.480027 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

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