CAD交互绘制块引用对象(网页版)

主要用到函数说明:

_DMxDrawX::DrawBlockReference

绘制块引用对象。详细说明如下:

参数说明

DOUBLE dPosX

插入点的X坐标

DOUBLE dPosY

插入点的Y坐标

BSTR pszBlkName

图块名

DOUBLE dScale

图块缩放比例

DOUBLE dAng

图块的旋转角度

js中实现代码说明:

动态拖放时的绘制事件:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

function DoDynWorldDrawFun(dX,dY,pWorldDraw,pData)

{

    var sGuid = pData.Guid;

   mxOcx.SetEventRet(0);

    if(sGuid == "TestDynDraw")

    {

        //动态插入图块

        // 与用户交互到在图上提取一个点

        var firstPt =  pData.GetPoint("pt1");

        if(firstPt == null)

            return;

        //与用户交互,从命令中取字符串

        var sBlkName =  pData.GetString("BlkName");

        var secondPt = mxOcx.NewPoint();

        secondPt.x = dX;

        secondPt.y = dY;

        //计算this点减去pPoint,得到的向量

        var vec = firstPt.SumVector(secondPt);

        //返回向量顺时针转到与X轴的角度.[0,2PI)

        var dAng = vec.Angle();

        //绘制块引用对象

        //参数一为插入点的X坐标;参数二为插入点的Y坐标;

        //参数三为图块名;参数四为图块缩放比例;参数五为图块的旋转角度

        pWorldDraw.DrawBlockReference(firstPt.x,firstPt.y,sBlkName,1.0,dAng * 180.0 / 3.14159265 + 90.0);

        //设置自定义事件的返回值

        mxOcx.SetEventRet(1);

    }

    else if (sGuid == "TestDynDraw1") {

        var sBlkName = pData.GetString("BlkName");

        //绘制块引用对象

        pWorldDraw.DrawBlockReference(dX, dY, sBlkName, 1.0, 0.0);

    }

     

}

动态插入图块:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

function DynInsert() {

    var sBlkName = "Tree";

    //用户需要出入图块的路径   控件程序在磁盘的文件路径

    var sBlkFile = mxOcx.GetOcxAppPath() + "\\Blk\\树.dwg";

    //向控件数据库中插入一个图块,不用它插入匿名块

    mxOcx.InsertBlock(sBlkFile, "Tree");

    //新建一个COM组件对象

    var getPt = mxOcx.NewComObject("IMxDrawUiPrPoint");

    getPt.message = "点取插入点";

    //初始动态绘制

    var spDrawData1 = getPt.InitUserDraw("TestDynDraw1");

    //设置string类型的属性

   spDrawData1.SetString("BlkName","Tree");

    if (getPt.go() != 1) {

        return;

    }

    var frstPt = getPt.value();

    if (frstPt == null) {

        return;

    }

    var getSecondPt = mxOcx.NewComObject("IMxDrawUiPrPoint");

    var spDrawData = getSecondPt.InitUserDraw("TestDynDraw");

    getSecondPt.message = "点取旋转角度";

    //得到点时的拖放基点

    getSecondPt.basePoint = frstPt;

    //设置是否启用拖放基点   true:使用,false:不使用

    getSecondPt.setUseBasePt(true);

    //设置point类型的属性

    spDrawData.SetPoint("pt1", frstPt);

    //设置string类型的属性

    spDrawData.SetString("BlkName""Tree");

    if (getSecondPt.go() != 1) {

        return;

    }

    //把实体绘制到图上。一般用于动态拖放时,在拖放结束时,绘制到图上

    var ret = spDrawData.Draw();

    // 给属性块写文字.

    var blkRef = ret.AtObject(0);

    if (blkRef != null)

    {

          var param = mxOcx.NewResbuf();

         blkRef.SetProp("createAttribute",param);

    }

}

效果展示:

用户可以通过点击插入图片按钮,将在js代码中设置的图片插入到CAD控件视区得任何位置。如下图所示:

draw14.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值