乐筑天下

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

AutoCAD提示结果问题

[复制链接]
GRH

2

主题

7

帖子

1

银币

初来乍到

Rank: 1

铜币
15
发表于 2016-4-3 07:00:31 | 显示全部楼层 |阅读模式
您好,
有人能帮我理解autocad API中的PromtResult类吗?
我正在编写一些代码,从选定的实体创建一个块,然后将该块拖动到任何地方
我当前的代码要求用户插入一个块名,这在大多数情况下都很好,但我也希望在没有用户输入的情况下直接解析块id…
如何使用PromptResult=PromptStatus。ok,直到使用了右键单击或ESC按钮,如果用户想退出,显然是为了停止某些代码的执行
GRH

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

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

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2016-4-3 09:23:47 | 显示全部楼层
嗨,是这样的吗?注意:将块名称“S”更改为您想要的名称。使用(Transaction tr=db.TransactionManager.StartTransaction())。
{。
尝试。
{。
BlockTable BlkTbl=(BlockTable)tr.GetObject(db.BlockTableId,OpenMode.ForRead);。
var spc=tr.GetObject(db.CurrentSpaceId,OpenMode.ForWrite);。
var op=new PromptPointOptions("\n指定插入块的点:");。
op.AllowNone=true;。
同时(真)。
{。
PromptPointResult=ed.GetPoint(op);。
如果(pt.Status==PromptStatus.OK)。
{。
BlockTableRecord BlkRec=(BlockTableRecords)BlkTbl["S"]. GetObject(OpenMode.ForWrite);。
MyBlock=new BlockResources(pt.Value,BlkRec.ObjectId);。
MyBlock.Layer="0";。
spc.AppendEntity(MyBlock);。
tr.AddNewlyCreatedDBObject(MyBlock,true);。
db.TransactionManager.QueueForGraphicsFlush();。
}。
否则中断;。
}。
}。
捕获(System.Exceptionx)。
{。
ed.WriteMessage("\nError:"+x.Message);。
}。
tr.Commit();。
}。
回复

使用道具 举报

GRH

2

主题

7

帖子

1

银币

初来乍到

Rank: 1

铜币
15
发表于 2016-4-5 00:09:13 | 显示全部楼层
您好,感谢您的回复,
我对您的代码有点困惑,因为我的插入点的用户输入是我的jig类的一部分(覆盖函数采样器)…请参见下面的
公共函数BlockWithJig(ByVal BlockName作为字符串,ByVal point作为Point3d)作为ObjectId
Dim doc As Document=Application.DocumentManager.MdiActiveDocument
Dim db As Database=doc.Database
作为编辑器调整尺寸=文档编辑器
将pr变暗为PromptResult=Nothing
如果检测到ESC或右键单击,退出功能
使用tr作为Transaction=doc.TransactionManager.StartTransaction()
Dim bt As BlockTable=DirectCast(tr.GetObject(db.BlockTableId,OpenMode.ForRead),BlockTable)
如果不是bt.Has(BlockName),则
其他
Dim bdId作为ObjectId=bt(BlockName)
Dim br作为新的区块参考(点,bdId)
<div>将entJig作为新的BlockJig(br)</div>
pr=ed.Drag(entJig)'执行jig
将ms作为BlockTableRecord=DirectCast(tr.GetObject(bt(BlockTableRecord.ModelSpace)),OpenMode进行Dim。ForWrite),BlockTableRecord)
ms.AppendEntity(entJig.GetEntity())
tr.AddNewlyCreatedDBObject(entJig.GetEntity(),True)
doc.TransactionManager.QueueForGraphicsFlush()
tr.Commit()
返回bdId
如果
结束使用
结束函数
GRH
回复

使用道具 举报

85

主题

404

帖子

7

银币

中流砥柱

Rank: 25

铜币
751
发表于 2016-4-5 01:20:46 | 显示全部楼层
嘿,GRH,如果插入多个blockref,返回ObjectID可能没有意义。也许ObjectdCollection更合适。您可以将提示结果粘贴到do-while循环中以添加更多内容。它可能看起来像这样:
公共对象集合Jiggety()
{
objectdcollection retCollection=new objectdcolection()
<div>PromptResult blResult
do
{
BlockJig:blJig=new blockjing()
<div>//Jig it</div>
blResult=Active.Editor.Drag(blJig)
if(blResult.Status==PromptStatus.Keyword)
{
开关(blResult.StringResult)
{
案例“Q”:
//做关键字填充
中断
案例“A”:
//做关键字填充
中断
}
}
else if(blResult.Status==PromptStatus.OK)
{
//将块添加到当前空间
使用(LockedTransaction tr=Active.Document.TransactionManager.StartLockedTransaction())
{
BlockTableRecord:blockDef=tr.GetObject(blockId,OpenMode.ForRead)作为BlockTableRecord
BlockTableRecord curSpace=(blocktablerrecord)tr.GetObject(Active.Database.CurrentSpaceId,OpenMode.ForWrite)
BlockReference br=新的blockReferences(blJig.GetEntity()。位置,blockId)
//设置属性并添加到currentSpace
br.旋转=旋转
br.ScaleFactors=scale
ObjectId:returnId=curSpace.AppendEntity(br)
retCollection.Add(returnId)
tr.addNewlyCreatedBobObject(br,true)
tr.Commit()
}
else//if(blResult.Status!=PromptStatus.OK
回复

使用道具 举报

GRH

2

主题

7

帖子

1

银币

初来乍到

Rank: 1

铜币
15
发表于 2016-4-5 02:08:37 | 显示全部楼层
blResult.Status!=promptsstatus.Keyword)
{
取消=真
}
}同时(blResult.Status!=PromptStatus.Cancel&
blResult。状态!=提示状态。错误&!取消)
返回集合
}

回复

使用道具 举报

85

主题

404

帖子

7

银币

中流砥柱

Rank: 25

铜币
751
发表于 2016-4-5 02:22:39 | 显示全部楼层
谢谢Mate,
抱歉我的无知,但我只 VB.net 编码,我试图在线转换这个,但我得到了错误.....
你有没有机会更新你的帖子以显示 VB.net?
欢呼
回复

使用道具 举报

GRH

2

主题

7

帖子

1

银币

初来乍到

Rank: 1

铜币
15
发表于 2016-4-5 02:39:04 | 显示全部楼层

哎哟
回复

使用道具 举报

85

主题

404

帖子

7

银币

中流砥柱

Rank: 25

铜币
751
发表于 2016-4-5 05:29:08 | 显示全部楼层
对不起,伙计,代码不是为了编译,我只是为了说明而把它放在一起。我可能会屠杀VB版本比我发布的C#更糟糕,如果您在阅读 C# 时遇到问题,请使用提示在 do/while 循环中拖动夹具:在 do/while 循环中拖动夹具。状态为检查是否退出循环。
如果你要插入多个 blockRef,你可能应该返回多个 ObjectID(如果你正在使用它们),考虑返回一个 ObjectIdCollection代码的其他方面(当前空间与模型空间等),我只是留了下来,因为我在我的例程中使用它们,并认为它们可能会有所帮助。
回复

使用道具 举报

GRH

2

主题

7

帖子

1

银币

初来乍到

Rank: 1

铜币
15
发表于 2016-4-5 07:06:51 | 显示全部楼层
谢谢,
这一次只插入一个块Ref....
我现在有一个计划,谢谢。
断续器
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-4 18:54 , Processed in 0.154835 second(s), 70 queries .

© 2020-2025 乐筑天下

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