明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

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

.net Api怎么实现Lisp里面(textscr)函数的功能

  [复制链接]
发表于 2009-9-3 19:18:00 | 显示全部楼层
 ublic Sub Command(ByVal ParamArray args() As Object)
这样声明
 楼主| 发表于 2009-9-3 19:20:00 | 显示全部楼层

这个问题已经解决啦,但是为什么   

<CommandMethod("tscr")> Sub TextScr()
        Dim CmdStr() As Object = {"RECTANG", New Point2d(0, 0), New Point2d(1, 1)}

        Command(CmdStr)
        'Dim doc As Document = Application.DocumentManager.MdiActiveDocument
        'doc.Editor.WriteMessage("\nHi")
    End Sub

就会出错呢?

 楼主| 发表于 2009-9-3 20:20:00 | 显示全部楼层
经版主指点,这样的代码可以正确执行:
VB.net Code:
  1. Imports System
  2. Imports System.Runtime.InteropServices
  3. Imports Autodesk.AutoCAD.Runtime
  4. Imports Autodesk.AutoCAD.DatabaseServices
  5. Imports Autodesk.AutoCAD.EditorInput
  6. Imports Autodesk.AutoCAD.ApplicationServices
  7. Module Example
  8.     <DllImport("acad.exe")> Public Function acedCmd(ByVal vlist As IntPtr) As Integer
  9.     End Function
  10.     Public Sub Command(ByVal args() As Object)
  11.         Dim rb As ResultBuffer
  12.         Dim val As Object
  13.         For Each val In args
  14.             rb = New ResultBuffer()
  15.             If (val Is Nothing) Then
  16.                 rb.Add(New TypedValue(CInt(LispDataType.Text), ""))
  17.             Else
  18.                 Select Case val.GetType().Name
  19.                     Case "String"
  20.                         rb.Add(New TypedValue(CInt(LispDataType.Text), val))
  21.                         Exit Select
  22.                     Case "Point2d"
  23.                         rb.Add(New TypedValue(CInt(LispDataType.Point2d), val))
  24.                         Exit Select
  25.                     Case "Point3d"
  26.                         rb.Add(New TypedValue(CInt(LispDataType.Point3d), val))
  27.                         Exit Select
  28.                     Case "ObjectId"
  29.                         rb.Add(New TypedValue(CInt(LispDataType.ObjectId), val))
  30.                         Exit Select
  31.                     Case "SelectionSet"
  32.                         rb.Add(New TypedValue(CInt(LispDataType.SelectionSet), val))
  33.                         Exit Select
  34.                     Case "Double"
  35.                         rb.Add(New TypedValue(CInt(LispDataType.Double), val))
  36.                         Exit Select
  37.                     Case "Int16"
  38.                         rb.Add(New TypedValue(CInt(LispDataType.Int16), val))
  39.                         Exit Select
  40.                     Case "Int32"
  41.                         rb.Add(New TypedValue(CInt(LispDataType.Int32), val))
  42.                         Exit Select
  43.                     Case "TypedValue"
  44.                         rb.Add(val)
  45.                         Exit Select
  46.                 End Select
  47.             End If
  48.             Try
  49.                 acedCmd(rb.UnmanagedObject)
  50.             Catch
  51.             Finally
  52.                 rb.Dispose()
  53.             End Try
  54.         Next val
  55.     End Sub
  56. End Module
发表于 2009-9-8 22:48:00 | 显示全部楼层

在theswamp看过你的贴了:)

总结下,解决方案如下

1、引用acmgdinternal.dll

Autodesk.AutoCAD.Internal.Utils.TextScr()

Autodesk.AutoCAD.Internal.Utils.GraphScr()

2、P/Invoke

        [DllImport("acad.exe")]
        private static extern int acedTextScr();

        [DllImport("acad.exe")]
        private static extern int acedGraphScr();

        public static bool DisplayTextScreen
        {
            set
            {
                if (value)
                    acedTextScr();
                else
                    acedGraphScr();
            }
        }


        [CommandMethod("ts1")]
        public static void tt1()
        {
            DisplayTextScreen = true;
        }

        [CommandMethod("ts2")]
        public static void tt2()
        {
            DisplayTextScreen = false;
        }

3、AutoCad2010最简单

Application.DisplayTextScreen = true;

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

本版积分规则

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

GMT+8, 2024-11-26 10:42 , Processed in 0.152050 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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