a-saber 发表于 2021-2-14 04:47:37

从选择中创建列表


**** Hidden Message *****

nobody 发表于 2021-2-18 19:35:18

我也需要帮助。吉尔,请帮帮忙!

mrbeann 发表于 2021-8-22 07:17:05

嗨,
我完全无法理解这个要求。

gile 发表于 2021-8-22 10:58:35

选择上面的所有(7)行,并分成(7)个数组(在数组数组中)(每一行从左到右排序)。

mrbeann 发表于 2021-8-22 21:28:01

谢谢你先生。

gile 发表于 2021-8-23 03:07:22

这就是我所担心的,输入数据结构不佳。使用AutoCAD表格会容易得多...自动执行组织不良的绘图是解决GIGO综合症的方法,不过,这是一个使用 LINQ 的尝试,似乎给出了正确的结果。 static string[][] GroupTextsByRow(SelectionSet selection, double rowHeight)。
{。
双圆到高(双d)=>。
Math.Round(d / rowHeight) * rowHeight;。
Point3d textPosition(DBText txt) =>。
腾讯网.Justifi == AttachmentPoint.BaseLeft ?腾讯网.位置 : txt.对准点;。
using (var tr = new OpenCloseTransaction())。
{。
返回所选内容,GetObjectIds()。
,Where(id => id.ObjectClass.DxfName == “TEXT”)。
,Select(id => (DBText)tr.GetObject(id, OpenMode.ForRead))。
,GroupBy(txt => roundToRowHeight(textPosition(txt).Y))。
,OrderByDescending(grp => grp.键)。
,Select(grp => grp.OrderBy(txt => textPosition(txt).十)。
,Select(txt => txt.文本字符串)。
,ToArray())。
,ToArray();。
}。
}A testing command: 。
公共静态 void Test()。
{。
var doc = Application.DocumentManager.MdiActiveDocument;。
var db = doc.数据库;。
var ed = doc.编辑;。
var filter = new SelectionFilter(new[] { new TypedValue(0, “TEXT”) });。
var psr = ed.GetSelection(filter);。
如果 (psr.状态 != PromptStatus.OK)。
返回;。
var pdr = ed.GetDistance(“\nRow height: ”);。
如果 (pdr.状态 != PromptStatus.OK)。
返回;。
var rows = GroupTextsByRow(psr.值,pdr。值);。
foreach (var row in rows)。
{。
编辑,WriteMessage($“\n[{string.Join(“, ”, row)}]“);。
}。
}。

mrbeann 发表于 2021-8-23 04:28:08

谢谢你,吉尔,但我弄错了。

gile 发表于 2021-8-23 07:29:50

这些是使用lambda运算符的局部函数
这些功能随C#7(VS2017)用于本地函数,随C"6(VS2015)用于lambda运算符而来
您使用的是哪个版本的Visual Studio
如果您确实想使用旧版本的Visual Studio,可以定义“旧式”方法
静态双圆路高(双d,双行高)
{
返回数学。圆形(d/行高)*行高
}
静态点3D文本位置(DBText.txt)
{
返回txt。Justify==附件点。左撇子
txt。位置:txt.AlignmentPoint
}
<div>静态字符串〔〕〔〕GroupTextsByRow(选择集选择,双行高)</div>
{
使用(var tr=new OpenCloseTransaction())
{
返回selection.getObjectId()
,其中(id=>id.ObjectClass.DxfName==“文本”)
。选择(id=>(DBText)tr。GetObject(id,OpenMode.ForRead))
GroupBy(txt=>RoundToRowHeight(TextPosition(txt))。Y、 行高))
.OrderByDescending(grp=>grp.Key)
选择(grp=>grp.OrderBy(txt=>TextPosition(txt.X)
。选择(txt=>txt.TextString)
.ToArray())
.ToArray()
}
}

mrbeann 发表于 2021-8-24 09:35:02

这很有魅力。非常感谢。(我使用VS 2015)

gile 发表于 2021-8-24 10:49:59

吉尔,请帮帮我!谢谢您们。
页: [1]
查看完整版本: 从选择中创建列表