乐筑天下

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

IronPython for Bricscad

[复制链接]

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2017-12-22 18:50:22 | 显示全部楼层 |阅读模式
在Bricscad V16到V18上进行了测试,如果有足够的兴趣,我也将为AutoCAD构建一个版本
对于那些感兴趣的人,我附加了一个包含安装文件的zip文件夹,这样您可以通过NETLOAD加载解释器(PyCAD.dll),然后运行在“插件”文件夹中创建的一些脚本
到目前为止,它只有一个简单的提示(command=IPY_prompt),您可以从脚本中调用函数。任何加载的脚本(自动从插件文件夹中加载)都将通过此提示向CAD系统公开其功能。在不久的将来,我将能够创建适当的“命令”,使其作为脚本工具更加有用
如果要更改脚本,需要停止提示(esc或输入空行)。然后可以使用IPY_reload重新加载脚本,然后再次启动提示进行测试
plugins文件夹中有几个测试脚本,其中一个脚本内置了一个用于测试的错误,删除错误消息只需要很少的修复,所以不用担心
我只是把它放在这里,看看大家对此有什么兴趣,我正在为我当前的一个项目构建一个脚本接口,但如果人们想使用它,我会让它更加通用和开源
未来版本将有一个用于实时编码和测试的小型文本编辑器
由于您可以访问整个.net框架,因此可以使用您喜欢的任何.net库。大多数标准的Python库都是可用的,因此如果您习惯于使用Python std函数,您会感到宾至如归,它们可以很好地协同工作。使用Python外部库在现阶段不可用,需要同时安装Python和IronPython,我选择保持简单
由于代码是IronPython,如果您构建了一个成熟的大型模块,您可以在Visual Studio中轻松地将其编译为dll,但目前您可以在所选编辑器中编写脚本文件
安装:
将内容解压缩到您选择的文件夹中,其中包含DLL和带有几个脚本文件的插件文件夹。在这里放置任何新脚本
在Bricscad中,运行NETLOAD并浏览到此文件夹,然后选择PyCAD。dll并加载它
可用命令:IPY_PROMPT,IPY_ RELOAD<br>如果您有任何问题,请告诉我,谢谢。<br>

smkdkkkcoze.jpg

smkdkkkcoze.jpg

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

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

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2017-12-22 20:52:04 | 显示全部楼层
添加一个简单的行实体:
演示Python中数据库和事务的基本用法。请注意“with”关键字,它相当于C#中的“using”
我必须承认,Python代码在眼睛(和键盘)上非常容易
导入Bricscad。应用程序服务作为AcAp
来自Teigha的<div>。数据库服务导入*
来自Teigha的<div>。几何体导入*
def addLine():
doc=AcAp.Application.DocumentManager.MdiActiveDocument
db=doc.Database
#创建线实体
p1=Point3d(300,100,0)
p2=Point3d(500,200,0)
线=线(p1,p2)
带有db.TransactionManager的<div>。StartTransaction()作为tr:
#将其添加到模型空间
bt=tr.GetObject(db.BlockTableId,OpenMode.ForRead)
btr=tr.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite)
btr.AppendEntity(行)
tr.addNewlyCreatedBobObject(行,真)
tr.Commit()

回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2017-12-23 19:29:36 | 显示全部楼层
下面是一个简单的包装器脚本,可以轻松地编写干净的 Python 代码。# dwgtools.py。
''' 此模块包含用于工作的基本交互帮助程序函数。
在编辑器中打开当前活动的 dwg 文件,。
它基本上是一个简单的包装器,使编写惯用的Python代码变得容易。
并去除了很多样板,。
'''。
import Bricscad.ApplicationServices as AcAp。
import Bricscad.EditorInput as AcEd。
from Teigha.DatabaseServices import *。

类绘图:。
def __init__(自我):。
self.doc = AcAp.Application.DocumentManager.MdiActiveDocument。
self.db = self.doc.Database。
self.ed = self.doc.Editor。

