找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1393|回复: 3

[分享] 一个AutoLisper的.Net初步

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-4-13 23:49:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
一个AutoLisper的.Net初步

Autolisp作为纯业余爱好用了十几年,各种计算机语言只是知道一个名字(基本是一个文盲水平),就会一点点Autolisp,大概一年前知道了AutoCAD的.Net,就有了学一学的冲动,但一直是心动没有行动,其中也看了一些AutoCAD .Net源码,最近一个月看了 50 几页的C#基础,然后这几天动手写了几十行代码,从一个Lisper的角度结合Autolisp经验写一写心得

C#是面向对象的一种语言,有了AutoLisp基础和Autodesk的ActiveX经验学习AutoCAD的C#会容易一些,因为ActiveX也是面向对象的应用,从这个角度去学习理解Autodesk的C#更便捷,在对象这个角度由ActiveX理解C#也容易些,至于其中的空间、类、变量、数据、类型等也可以从Lisp的角度去理解,下面从一个Lisper(仅仅AutoLisp)角度写一写一周的感受

以下纯属个人心得,非专业

1 C#基础

Autodesk 中用到的C#没有那么难,但是一些基础语法得学

a. 变量

在Autolisp中变量在基础不过了

(setq doc (vla-get-activedocument (vla-get-acad-object)))

C#中叫做声明和赋值

Document doc = Application.DocumentManager.MdiActiveDocument;

Document 是一个对象,doc 就是一个变量,= 后面就是赋值

在Lisp中变量和值是统一的,doc既是变量也是值,在C#中变量(指针)和值是不同的,有一个比喻,用篮子(地址)装水果(值),变量(指针)是指向这个篮子(地址), lisp中用defun定义一个函数,这个defun可以理解C#中的声明(public、private)、类(class)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 19个

财富等级: 恭喜发财

发表于 2014-4-14 09:08:22 | 显示全部楼层
大师,只会点LISP好学C#吗?值得学吗?

点评

好学,我这零基础都找到台阶了  详情 回复 发表于 2014-4-14 11:01
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

 楼主| 发表于 2014-4-14 11:01:37 | 显示全部楼层
Lisphk 发表于 2014-4-14 09:08
大师,只会点LISP好学C#吗?值得学吗?

好学,我这零基础都找到台阶了{:soso_e100:}
更多图片 小图 大图
组图打开中,请稍候......
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

 楼主| 发表于 2014-4-14 11:06:07 | 显示全部楼层
一天的学习成果
  1. [LispFunction("GetStretchPoint")]//定义一个函数名称,Lispfuction
  2.         public static ResultBuffer getStretchPoint (ResultBuffer rb)//要用返回值模式 ResultBuffer
  3.         {
  4.             ResultBuffer resultBuffer = new ResultBuffer();//初始化返回值链表
  5.             Document document = Application.DocumentManager.MdiActiveDocument;//当前文档
  6.             Transaction trtTransaction = document .TransactionManager.StartTransaction();//事务处理
  7.             using (trtTransaction)
  8.             {
  9.                 try
  10.                 {
  11.                     //参数不能为 nil
  12.                     if (rb != null)
  13.                     {
  14.                         TypedValue[] rbArr = rb.AsArray(); //Convoert to Array
  15.                         TypedValue entId = rbArr[0];//取出第一个参数
  16.                         //并且是 Entity 并且只有一个参数
  17.                         if (entId.TypeCode == (int)LispDataType.ObjectId && rbArr.Length == 1)
  18.                         {
  19.                             ObjectId objId =  (ObjectId)entId.Value;//将第一个参数转换为Object
  20.                             Entity entity = (Entity) trtTransaction.GetObject(objId , OpenMode.ForRead, false);//转换为Entity
  21.                             Point3dCollection pnts = new Point3dCollection();//初始化一个保存StretchPoints 的集合
  22.                             entity.GetStretchPoints(pnts);//获取Entity的StretchPoints赋给 pnts
  23.                             //将 获取的 Pnts 中的值加入到返回值
  24.                             foreach (Point3d pnt in pnts)
  25.                             {
  26.                                 resultBuffer.Add(new TypedValue((int)LispDataType.Point3d, pnt));
  27.                             };
  28.                         }
  29.                     }
  30.                     trtTransaction.Commit();//提交事务处理
  31.                     return resultBuffer;//返回值
  32.                 }
  33.                     //错误处理暂时还没有学到
  34.                 catch (Exception)
  35.                 {
  36.                     
  37.                     throw;
  38.                 }
  39.             }
  40.         }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-26 19:14 , Processed in 0.187426 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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