当前位置: 首页 > news >正文

Lisp 与 C# 交互中,类型码(TypeCode)的映射关系

在 AutoCAD 的 Lisp 与 C# 交互中,Lisp 数据类型与对应的类型码(TypeCode)及 C# 类型存在明确映射关系。以下是常见类型的对应表:

Lisp数据类型类型码(TypeCode)对应的C#类型说明
整数(Integer)5003short16位整数
整数(Long)5010int32位整数
实数(Real)5001double双精度浮点数
字符串(String)5005string文本字符串
选择集(SelectionSet)5007ObjectId(选择集ID)代表一组对象的集合,需解析获取内部ID
对象ID(ObjectId)5006ObjectId单个对象在数据库中的唯一标识符
点(Point)5009Point3d / Point2d三维/二维点坐标
列表(List)5000ResultBuffer / TypedValue[]由多个TypedValue组成的列表
图元名(Entity name)5006ObjectId与ObjectId等价,Lisp中显示为ename
空值(Nil)5002null空值


关键类型说明:
5006(ObjectId)
Lisp 中通过ssname提取的单个对象 ID(如(ssname ss 0))属于此类型。
C# 中直接转换为ObjectId类型:(ObjectId)tv.Value。
5007(选择集)
Lisp 中通过ssget获取的选择集整体属于此类型(如ss变量)。
C# 中需先转换为选择集 ID(ObjectId),再通过事务打开选择集提取内部对象 ID。
数值类型区分
5003(short)、5010(int)、5001(double)分别对应不同精度的数值,转换时需匹配类型码。
代码中判断示例:
csharp
foreach (TypedValue tv in tvs)
{
switch (tv.TypeCode)
{
case 5006: // ObjectId
ObjectId id = (ObjectId)tv.Value;
break;
case 5007: // 选择集
ObjectId ssId = (ObjectId)tv.Value;
// 解析选择集...
break;
case 5001: // double
double value = (double)tv.Value;
break;
// 其他类型判断...
}
}
掌握这些对应关系可以准确解析 Lisp 传递的参数,避免类型不匹配导致的错误。

       private static ResultBuffer BuildLispDataStructure(List<List<Pair<ObjectId, string>>> groupedResults)
{
ResultBuffer rb = new ResultBuffer();

           // 完全扁平化处理:遍历所有分组和所有对象,不添加任何分组括号
// 所有"对象-级别"对直接作为顶级元素并列存在
foreach (var group in groupedResults)
{
foreach (var pair in group)
{
// 每个"对象-级别"对作为独立子列表,直接添加到结果中
rb.Add(new TypedValue((int)LispDataType.ListBegin));
rb.Add(new TypedValue((int)LispDataType.ObjectId, pair.First)); // 对象ID
rb.Add(new TypedValue((int)LispDataType.Int32, int.Parse(pair.Second))); // 级别
rb.Add(new TypedValue((int)LispDataType.ListEnd));
}
}

           // 整个结果没有外层分组括号,所有子列表完全并列
return rb;
}

传递选择集; 定义MYC命令,直接传递整个选择集(类型码5007)给C#
(DEFUN C:myc (/ ss)
(setvar "cmdecho" 0)
(princ "\n请选择多段线:")
(setq ss (ssget '((0 . "LWPOLYLINE")))) ; 获取选择集(类型码5007)

(if (and ss (> (sslength ss) 0))
(progn
(princ (strcat "\n已选择 " (itoa (sslength ss)) " 个多段线,开始处理..."))

; 直接传递整个选择集和精度值给C#
; 选择集参数类型为5007,精度值为5001
(fixyuanhuanselectver2 ss)
)
(princ "\n未选择任何多段线,操作取消")
)
(setvar "cmdecho" 1)
(princ)
)
传递objectid(DEFUN C:myc(/ I LST OBJL1 outlist)
(setvar "cmdecho" 0)
;;;    (file_1)
(print "\n请选择多义线:")
(setq objl1(ssget '((0 . "lwpolyline"))))
(if objl1
(progn
(setq i 0 outlist null)
(repeat (sslength objl1)
(if (= i 0)
(setq outlist (list (ssname objl1 i)))
(setq outlist (append outlist(list (ssname objl1 i))))
)
(setq  i (+ i 1))
)
(doubletext outlist)
)  
)  
(princ)

http://www.dtcms.com/a/405899.html

相关文章:

  • Java基础(十四):枚举类详解
  • python+springboot+uniapp基于微信小程序的任务打卡系统
  • 【多线程】计算机领域中的各种锁
  • python+uniapp基于微信小程序的医院陪诊预约系统
  • 免费html网页模板 html5网站模板 静态网页模板
  • 网站怎么做区域性优化公司网站建设会计上怎么处理
  • 专业商城网站建设价格定制家具网
  • ABCTorrents官网入口 – 磁力搜索引擎网站
  • python+django/flask+uniapp基于微信小程序的瑜伽体验课预约系统
  • 设计模式(C++)详解——解释器模式(1)
  • iOS 26 系统流畅度深度剖析,Liquid Glass 视效与界面滑动的实际测评
  • mysql asp网站2001国产卡一卡二新区
  • Docker容器化部署简要指南
  • 一文掌握 Apache SeaTunnel 构建系统与分发基础架构
  • 【数据结构】常用数据结构深度剖析
  • 适合小型网络公司的建站方式可以为网络黄页推广大全4
  • 男女性直接做的视频网站网页首页管理系统
  • 数字孪生 3D 风电场:HT 海上风电智慧化解决方案
  • 示波器使用,查看3d线扫相机的问题
  • 【汽车篇】基于深度学习的2D+3D整车漆面外观缺陷检测
  • (14)ASP.NET Core2.2 中的日志记录
  • Three.js 开发实战教程(五):外部 3D 模型加载与优化实战
  • SpringBoot 整合机器学习框架 Weka 实战操作详解:从 0 到 1 构建可扩展的智能预测微服务
  • 【qml-10】Quick3D实现机器人渲染(mesh)记录
  • 解构IDP未来前景:去中心化金融的“阳谋”与以人为本的生态蓝图(解读)
  • 怎么做淘宝网站百度公司招聘官网最新招聘
  • 【国标36964解读】《软件工程软件开发成本度量规范》(GB/T36964-2018)解读
  • 在 Windows 11 上从零复现 3D Gaussian Splatting (3DGS)
  • 软件设计师软考备战:第五篇 软件工程与项目管理
  • 接口访问速度突然变慢,怎么排查