def add_entity(自我,实体):。
“”将实体对象添加到当前 ModelSpace 布局,'''。
with self.db.TransactionManager.StartTransaction() as tr:。
# 将其添加到模型空间。
bt = tr.GetObject(self.db.BlockTableId, OpenMode.ForRead)。
btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite)。

断续器追加实体(实体)。
断续器AddNewlyCreatedDBObject(entity, True)。

断续器提交()。

def write_message(自我,message_string):。
“”向编辑器的命令行发送文本消息,'''。
self.ed.WriteMessage(message_string)。
并使用它,这里是重构的addLine代码:from dwgtools import *。

def addLine():。
# 创建行实体。
line = line(Point3d(300, 100, 0), Point3d(500, 200, 0))。
    。
# 将其添加到绘图中。
dwg = 绘图()。
dwg.add_entity(线)。
dwg.write_message(“已将新线条添加到图形数据库!”。

回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2017-12-27 21:31:39 | 显示全部楼层
干得好,迈克!我最近在一个大型项目中嵌入了IronPython,它作为脚本语言已经足够好了,我在工作中只注意到一些评论(没有测试你的代码):  IronPython引擎初始化非常慢。
就速度而言,可能不是CAD的最佳脚本语言。
我无法在不重启应用程序的情况下找到热重新加载 python脚本的方法,这是一个主要的缺点,因为您通常使用脚本进行原型开发,而编写-测试-更改-重新加载模式非常方便。似乎一旦你重新加载脚本,清除符号就不那么容易了。这是完全合理的,但我对LUA语言做了同样的事情,没有问题重新加载脚本。总之,这是我的(有限)经验。这是一个有趣的项目!。
回复

使用道具 举报

1

主题

5

帖子

1

银币

初来乍到

Rank: 1

铜币
9
发表于 2018-1-1 12:11:05 | 显示全部楼层
初始启动有点慢,但是一旦脚本被加载和抖动,IronPython就和C#一样快。(我在加载时编译脚本,而不是使用“eval”)。据报道,IronPython比CPython快10-100倍,这对于很多项目来说都是可以忍受的
,IPY_RELOAD确实在不重新启动的情况下进行了热重载,正如你所说,这是关键!
我放弃了旧的示波器并创建了一个新的示波器,到目前为止,它似乎运行良好。我将很快设置一个GitHub存储库,其中包含所有源代码,只要我对它进行了更多的排序。
感谢您对丹尼彭的关注!
我实际上在Clojure中构建了一个脚本引擎,其工作原理相同,但在启动时可能会更快一些。我喜欢Lisp,但是对于只想敲出一个快速脚本的新手来说,Python在大脑上比Clojure容易得多
最终目标是有一个插件目录,其中测试/最终确定的脚本被保存并加载一次,这应该具有良好的性能。我正在开发一个简单的编辑器,用于测试将使用重新加载功能的新脚本,您可以根据需要创建任意数量的脚本引擎和作用域,因此任何新代码都不会踩到任何预加载的代码上。
我现在有更好的错误报告输出,带有行号等错误,这些错误对于调试来说足够好。
如果你最终有很多脚本,那么创建一个IronPython类lib项目并将它们编译成一个dll是非常容易的。虽然主要目标是让新手更容易使用,而不必安装一个完整的开发环境,我可以只为客户端编写脚本,而不必完全重建和发布主应用程序。
它仍然有办法去,但它进展顺利,我对它非常满意,我怀疑我会写更多的C#,直到我也需要
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2018-1-1 18:01:47 | 显示全部楼层
我想知道你是否在GitHub上设置了什么? 这看起来非常有趣,我在C#上有点挣扎,并对简单任务的代码量感到沮丧。 我相信有一天我会明白的...
如果您有任何python的建议或示例,我会很高兴看到更多。
谢谢和最好的给你
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2018-5-10 04:53:21 | 显示全部楼层
嗨,Jerry,
回购协议还没有建立,我需要对其进行一点重构,并将脚本引擎从CAD特定部分中分离出来,以使其更便于其他应用程序的移植。我还想开发一些更多的调试功能,很多事情都能顺利完成,在使用该函数之前不会被发现,但堆栈跟踪确实为您提供了修复问题所需的线索
我还实现了正确的CAD命令初始化(C#使用属性,Python使用装饰器/注释),因此不需要IPY提示,只需调用命令即可
当您更新了“命令”后,IPY_
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-4 10:56 , Processed in 0.179775 second(s), 71 queries .

© 2020-2025 乐筑天下

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