Master_Shake 发表于 2016-8-19 09:38:31

使用编辑器。更改对象空间的命令。

我正在尝试将一些对象从模型空间移动到纸质空间。当我使用编辑器时,我会得到一个eInvalidInput。命令自动执行CHSPACE命令。我在命令中输入什么并不重要,它总是会出错。我不确定我做错了什么
这是我正在处理的代码片段。代码运行时我已经在文件空间了
公共类维度添加策略:IDimensionAdderStrategy
{
公共void AddDimensions(列出
尺寸线)
{
使用(Transaction tr=Active.Database.TransactionManager.StartTransaction())
{
BlockTableRecord ms=Active.Database.ModelSpace(OpenMode.ForWrite)
ObjectId[]维度=新的ObjectId
int-index=0
foreach(尺寸线中的尺寸线)
{
旋转维度旋转维度=新旋转维度()
双角度=X轴的角度(dimensionLine.Start,dimensionLine.End)
旋转维度。XLINE1点=尺寸线。开始
旋转维度。XLine2Point=尺寸线。结束
旋转维度。旋转=角度
旋转维度。DimLinePoint=PolarPoint(尺寸线端点,角度+数学π/2,尺寸线偏移)
旋转维度。DimensionStyle=Active.Database.DimStyleTableId
维度[索引]=ms.AppendEntity(旋转维度)
tr.addnewlyCreatedBobObject(旋转维度,true)
index++
}
tr.Commit()
SelectionSet-SelectionSet=SelectionSet.fromObjectId(维度)
是活动的.Editor。命令(“MSPACE”、“selectionSet”、“CHSPACE”和“)
}
}
私有双角度自X轴(点3D开始,点3D结束)
{
返回新矢量2d(end.X-start.X,end.Y-start.Y)
}
公共点3D极化点(点3D基点、双角度、双偏移)
{
返回新的点3d(基点X+(偏移量*Math.Cos(角度)),即基点。Y+(偏移量*Math.Sin(角度)),基点Z)
}
}
**** Hidden Message *****

Master_Shake 发表于 2016-8-19 10:54:40

在不运行它的情况下,我认为您不需要传递"",直到命令
Active.Editor.Command("MSPACE", seltionSet,"CHSPACE", "");
Gile对传递autocad命令有很好的描述。
https://www.theswamp.org/index.php?topic=49124.0

BlackBox 发表于 2016-8-19 11:43:59

我想我不够清楚。
Active.Editor.Command(“MSPACE”);
给出完全相同的错误。
我正在使用AutoCAD 2016,但它在2015年也做了同样的事情。

T.Willey 发表于 2016-8-19 12:04:11

15+更改了命令的运行方式,这取决于您是否拥有所有参数或所需的输入。从臀部开始,您可能需要拆分这两个命令并让用户选择活动的视口。命令MSPACE不会从唯一的命令开始和停止,因此我认为eInvalidInput是从哪里来的。等待Active.Editor.CommandAsync("_. MSPACE",Active.Editor.PauseToken,Active.Editor.PauseToken);。
Active.Editor.Command("_. CHSPACE",选择集);。

T.Willey 发表于 2016-8-19 12:39:05

其他对我不起作用的命令,Active.Editor.Command("QSAVE");。
Active.Editor.Command(视图);。
etc, etc. ParamArray中放置什么并不重要,它总是给出eInvalidInput,这是我第一次尝试使用API,我一定没有正确设置某些内容,我引用了3个标准dlls,应该有另一个吗?在这一点上,我正在考虑自己将维度转换为文件空间。

gile 发表于 2016-8-20 01:10:21

你是在什么背景下打电话的?我认为如果从应用程序上下文中调用,它会抛出错误。.........我刚刚做了一个快速测试,在文档上下文中工作,并从应用程序上下文中抛出了einvalidinput错误。   。
public void ThrowErrorMSPACE()。
{。
Ed,command(" MSPACE ");。
}。

public void successful space()。
{。
Ed,command(" MSPACE ");。
}。

Master_Shake 发表于 2016-8-20 01:41:10

出于好奇,您有什么理由想使用 Editor.Command() 代替克隆?
http://spiderinnet1.typepad.com/blog/2014/03/autocad-net-move-entity-from-model-space-to-paper-space.html
干杯

Master_Shake 发表于 2016-8-20 05:32:13

Jeff,我已经
有一段时间没有做过任何.Net编码了,所以我只是猜测。 如果在调用调用 sessions 命令标志的代码中的命令之前锁定文档,是否会有所不同?

gile 发表于 2016-8-20 09:11:33

嘿,蒂姆,
我试了一下,还是出错了

公共void TryDocLockMSPACE()
{
使用(DocumentLock docloc=Doc.LockDocument())
{
Ed.Command(“MSPACE”)
}
}

T.Willey 发表于 2016-8-20 12:29:21

值得一试杰夫
这就是我的设想,因此如果代码有问题,我无法指出会出现什么问题<哦,好吧。感谢您尝试并发回。
页: [1] 2
查看完整版本: 使用编辑器。更改对象空间的命令。