通过API执行AutoCAD命令来…

大家知道AutoCAD功能丰富,而更可贵的是,这么多丰富的功能背后都有一个命令,有些东西,直接用API调用写起来可能很费劲或者无法实现,可如果能用命令的话却很简单,这时候我们就可以通过API来调用AutoCAD命令来实现通用的效果,简单而强大。

比如今天有人问,如何在AutoCAD里加入wmf文件,应用的场景是在图纸中加入设计人审核人的电子签名。其实通过搜索能很容易的找到这篇文章:

http://adndevblog.typepad.com/autocad/2013/01/insert-a-wmf-file-multiple-times.html

但他提到不懂里面的ARX语句是干什么的:

acedCommand(RTSTR,_T("_wmfin"),RTSTR,A_WmfFile, RT3DPOINT,point1,RTSTR,"",RTSTR,"", RTREAL, 0,0,RTNONE);

这个其实也不高深,就是用API调用了AutoCAD的 wmfin命令。

在.net环境下同样也可以做类似的事。比如下面的c#代码,在图纸中插入一个wmf文件:

        [CommandMethod("MyGroup", "InsertWmf", "InsertWmf", CommandFlags.Modal)]        public void MyCommand() // This method can have any name        {            // Put your command code here            Document doc = Application.DocumentManager.MdiActiveDocument;            Editor ed;            if (doc != null)            {                ed = doc.Editor;

                //save the filedia sysvar                var filedia_old = Application.GetSystemVariable("filedia");                //set filedia to 0, not open the file dialogue                Application.SetSystemVariable("filedia", 0);

                Point3d pnt = ed.GetPoint("select a point to insert:\n").Value;

                string wmfPath = @"C:\TEMP\flower.WMF";

                ed.Command("_.wmfin",  //command name                    wmfPath,            //wmf file path                    pnt,                //insert point                    1,                  //scale X                    1,                  //scale Y                    0.0);               //rotation

                //restore file dialogue sys var                Application.SetSystemVariable("filedia", filedia_old);            }        }

另外,还可以使用p/invoke的方式调用ARX里的acedCommand方法,这里有个很好的例子

最后,通过API调用AutoCAD命令时,最佳实践是使用前缀 _.英文命令 的方式,这样不管在任何语言的AutoCAD下都可以正常运行,具体介绍请看这里

时间: 2024-10-13 19:48:08

通过API执行AutoCAD命令来…的相关文章

C#执行cmd命令

Process p = new Process();//创建进程对象 p.StartInfo.FileName = "cmd.exe";//设定需要执行的命令 // startInfo.Arguments = "/C " + command;//"/C"表示执行完命令后马上退出 p.StartInfo.UseShellExecute = false;//不使用系统外壳程序启动 p.StartInfo.RedirectStandardInput =

C# 动态执行批处理命令

本文转载:http://www.cnblogs.com/lenic/p/4097045.html C# 动态执行一系列控制台命令,并允许实时显示出来执行结果时,可以使用下面的函数.可以达到的效果为: 持续的输入:控制台可以持续使用输入流写入后续的命令 大数据量的输出:不会因为大数据量的输出导致程序阻塞 友好的 API:直接输入需要执行的命令字符串即可 函数原型为: /// <summary> /// 打开控制台执行拼接完成的批处理命令字符串 /// </summary> /// &

Android WebView执行GPU命令的过程分析

Android WebView使用的Chromium引擎,虽然没有自己的GPU进程或者线程,但是却可以执行GPU命令.原来,Android WebView会给它提供一个In-Process Command Buffer GL接口.通过这个接口,Chromium引擎就可以将GPU命令提交给App的Render Thread执行.本文接下来就详细分析Android WebView执行GPU命令的过程. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 从前面Ch

java通过ssh2远程连接计算机并执行linux命令的方法(转)

java通过ch.ethz.ssh2远程连接计算机并执行linux命令的方法实现 API详情:  http://www.ganymed.ethz.ch/ssh2/javadoc/ch/ethz/ssh2/package-summary.html jar包:  ganymed-ssh2-build210.jar    下载地址: http://www.ganymed.ethz.ch/ssh2/ 代码实现: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1

Android JAVA代码执行shell命令

Android中级篇之用JAVA代码执行shell命令 [日期:2011-12-08] 来源:Linux社区  作者:y13872888163    在Android可能有的系统信息没有直接提供API接口来访问,为了获取系统信息时我们就要在用shell指令来获取信息,这时我们可以在代码中来执行命令 ,这里主要用到ProcessBuilder 这个类. 代码部分  : 1.package com.yin.system_analysis; 2.import java.io.File; 3.impor

Zabbix配置动作执行远程命令和发送邮件

当有事件发生,我们可以根据事件来执行相应的动作,根据事件来源可以分为触发器动作,自动发现动作,自动注册动作,内部事件动作,自动发现动作在之前的自动发现那里讲过了,这里介绍一下触发器动作,当触发器事件达到执行动作的必要条件,会执行相应的动作 1.配置邮件告警动作 首先创建一个触发器动作,触发报警会发送邮件定义动作触发条件定义动作执行的操作,这里是执行发送消息的操作,步骤1-5表示会发送5次消息,默认每次的间隔是30分钟这里我们定义了1-5步执行的操作,就是每隔30分钟,将消息通过'zabbix_s

Java程序远程无法执行nohup命令

问题的上下文: 由于生产无法使用 jenkins 发布,所以采用 ch.ethz.ssh2 或叫 ganymed-ssh2 的开源 java 的 ssh api 进行远程发布. 在发起重启时,远程执行 nohup 命令: nohup java -jar taiping-$project-3.jar --spring.profiles.active=prod >> nohup.out & 发现代码执行了,但是项目并没有实际启动. 网上说是 ganymed-ssh2 不能使用 nohup命

批量执行shell命令

虽然目前都实现了自动化如puppet saltstack在环境中的应用,但工作中不可避免的要自己写一些简单的批量执行shell命令的脚本. python paramiko模块是目前使用得较为顺手的模块,执行命令时基本无需要转换,直接将shell命令扔进去执行就OK 简单示例,10个线程同时执行ssh或scp动作,未设置timeout时间,如执行长时间无反应会导致脚本执行问题: #!/usr/bin/python # _*_ coding: utf-8 _*_ import paramiko im

使用sh库执行shell命令

python中执行shell命令 之前执行shell命令多是通过os.system(shell命令)的方式来执行,比较麻烦. 了解到sh是一个比subprocess好的库,能够执行shell命令 1.查看ip: [[email protected] myblog]# ifconfigeth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 172.31.253.193 netmask 255.255.240.0 broadcas