乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 258|回复: 14

创建编程对象

[复制链接]

26

主题

128

帖子

2

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
231
发表于 2019-9-20 10:11:38 | 显示全部楼层 |阅读模式
每次我(在谷歌上)搜索这个,我都会得到“如何创建线条对象”或类似的东西。我不想制作AutoCAD对象。我想从C#NET中定义的类创建对象。从LISP中,我想使用vlax创建对象或类似的东西来创建对象。此外,将vlax put属性、vlax get属性和vlax invoke方法用于此对象(或其他等效对象)。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2019-9-20 19:23:44 | 显示全部楼层
这是一个起点:https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2015/ENU/AutoCAD-NET/files/GUID-3B2760FE-A0DC-4229-AEBE-5CC83290BA95-htm.html
要从.net创建/使用“对象”(即类),需要向.net传递结果缓冲区,该结果缓冲区保存用于创建对象或使用函数的参数数据。您还可以通过结果缓冲区传回数据
例如,在C#中有一个创建对象的lisp方法,通过调用lisp方法并在结果缓冲区中传递构造函数参数,从lisp创建对象。当在C#中调用该函数时,您将解压结果缓冲区并使用这些参数创建对象。您可以通过返回的结果缓冲区传回句柄或对象id,以便您可以访问其他函数的新对象
vlax-Lisp函数用于ActiveX(即COM),如果要使用这些函数,需要为COM构建/包装.net类。
回复

使用道具 举报

26

主题

128

帖子

