.NET 几何例程
AutoCAD GEOMETRY的库线程鼓励成员在中发布有关
AutoCAD GEOMETRY 的任何函数、方法和片段。NET : C#、VB、F#、Python等
请随意添加注释、描述性注释、限制和图片来记录您的帖子。
请以常规主题发布问题。
**** Hidden Message ***** 翻译错误代码(429):请求 QPS 超过限制。 翻译错误代码(429):请求 QPS 超过限制。 翻译错误代码(429):请求 QPS 超过限制。
三角形2d中有一个错误。IsPointInside()方法。
第一篇帖子中的附件已更新。
谢谢吉尔,那应该是个方便的图书馆。
谢谢吉勒,我用过一次,非常有用
我很确定你也在做矩形2d/3d
奥列格 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类:
都继承自一个“通用”抽象类:三角形
,并有两个新属性:循环圈和内嵌圈 凸壳-格雷厄姆扫描算法
基于此:
http://www.partow.net/projects/fastgeo/index.html
这是一个很好的例子http://www.partow.net/downloads/FastGEOConvexHull.zip
这是一个很好的例子 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