明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 39319|回复: 107

TeaScript 编程(二次开发AutoCAD、Lisp写windows应用程序)

    [复制链接]
发表于 2012-5-27 17:28 | 显示全部楼层 |阅读模式
本帖最后由 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 应用,数据库......

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 4明经币 +6 收起 理由
0451doctor + 1 很给力!
redcat + 1 支持aroom重出江湖^_^
lohas1118 + 1 很给力!
Gu_xl + 3 赞一个!很好的礼物,希望楼主继续逐步深入介.

查看全部评分

 楼主| 发表于 2012-5-28 11:23 | 显示全部楼层
本帖最后由 aroom 于 2012-8-23 12:46 编辑

【TeaScript软件下载】



【文件列表】

TeaScript.exe                       算子脚本引擎(控制台界面)
TeaScript_w.exe                  算子脚本引擎(图形界面链接库)


TSIDE.exe                           算子语言程序设计开发环境(图形界面)
IDE.dll                                 用于加载IDE组件的动态链接库


更多源代码共享,请加入 TeaScript 算子编程交流QQ群:7326594 (已满), 255433035

更多详细介绍,请参阅近期出版的《算子》(Programming In TeaScript)一书。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2012-5-28 08:33 | 显示全部楼层
本帖最后由 aroom 于 2012-5-28 08:34 编辑

;;; 写个OpenGL的例子

(importAll "opengl32.dll")
(importAll "freeglut.dll")

(setq GL_COLOR_BUFFER_BIT  0x00004000
      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 "")

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 1 反对 0

使用道具 举报

发表于 2020-3-4 10:51 | 显示全部楼层
aroom 发表于 2012-6-5 12:03
TeaScript 扩展 Excel 应用开发

;; 启动 Excel 并获取 Application 对象

可以实现智能提示和自动补全功能吗
发表于 2018-7-14 22:21 | 显示全部楼层
这么旧的帖子都被找出来了,好几年没消息了吧……别想了,作者并不在乎有多少人使用,要这个东西及相关的资料,都是要钱的。
发表于 2012-5-27 17:41 | 显示全部楼层
关注一下,附件在哪?
 楼主| 发表于 2012-5-27 17:44 | 显示全部楼层
本帖最后由 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)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2012-5-27 17:46 | 显示全部楼层
cnks 发表于 2012-5-27 17:41
关注一下,附件在哪?

QQ群:7326594 共享下载
发表于 2012-5-27 17:49 | 显示全部楼层
aroom 发表于 2012-5-27 17:46
QQ群:7326594 共享下载

不如在论坛上传一份
发表于 2012-5-27 18:13 | 显示全部楼层
算子,是个什么语言呢?
 楼主| 发表于 2012-5-27 18:18 | 显示全部楼层
wangph 发表于 2012-5-27 18:13
算子,是个什么语言呢?

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 套节字界面使得它很容易编写网络应用程序。
发表于 2012-5-27 19:53 | 显示全部楼层
不如在论坛上传一份

这个强烈同意,加到群里,要是被踢出来,多没面子
 楼主| 发表于 2012-5-27 19:53 | 显示全部楼层
本帖最后由 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
;;; 可以直接执行源程序文件


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2012-5-27 20:00 | 显示全部楼层
不如在论坛上传一份
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-19 08:22 , Processed in 0.213149 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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