2

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
231
发表于 2019-9-28 10:49:49 | 显示全部楼层
因此,我的最终目标是将这些AutoLISP函数转换为.NET:
  1. (vl-load-com)
  2. (setq CUSTOM_FNAM (strcat "C:/Users/" (getvar 'loginname) "/Desktop/Action_tile.lsp"))
  3. (defun *error* (msg)
  4.         (princ "Error: ")
  5.         (princ msg)
  6.         (princ)
  7. )
  8. (defun readFunctionPrint (str / JO_file)
  9.         (if
  10.           (and
  11.                 CUSTOM_FNAM
  12.                 (setq JO_file (f_open CUSTOM_FNAM "a"))
  13.           )
  14.           (progn
  15.                 (princ str JO_file)
  16.                 (f_close JO_file)
  17.           )
  18.         )
  19. )
  20. (if (not f_close)
  21.   (progn
  22.         (setq f_close close)
  23.         (and (not f_open) (setq f_open open))
  24.         (setq close
  25.                 (lambda (file / JO_file)
  26.                         (if
  27.                           (and
  28.                                 CUSTOM_FNAM
  29.                                 (setq JO_file (f_open CUSTOM_FNAM "a"))
  30.                           )
  31.                           (progn
  32.                                 (princ (strcat "(close " (vl-prin1-to-string file) ")") JO_file)
  33.                                 (princ "\n" JO_file)
  34.                                 (f_close JO_file)
  35.                           )
  36.                         )
  37.                         (f_close file)
  38.                 )
  39.         )
  40.   )
  41. )
  42. (if (not f_open)
  43.   (progn
  44.         (setq f_open open)
  45.         (and (not f_close) (setq f_close close))
  46.         (setq open
  47.                 (lambda (key action / JO_file)
  48.                         (if
  49.                           (and
  50.                                 CUSTOM_FNAM
  51.                                 (setq JO_file (f_open CUSTOM_FNAM "a"))
  52.                           )
  53.                           (progn
  54.                                 (princ (strcat "(open " (vl-prin1-to-string key)) JO_file)
  55.                                 (princ " " JO_file)
  56.                                 (princ (strcat (vl-prin1-to-string action) ")") JO_file)
  57.                                 (princ "\n" JO_file)
  58.                                 (f_close JO_file)
  59.                           )
  60.                         )
  61.                         (f_open key action)
  62.                 )
  63.         )
  64.   )
  65. )
  66. (if (not f_action_tile)
  67.   (progn
  68.         (setq f_action_tile action_tile)
  69.         (setq action_tile
  70.                 (lambda (key action / JO_file)
  71.                         (if
  72.                           (and
  73.                                 CUSTOM_FNAM
  74.                                 (setq JO_file (f_open CUSTOM_FNAM "a"))
  75.                           )
  76.                           (progn
  77.                                 (princ (strcat "(action_tile " (vl-prin1-to-string key)) JO_file)
  78.                                 (princ "\n\t" JO_file)
  79.                                 (princ (strcat (vl-prin1-to-string action) "\n)") JO_file)
  80.                                 (princ "\n" JO_file)
  81.                                 (f_close JO_file)
  82.                           )
  83.                         )
  84.                         (f_action_tile key (strcat action "(readFunctionPrint (strcat "(set_tile " key " $value) ; " $value "\n"))"))
  85.                 )
  86.         )
  87.   )
  88. )

此代码将读取使用AutoLISP的对话框中的所有代码
AutoLISP的问题在于无法为函数创建可选参数。在.NET中,您可以这样做,这就是我在这里要做的。然而,我不熟悉C#。NET与AutoCAD进行交互,因此我正在努力。我需要找到一种方法,将函数名、参数及其执行后的结果导出为文本文件中的注释
我想要一种方法,可以简单地将函数作为参数提供给.NET函数。以匿名函数作为返回。此匿名函数将存储在原始函数的符号中。此函数将调用原始函数并将数据导出到文件
我正在尝试对.NET中的对象执行此操作,根据您的描述,似乎我无法对对象执行此任务。
回复

使用道具 举报

26

主题

128

帖子

2

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
231
发表于 2019-9-28 10:55:55 | 显示全部楼层

使用列表。
回复

使用道具 举报

26

主题

128

帖子

2

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
231
发表于 2019-9-28 11:04:59 | 显示全部楼层

使用列表。这对我的应用程序不起作用。我无法更改AutoDesk编写的代码。
回复

使用道具 举报

26

主题

128

帖子

2

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
231
发表于 2019-9-28 11:10:02 | 显示全部楼层

使用列表。

这不适用于我的应用程序。我无法更改 AutoDesk 编写的代码。

您不必这样做,只需在调用本机函数之前进行预处理。
回复

使用道具 举报

26

主题

128

帖子

2

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
231
发表于 2019-9-28 11:19:49 | 显示全部楼层

使用列表

这不适用于我的应用程序。我无法更改AutoDesk编写的代码

您不必这样做,只需在调用本机函数之前进行预处理即可

我希望更清楚,您是在谈论使用AutoLISP还是.NET
假设.NET,你的意思是我应该:
1获取结果缓冲区并遍历每个参数
2将每个参数放入列表
3返回列表?
回复

使用道具 举报

26

主题

128

帖子

2

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
231
发表于 2019-9-28 11:25:53 | 显示全部楼层

我说的是口齿不清。虽然您可以执行上面的1..3,并且其中有许多实用程序,但我认为克服“不带可选参数的LISP函数”是过分的。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2019-9-28 11:41:49 | 显示全部楼层

我说的是LISP。虽然你可以做上面的1..3,并且其中对很多事情都有实用性,但我认为克服“不接受可选参数的LISP函数”是过分的。

使用列表。

在我的应用程序中仍然无法做到这一点。如果没有允许可选参数的函数,我无法预处理此数据。
例如:
  1. (done_dialog [status])

这个函数有两种组合。我无法在AutoLISP中创建函数来替换done_dialog。我无法使用 AutoLISP 来实现此时间段。您无法预处理此数据并将其放入列表中,因为用于预处理此数据的函数是固定数量的参数。
必须对此应用程序使用 .NET 才能创建允许可选参数的函数。这将允许执行像done_dialog这样的函数,并将其写入文本文件。
我相信有一种方法可以结合使用AutoLISP和.NET。
回复

使用道具 举报

26

主题

128

帖子

2

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
231
发表于 2019-9-28 11:52:42 | 显示全部楼层
问题就在这里。给我看一个调用done_dialog的预处理的例子。
对不起,我仍然不相信。
我希望您将我在此的参与理解为试图澄清和帮助。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 06:09 , Processed in 0.157365 second(s), 72 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表