明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: fiyone

editor.command(),用户命令能使用选择集么

[复制链接]
 楼主| 发表于 2014-7-20 08:40:38 | 显示全部楼层
本帖最后由 fiyone 于 2014-7-20 11:09 编辑

下面是我用editor.command 实现的把直线转换为多段线的方法。
注意在选择集后面要加上一个双引号,里面什么也不填,类似命令里面的空格或回车。不然命令会失败
还有就是如果在Transaction里面使用命令,一定要记得acTrans.Commit()提交,不然命令也会失败。
利用acedCmd也可以实现,这个命令是给低版本autocad用的。过几天我把vb代码贴上来,主要是参考9楼的代码,做了转化。谢谢。

           Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
            '' 创建一个 TypedValue 数组,用于定义过滤条件
            Dim acTypValAr(0) As TypedValue
            acTypValAr.SetValue(New TypedValue(DxfCode.Start, "line"), 0)
             '' 赋值过滤条件给 SelectionFilter 对象
            Dim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr)
            '' 要求在图形区域中选择对象
            Dim acSSPrompt As PromptSelectionResult
             acSSPrompt = ed.SelectAll(acSelFtr)
            '' 如果提示状态是 OK,对象就被选择了
            If acSSPrompt.Status = PromptStatus.OK Then
                Dim acSSet As SelectionSet = acSSPrompt.Value
                ed.Command("_PEDIT", "_M", acSSet, "", "_Y", "_J", 0, "")
            End If
 楼主| 发表于 2014-7-28 09:49:22 | 显示全部楼层
同样的命令用acedCmd实现
Private Declare Auto Function acedCmd Lib "acad.exe" _
                (ByVal vlist As System.IntPtr) As Integer
    <CommandMethod("FF3")> Public Sub FF3()
        Dim acDocEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor
        '' 创建一个 TypedValue 数组,用于定义过滤条件    Create a TypedValue array to define the filter criteria
        Dim acTypValAr(0) As TypedValue
        acTypValAr.SetValue(New TypedValue(DxfCode.Start, "LINE"), 0)
        '' 赋值过滤条件给 SelectionFilter 对象    Assign the filter criteria to a SelectionFilter object
        Dim acSelFtr As SelectionFilter = New SelectionFilter(acTypValAr)
        '' 要求在图形区域中选择对象    Request for objects to be selected in the drawing area
        Dim acSSPrompt As PromptSelectionResult
        acSSPrompt = acDocEd.SelectAll(acSelFtr)
        ' 如果提示状态是 OK,对象就被选择了    If the prompt status is OK,n  objects were selected
        If acSSPrompt.Status = PromptStatus.OK Then
            Dim acSSet As SelectionSet = acSSPrompt.Value
            Dim rb As ResultBuffer = New ResultBuffer
            rb.Add(New TypedValue(5005, "_PEDIT"))
            rb.Add(New TypedValue(5005, "_M"))
            rb.Add(New TypedValue(5007, acSSet))
            rb.Add(New TypedValue(5005, ""))
            rb.Add(New TypedValue(5005, "_Y"))
            rb.Add(New TypedValue(5005, "_J"))
            rb.Add(New TypedValue(5001, 0))
            rb.Add(New TypedValue(5005, ""))
            acedCmd(rb.UnmanagedObject)
        Else
            Application.ShowAlertDialog("Number of objects selected: 0")
        End If
    End Sub
发表于 2014-8-7 16:03:02 | 显示全部楼层
学习,顶!!
发表于 2014-8-7 17:23:55 | 显示全部楼层
牛,学习!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 12:33 , Processed in 0.151463 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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