UG模具网

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[原创] 在网页中绘图,并为新绘的对象写扩展数,和读取扩展数据 [MXDRAW CAD控件文档]

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

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

    [LV.2]偶尔看看I

    0

    主题

    0

    帖子

    -91

    金币

    乞丐

    积分
    -75
    发表于 2018-8-8 16:09:57 | 显示全部楼层 |阅读模式

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

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

    x
    下面帮助的完整例子,在控件安装目录的Sample\Ie\ iedemo.htm中.- [$ t/ o' |: L3 _4 j. k9 f1 v6 {
    1.主要用到函数说明! S3 F4 @: a7 x) I( @; U$ S3 }5 x
      N7 P' |% w" F! I
    A.InsertBlock  @/ H8 o3 V. M% Y; W$ {
    向数据库中插入一个图块,DWG图块文件可以是本地文件,也可以是网络文件 ; Y! w* s; M& n- v. n+ u- J
    详细说明如下:函数成功返回1,失败返回02 k, a2 [: S1 U: w; o' g' ~
    参数         说明
    1 F9 n. E' M+ F& sBSTR pszDwgFileName         图块定义的dwg 文件,支持http://开头的网络路径.
    ) R2 Y3 O0 A; t' ]1 S8 W  eBSTR pszBlockName         新插入的图块名
    # m% a0 X( Z3 D
    & w' j6 W  g# S* i) a/ W8 ?4 o. d7 y4 q* o6 E: _  ^
    B.DrawBlockReference
    + I( N/ C4 M2 o- r( M8 @4 Y, e: O- V绘制一个块引用对象,返回新绘的对象id.
    # C0 V# Z% H7 I% D. b详细说明如下:
    4 n+ {3 N# q, u  x: x4 ~参数         说明 ( ]% |# [& m4 G4 r
    DOUBLE dPosX         插入点的X坐标
    9 l/ _; {8 R6 E0 V; d: ]6 W0 VDOUBLE dPosY         插入点的Y坐标 6 d; D1 g6 X  e& n* Y
    BSTR pszBlkName         图块名
    8 U& Y8 p0 y: N" }/ d9 U% Z. q$ MDOUBLE dScale         图块缩放比例
    * x* K& b. f7 GDOUBLE dAng         图块的旋转角度
    3 h0 I, Z8 S# T4 @1 I
    / o3 ]" |1 u$ u# o* c' P$ t, d: t: cC.MxDrawDatabase::ObjectIdToObject
    ' x' C; [% g: E4 [4 v8 q由实体id返回实体对象
    , d6 z1 P8 B- d* s& L
    % L, l& l. K: K* R3 }$ d3 XD.MxDrawEntity::SetXData
    ! z- \8 ~9 {# @( P  \$ q   设置实体的扩展数据
    $ N; I; K; w! I, b3 g详细说明如下:( K  S- {& V3 L9 }5 o
    参数         说明
    % q+ A8 _! f& M( z# n[in] IMxDrawResbuf* pXData         扩展数据链表
    - `5 l# z) S  l# {: L, V& a5 I
    4 p0 ~) z/ l+ z  A  u" c" ^E.MxDrawEntity::GetXData
    ' b6 S4 d& n) A0 k$ ^" U1 I4 x返回实体的扩展数据
    - x* ?9 ~2 L6 B
    . I( N. j6 u3 s2.JS中实现代码说明1 n7 ^6 z. |0 y* w4 L! s
    绘制一个块引用对象,并向新绘的对象写一个扩展数据,比如GUID,用来标识它。) m  o' x4 f. V( e' F7 k' X2 ^
    // 得到网页中的控件对象
    2 R  b  j, X: E+ u5 `, J/ a mxOcx = document.all.item("MxDrawXCtrl");
    4 ?: S  R1 R( B) t! kmxOcx.focus();
    2 \7 P# j' Y7 J
    " m0 F4 ]7 g5 D: ^  b: m把服务器上的dwg文件,插入到控件中,也可以是一个本地文件.
    % b2 [. X9 P5 pif(mxOcx.InsertBlock("http://www.mxdraw.com/downland/test.dwg","MyBlkName") != 0)
    ' G1 X  J+ ~& c# p{9 M* M7 X3 A: y' A
            // 与用户交互,从图上点取一个插入点.
    / R- r+ x3 x$ B    var point = mxOcx.GetPoint(null,"\n 点插入点:");! ?! F7 `$ l2 c" I; P
            if(point == null)$ E2 V. u  i: B3 q0 `% A; r
            {. k: o- ]3 D. y9 W; [$ m
                    // 用点击了取消键.
    - M( `7 T( g1 e. J9 n                return;
    & u* w) a3 j. A* r# w: P) y5 @% V        }0 {6 B6 a# p! A* Q' Q$ o
            // 绘制一个块引用对象,point.x,point.y是插入位置,MyBlkName是引用的块表记录名称.) v1 E6 k: _) }$ c2 s! g$ o4 m8 c, f
        var blkRefId = mxOcx.DrawBlockReference(point.x,point.y,"MyBlkName",1.0,0.0);  w. L, t" H& H1 M( @
    $ V( ^+ T; I2 w8 K  N( |
        // 得到控件的数据库对象.
    , f* |5 w0 l! R/ \* N; ^                8 l: ]+ i5 l' Y2 X( [5 S4 g0 x
        var database = mxOcx.GetDatabase();7 B- J# A/ T3 u! V# q* w
        //由块引用对象id,得到块引用实体.
    ( {- F4 ^$ ?; ^- G    var ent = database.ObjectIdToObject(blkRefId);
    5 W  D$ c! ^1 m8 d7 t2 S! y. F0 S; |$ Y* A3 R" S' c  r' l
        if(ent == null), S% ^  N9 v+ {8 w% F5 s
        {
    5 b0 c- k  t3 q+ F7 C* P          alert("插入失败");
    5 ?( p' n5 p4 `! ~3 q! O. \                return;
    * h5 P4 f9 ?7 E0 Y! V, x3 N* `     }* w2 l) \2 _& X% f6 }% u

    7 E8 ^, ~' f) y5 b                // 为新插入的对象写一个扩展数据,值为"guid val 324322"
    ! T- G6 O# A# ?3 L$ z8 w         WriteGuid("guid val 324322",ent,mxOcx)2 x/ Q* Q1 y4 H) U

    ) v& F1 F: i" S" c% ]" y# B* K                // 缩放视区,把所有实体都放到视区中显示./ T2 R# y! U0 g6 ^2 z3 a* M, f' ]0 ~/ Y
             mxOcx.ZoomAll();
    ) m7 u  R. q9 D1 D) z( P9 Y                alert("插入成功");2 C7 Z0 D/ S" t. q1 n1 C; y
         }
    % B# }1 g( r4 w6 j  Y     else
    ( d; o2 r, M+ u  k3 d     {7 Q( _' L% v( \. J/ t
                    alert("插入失败");# \. w' Q+ c0 o, _5 T- K; h0 s( n
         }  N' _9 r4 M5 |) D8 O" w$ h/ u
    }* f" a9 a6 C5 M

    $ L1 P) H, }/ t7 a& @+ l& H  S3 }% y* |5 v' P
    读取扩展数据4 u, X4 i' |6 V' f7 Z
    // 得到网页中的控件对象.
    * M" |+ ]0 \9 F. ^var mxOcx = document.all.item("MxDrawXCtrl");& R; r2 }$ C& ]9 q

    ' p* X4 M; c1 V" u' V// 与用户交互,在图上选择一个实体! G/ }2 Y; {. B9 s( T8 }- L; e
    var ent = mxOcx.GetEntity("选择要读扩展数据的实体:");$ P2 q0 ]1 X$ s) P' V4 K5 @
    if(ent == null)
    6 T; D: j6 d& a/ ]' g  {
    0 z4 }; G; }8 y( e                        // 用户取消了选择.' g8 m2 h0 q+ q  h3 }" a
              return;
    0 z! ]0 Q& \  [}, `3 ^& T0 v0 L* G; }% A0 l- ]
            // 得到WriteGuid函数写的扩展数据.7 X! b, B* O- _) r3 z
      alert(ReadGuid(ent) );, T. Q- z; D5 q1 q2 k: X9 p

      s  I+ j" X# H9 [+ @1 l0 Q2 d( k4 @  B+ G3 @# b6 ]9 B7 j/ F% x5 G
    写扩展数据8 {8 s/ m0 V1 H0 w3 m+ m
    % A2 H8 P7 t  o& c  I2 _5 y0 }' c
    function WriteGuid(guid,ent,mxOcx)
    6 A, N! A3 R% Y# V! S{' f; Q9 B# p3 A* F. {
                    // 创建一个扩展数据连表对象.2 ^" m' [8 R( W; P9 e6 v
                    var exData = mxOcx.CallCustomFunction("Mx_NewResbuf","");  A) g3 D& I+ x3 \
                   
      v+ x& g9 i7 y5 I  ], k9 K                // 添一个扩展数据,应用程序名,1001是AutoCAD dxf组码,表示"对象标注id数据"是一个扩展数据名称.+ F% q* o2 y" k: v0 b8 k0 b( J: U0 w
                    exData.AddString("对象标注id数据",1001);9 {! l1 ~3 f( V  K
                      C6 E# ]; c/ P# H8 N
                    // 设置一个字符串扩展数据,1000是AutoCAD dxf组码,表示是一个字符串2 ~9 q# t* y* S. o5 `+ {
                            exData.AddString(guid,1000);
    , e: y# H+ G$ ?4 Y9 f) Q2 t# F: [6 \
                    // 设置对象扩展数据.
    ' W" j& R) ~% Y4 a) x  O3 z                ent.SetXData(exData);( D- m. d5 r1 L
    }
    瑞洪模具学校,专业的模具设计培训!招生热线:13535692060 咨询:18138921941 唐老师
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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

    GMT+8, 2020-3-29 07:08 , Processed in 0.536031 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

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