TeaScript 编程(二次开发AutoCAD、Lisp写windows应用程序)
本帖最后由 aroom 于 2012-5-30 13:59 编辑除了AutoLisp,Visual Lisp,ObjectArx 你还可以用动态语言来做AutoCAD二次开发?
《算子》(TeaScript)给你一种不同的编程方法,将 AutoCAD 实体给 windows 操作系统,用OS 共享库直接扩展 AutoCAD 应用程序。
你可以在另外的进程空间做AutoCAD,Sketchup......
喜欢Lisp的爱好者,可以用TeaScript IDE 写 Lisp 程序,不用开打厚重的 AutoCAD 中 Visual Lisp,它们的界面很像,调试也非常方便。
使用 Lisp 的编程基础来开发 web 应用,数据库......
本帖最后由 aroom 于 2012-8-23 12:46 编辑
【TeaScript软件下载】
【文件列表】
TeaScript.exe 算子脚本引擎(控制台界面)
TeaScript_w.exe 算子脚本引擎(图形界面链接库)
TSIDE.exe 算子语言程序设计开发环境(图形界面)
IDE.dll 用于加载IDE组件的动态链接库
更多源代码共享,请加入 TeaScript 算子编程交流QQ群:7326594 (已满), 255433035
更多详细介绍,请参阅近期出版的《算子》(Programming In TeaScript)一书。
本帖最后由 aroom 于 2012-5-28 08:34 编辑
;;; 写个OpenGL的例子
(importAll "opengl32.dll")
(importAll "freeglut.dll")
(setq GL_COLOR_BUFFER_BIT0x00004000
GL_TRIANGLES 0x0004
GLUT_DOUBLE 0x0002
GLUT_SINGLE 0x0000
GLUT_RGB 0x0000
GLUT_RGBA 0x0000
PI (* (acos 0) 2)
rotx 0.0 roty 0.0)
(defun draw ()
(glClear GL_COLOR_BUFFER_BIT )
(glRotated rotx 0.0 1.0 0.0)
(glRotated roty 1.0 0.0 0.0)
(glutWireTeapot 0.5)
(glutSwapBuffers)
)
(defun rotation ()
(setq rotx (% (- (float rotx) .01) PI)
roty (% (- (float roty) .012) PI))
(sleep 30)
(glutPostRedisplay)
)
(defun keyboard (key x y)
(if (= (& key 0xFF) 27) (exit))
(println "key:" (& key 0xFF) " x:" x" y:" y)
(println "you press a key")
)
(defun mouse (button state x y)
(if (= state 0)
(glutIdleFunc 0) ; auto-motion off on button press
(progn
(println "you click mouse button")
(glutIdleFunc (callback 5 'rotation))) ; auto-motinn on
)
(println "button: " button " state:" state " x:" x " y:" y)
)
(defun motion (x y)
(setq rotx (* (/ 200.0 x) PI)
roty (* (/ 150.0 y) PI))
(glutPostRedisplay)
(println "x:" x" y:" y))
(defun main (argc argv)
(glutInit (address argc) (address argv))
(glutInitDisplayMode (| GLUT_RGB GLUT_DOUBLE ))
(glutInitWindowSize 800 600)
(glutInitWindowPosition 80 80)
(setq id (glutCreateWindow "算子语言调用OpenGL示例 - 拖动鼠标 - 按ESC键退出"))
(glClearColor (flt 0.5) (flt 0.3) (flt 0.3) (flt 0.0))
(glColor3d 1.0 0.85 0.35)
(glutDisplayFunc (callback 0 'draw))
(glutKeyboardFunc (callback 1 'keyboard))
(glutMouseFunc (callback 2 'mouse))
(glutMotionFunc (callback 3 'motion))
(glutIdleFunc (callback 4 'rotation))
(glutMainLoop)
)
(main 0 "")
aroom 发表于 2012-6-5 12:03
TeaScript 扩展 Excel 应用开发
;; 启动 Excel 并获取 Application 对象
可以实现智能提示和自动补全功能吗 这么旧的帖子都被找出来了,好几年没消息了吧……别想了,作者并不在乎有多少人使用,要这个东西及相关的资料,都是要钱的。 关注一下,附件在哪? 本帖最后由 aroom 于 2012-5-28 08:27 编辑
T eaScript 扩展 AutoCAD 二次开发
;; 建立 Application 对象,若 AutoCAD 已启动,则直接获取,若未启动,则运行AutoCAD
(setq acad (GetOrCreateObject "autocad.Application"))
;; 使 AutoCAD 程序主窗口可见
(setq acad.Visible 1)
;; 获取当前图形文件的模型空间(所有图形实体都位于此符号目录下)
(setq dwg acad.activedocument.modelspace)
(dwg.addLine '(0. 0. 0.) '(500. 500. 0.)) ;; 画一条直线
(dwg.addCircle '(100. 100. 0.) 500.) ;; 画一个圆
(setq txt (dwg.addText "TeaScript" '(100. 100. 0.) 100.)) ;; 写 "TeaScript" 文字
(setq txt.color 1) ;; 将文字字体设为红色
;; 更新修改的内容 使其在窗口中可见
(acad.update)
;; 缩放 AutoCAD 图形窗口,使所有的图形实体均可见
(acad.zoomAll)
;; 关闭 AutoCAD 程序
(acad.quit)
;; 释放 AutoCAD Application 对象
(ReleaseObject acad)
cnks 发表于 2012-5-27 17:41 static/image/common/back.gif
关注一下,附件在哪?
QQ群:7326594 共享下载 aroom 发表于 2012-5-27 17:46 static/image/common/back.gif
QQ群:7326594 共享下载
不如在论坛上传一份 算子,是个什么语言呢? wangph 发表于 2012-5-27 18:13 static/image/common/back.gif
算子,是个什么语言呢?
TeaScript 是一个动态的面向对象的函数式编程语言,它的特点如下:
1. TVM 引擎支持 Lisp、JavaScript、Python、Ruby、Lua、Pascal、Basic 等多种语法。
2. TVM 超微型内核引擎(不足500kb),拥有几百个实用函数。 内核模块非常紧凑,所需系统资源很
小,因此与其他语言相比加载执行起来更加快速。
3. TVM 建立在通用的UNIX系统的C语言库函数基础上, 可以运行在各种操作系统平台,如
Windows(95 98 2000 xp win7),Linux,BSDs,Mac OS等。
4. TVM 引擎可以进行源代码链接,生成独立的可执行文件。
5. TVM 引擎以共享库库的方式可以嵌入到宿主系统中,可作为应用开发的语言平台。
6. 动态脚本语言,简单易学,模块化集成,同时具有教学语言的优点: 透明和友好提示。
7. 支持符号单元运算, 任何符号都可以用作定义计算的行为,突破了以往计算机编程汉字仅能作
为字符串数据来处理的局面, 可将任何符号(例如:中文、简繁体汉字、少数民族语言文字)作
为计算机代码来运行。
8. 面向对象,基于原型继承。
9. 函数式编程涵盖LISP语言抽象语法、独特的符号、表达式处理等突出特点。
10. 同时拥有 C 语言的访问底层数据单元,执行系统操作的灵活快捷的特点,和 C 语言一样可以定
义结构,访问结构成员和进行指针操作。
11. 动态语言弱类型,数据使用前无需宣告声明。 而C语言在编译的过程中须明确操作数的内存单元
大小和长度,因此使用前必须事先申明变量符号和函数符号的数据类型。
12. 集中强化符号和表达式的处理和操作。包括修改,插入,删除复杂嵌套列表和多维数组结构中的
元素。
13. 具有多态函数的特点,参与函数运算的参数类型不限和参数个数不限,这使得定义函数有很强的
灵活性。
14. 函数是特殊的列表,可以象操作列表一样来对函数进行组合和拆分。 除了定义函数外,还可以
用宏实现在重构表达式。
15. 支持流的输入输出操作,可以包含控制字符的二进制数据访问。
16. 支持Perl语言兼容的正则表达式(PCRE)文本处理。
17. 具有内存垃圾自动收集的功能。当对象不再被引用时,它们所占用的内存空间自动被回收后再利
用。
18. 拥有对象、符号目录,供多人协作完成的大型软件项目,既可以引用他人的目标模块,又可以避
免变量或函数重名的覆盖危险。
6
19. 除了使用内建函数外,还可以通过导入共享库来进行功能扩展。 比如调用 windows 操作系统的
库函数来实现GUI界面,使用 COM 对象、.NET 框架等等。
20. TeaScript 可运用于分布计算、科学统计、图形与图像和人工智能领域。 HTTP、 TCP/IP 和
UDP 套节字界面使得它很容易编写网络应用程序。 不如在论坛上传一份
这个强烈同意,加到群里,要是被踢出来,多没面子 本帖最后由 aroom 于 2012-6-5 00:45 编辑
使用 DLL 动态链接库创建 Win32 GUI 程序
;;;1、导入WIN32的系统库,使各个库中所有的外部输出函数加载到TeaScript引擎中。
(importAll "kernel32.dll")
(importAll "user32.dll")
(importAll "gdi32")
;;; 2、定义常量,参考windows.h 文件,使用常量定义,使程序上下文容易理解
(setq WS_OVERLAPPEDWINDOW 13565952)
(setq IDI_APPLICATION 32512)
(setq IDC_ARROW 32512)
(setq WHITE_BRUSH 0)
(setq WM_CREATE 1)
(setq WM_DESTROY 2)
(setq WM_MOVE 3)
(setq WM_SIZE 5)
(setq WM_PAINT 15)
(setq WM_CLOSE 16)
(setq WM_NOTIFY 78)
47
(setq WM_COMMAND 273)
;;; 3、定义用到的结构,参考windows.h 文件,结构成员名字依次排列,每个成员默认4个字节长度
(structDef WNDCLASSEXA cbSize style lpfnWndProc cbClsExtra cbWndExtra hInstance hIcon
hCursor hbrBackground lpszMenuName lpszClassName hIconSm)
(structDef MSG hwnd message wParam lParam time pt_x pt_y)
(structDef OPENFILENAME lStructSize hwndOwner hInstance lpstrFilter lpstrCustomFilter
nMaxCustFilter nFilterIndex lpstrFile nMaxFile lpstrFileTitle nMaxFileTitle
lpstrInitialDir lpstrTitle Flags (nFileOffset "d") (nFileExtension "d")
lpstrDefExt lCustData lpfnHook lpTemplateName)
;;; 4、定义回调函数,处理各种不同的消息,由windows系统来调用
(defun myWndProc (hwnd message wParam lParam)
(println message) ;;; 显示你接收到的消息
(cond
((== message WM_CREATE))
((== message WM_CLOSE) (MessageBoxA hwnd "单击了关闭按钮,退出程序。" "TeaScript提示"
0)
(DefWindowProcA hwnd message wParam lParam))
((== message WM_DESTROY) (PostQuitMessage 0))
(true (DefWindowProcA hwnd message wParam lParam))))
;;; 5、定义主函数
(defun MyWindow ( / ClassName Caption uMsg wndclass)
(setq hInstance (GetModuleHandleA 0))
(setq ClassName "mywindow")
(setq Caption "TeaScript编写的一个窗口")
;;; 创建一个窗口类结构
(setq wndclass (new Struct WNDCLASSEXA))
(setq wndclass.cbSize (sizeof WNDCLASSEXA))
;;; 将上面定义的回调函数绑定到窗口类结构成员中
(setq wndclass.lpfnWndProc (callback 0 myWndProc))
(setq wndclass.hInstance hInstance)
(setq wndclass.hIcon (LoadIconA 0 IDI_APPLICATION))
(setq wndclass.hCursor (LoadCursorA 0 IDC_ARROW))
(setq wndclass.lpszClassName &ClassName)
;;; 注册窗口类
(RegisterClassExA &wndclass)
;;; 创建窗口
(setq myhwnd (CreateWindowExA 0 ClassName Caption WS_OVERLAPPEDWINDOW 200 200 400
300 0 0 hInstance 0))
;;; 显示窗口
(ShowWindow myhwnd 1)
(UpdateWindow myhwnd)
;;; 创建一个消息类型的结构
(setq uMsg (new Struct MSG))
;;; 进入消息循环处理,直到窗口关闭时退出循环
(while (> (GetMessageA &uMsg 0 0 0) 0)
(TranslateMessage &uMsg)
(DispatchMessageA &uMsg)))
;;; 6、开始运行
(MyWindow)
;;; 命令行输入:
;;; TeaScript TeaScript_win32_window.lsp
;;; 可以直接执行源程序文件
不如在论坛上传一份