设为首页收藏本站

晓东CAD家园-论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

12
返回列表 发新帖
楼主: csharp

[原创] 点监视器和Hook的结合应用

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2018-2-26 15:42:28 | 显示全部楼层
转换一下VB.net

Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.Runtime

Public Class MyCommands

    Const WM_KEYDOWN As Integer = 256
    Const WM_KEYUP As Integer = 257
    Const WM_SYSKEYDOWN As Integer = 260
    Const WM_SYSKEYUP As Integer = 261

    Private _curEditor As Editor
    Private _mObjectId As ObjectId = ObjectId.Null

    Private _mScalefactor As Double
    Private _mTolerance As Tolerance

    Private Sub UpDownKeyHandler(ByVal sender As Object, ByVal e As PreTranslateMessageEventArgs)
        Select Case e.Message.message
            Case WM_KEYDOWN
                Dim ptr = e.Message.wParam.ToInt32()
                Select Case ptr
                    Case 37
                        If _mScalefactor > 0.5 Then
                            _mScalefactor -= 0.1
                        End If
                        Exit Select
                    Case 39
                        _mScalefactor += 0.1
                        Exit Select
                    Case Else
                        Exit Select
                End Select
                Exit Select
            Case WM_SYSKEYDOWN
                Exit Select
            Case WM_KEYUP
                Exit Select
            Case WM_SYSKEYUP
                Exit Select
            Case Else
                Exit Select
        End Select
    End Sub



    Private Sub My_PointMonitor(ByVal sender As Object, ByVal e As PointMonitorEventArgs)
        If _mObjectId = ObjectId.Null Then
            Return
        End If
        Dim db = Application.DocumentManager.MdiActiveDocument.Database
        Try
            Using tr = db.TransactionManager.StartTransaction()
                Dim scl = _mScalefactor
                Dim blk = CType(tr.GetObject(_mObjectId, OpenMode.ForWrite), BlockReference)
                If blk IsNot Nothing Then
                    If Not blk.Position.IsEqualTo(e.Context.ComputedPoint) Then
                        blk.Position = e.Context.ComputedPoint
                    End If
                    blk.ScaleFactors = New Scale3d(scl)
                End If
                tr.Commit()
            End Using
        Catch generatedExceptionName As System.Exception
            Throw
        End Try
    End Sub

    <CommandMethod("myinsert")> _
    Public Sub MyInsert()
        Dim doc = Application.DocumentManager.MdiActiveDocument
        _curEditor = doc.Editor
        _mTolerance = New Tolerance(0.001, 0.001)
        _mScalefactor = 1.0
        Dim db = doc.Database
        Try
            Dim peo As New PromptEntityOptions(vbLf & "Select Insert")
            peo.SetRejectMessage("**Only Insert*")
            peo.AddAllowedClass(GetType(BlockReference), True)
            Dim per = _curEditor.GetEntity(peo)
            If per.Status <> PromptStatus.OK Then
                Return
            End If
            _mObjectId = per.ObjectId
            AddHandler Application.PreTranslateMessage, AddressOf UpDownKeyHandler
            AddHandler _curEditor.PointMonitor, AddressOf My_PointMonitor
            Dim ppo = New PromptPointOptions(vbLf & "Position")
            Dim ppr = _curEditor.GetPoint(ppo)
            If ppr.Status <> PromptStatus.OK Then
                Return
            End If
            RemoveHandler Application.PreTranslateMessage, AddressOf UpDownKeyHandler
            RemoveHandler _curEditor.PointMonitor, AddressOf My_PointMonitor
        Catch generatedExceptionName As System.Exception
            _curEditor.WriteMessage(vbLf & "*error*")
        Finally
            RemoveHandler Application.PreTranslateMessage, AddressOf UpDownKeyHandler
            RemoveHandler _curEditor.PointMonitor, AddressOf My_PointMonitor
        End Try
    End Sub


End Class

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

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

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

使用道具 举报

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

使用道具 举报

已领礼包: 7个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 57个

财富等级: 招财进宝

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

使用道具 举报

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

使用道具 举报

已领礼包: 57个

财富等级: 招财进宝

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

使用道具 举报

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

使用道具 举报

已领礼包: 8个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 82个

财富等级: 招财进宝

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

使用道具 举报

点击这里给我发消息

已领礼包: 2958个

财富等级: 家财万贯

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2020-8-6 03:36 , Processed in 0.079941 second(s), 68 queries , Gzip On, WinCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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