Kerry 发表于 2010-1-27 03:34:28

.NET 几何例程

AutoCAD GEOMETRY的库线程
鼓励成员在中发布有关
AutoCAD GEOMETRY 的任何函数、方法和片段。NET : C#、VB、F#、Python等
请随意添加注释、描述性注释、限制和图片来记录您的帖子。
请以常规主题发布问题。
**** Hidden Message *****

gile 发表于 2010-1-27 17:28:26

翻译错误代码(429):请求 QPS 超过限制。

gile 发表于 2010-2-11 16:31:52

翻译错误代码(429):请求 QPS 超过限制。

gile 发表于 2010-2-16 18:03:22

翻译错误代码(429):请求 QPS 超过限制。

gile 发表于 2010-4-17 08:56:17


三角形2d中有一个错误。IsPointInside()方法。
第一篇帖子中的附件已更新。

gile 发表于 2010-8-22 14:18:56


谢谢吉尔,那应该是个方便的图书馆。

gile 发表于 2010-8-23 03:49:33


谢谢吉勒,我用过一次,非常有用
我很确定你也在做矩形2d/3d
奥列格

Kerry 发表于 2010-8-23 04:45:37

Hi,
添加了一些扩展方法:
ululPoint2dCollection.RemoveDuplicate()
ululPoint2dCollection.RemoveDuplicate(T承受tol)
boolPoint2dCollection.Contains(Point2d pt, T承受tol)
ululPoint3dCollection.RemoveDuplicate()
ululPoint3dCollection.RemoveDuplicate(承受tol)
boolPoint3dCollection.Contains(Point3d pt, T承受tol)
并编辑Triangle2d和Triangle3d类:
都继承自一个“通用”抽象类:三角形
,并有两个新属性:循环圈和内嵌圈

fixo 发表于 2010-8-23 05:23:12

凸壳-格雷厄姆扫描算法
基于此:
http://www.partow.net/projects/fastgeo/index.html
这是一个很好的例子http://www.partow.net/downloads/FastGEOConvexHull.zip
这是一个很好的例子

gile 发表于 2010-8-23 05:48:04

Hi这是一个F#凸包(Graham的扫描)编辑:新代码请参见这里编辑:在某些情况下,使用共线点需要比较的公差模块ConvexHull。

打开系统。
打开Autodesk.AutoCAD.ApplicationServices。
打开Autodesk.AutoCAD.DatabaseServices。
打开Autodesk.AutoCAD.EditorInput。
打开Autodesk.AutoCAD.Geometry。
打开Autodesk.AutoCAD.Runtime。

让顺时针(p1: Point2d)(p2: Point2d)(p3: Point2d)=。
(p2. X-p1. X)*(p3. Y-p1. Y)-(p2. Y-p1. Y)*(p3. X-p1. X)。

让conexHull(ts: Point2d seq)=。
让rec填充acc pt=。
将acc与匹配。
|a:: b:: _时顺时针b a pt->填充acc.Tailpt。
|_->pt:: acc。
让p0=ts。
|>Seq.reduce(有趣的p1 p2->。
如果p2,Y。
ts。
|>List.ofSeq。
|>List.sortBy(有趣的p->。
让d=p0.GetDistanceTo(p)。
(Math.Round((p0. X-p. X)/d,8), d))。
|>List.fold填充[]。
|>List.rev。

[]。
让Test()=。
让doc=Application.DocumentManager.MdiActiveDocument。
让psr=doc.Editor.GetSelection(new SelectionFilter([|new TypeValue(0,"POINT") |]))。
如果psr.Status=PromptStatus.OK那么。
使用tr=doc.TransactionManager.StartTransaction()。
使用pl=new Polyline()。
psr.Value。
|>Seq.cast。
|>Seq.map(有趣(所以:选择对象)->。
let pt=tr.GetObject(so.ObjectId,OpenMode.ForRead ):? > DBPoint。
新的Point2d(pt.Position.X,pt.Position.Y))。
|>conexHull。
|>List.iteri(有趣的i p->pl.AddVertexAt(i, p,0.0,0.0,0.0))。
pl.Closed。
让btr=tr.GetObject(doc.Database.CurrentSpaceId,OpenMode.ForWrite ):? > BlockTableRecords。
btr.AppendEntity(pl)|>忽略。
tr.AddNewlyCreatedDBObject(pl,true)。
tr.Commit。
页: [1] 2
查看完整版本: .NET 几何例程