ahlzl 发表于 2009-5-20 07:40:00

AutoCAD 2010的C#实体放样示例——天圆地方

2010的那两个托管DLL文件中,增加了对“放样”和“扫琼”的支持,使得我们用C#进行三维建模的手段更加丰富了!
以前的CAD版本,用C#能进行“放样曲面”和“扫琼曲面”的操作,但不能进行实体的操作。// 放样示例:天圆地方.

public void Test()
{
    Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
    Polyline ent1 = new Polyline();
    ent1.AddVertexAt(0, new Point2d(50, 50), 0, 0, 0);
    ent1.AddVertexAt(1, new Point2d(-50, 50), 0, 0, 0);
    ent1.AddVertexAt(2, new Point2d(-50, -50), 0, 0, 0);
    ent1.AddVertexAt(3, new Point2d(50, -50), 0, 0, 0);
    ent1.Closed = true;
    Circle ent2 = new Circle(new Point3d(0, 0, 200), new Vector3d(0, 0, 1), 30);
    Entity[] crossEnts = new Entity;
    crossEnts.SetValue(ent1, 0);
    crossEnts.SetValue(ent2, 1);
    Entity[] guideCurs = new Entity;
    LoftOptions loftOpt = new LoftOptions();
    Solid3d solid3dEnt = new Solid3d();
    solid3dEnt.RecordHistory = true;
    solid3dEnt.CreateLoftedSolid(crossEnts, guideCurs, null, loftOpt);
    AppendEntity(solid3dEnt);
}
ObjectId AppendEntity(Entity ent)
{
    Database db = HostApplicationServices.WorkingDatabase;
    ObjectId entId;
    using (Transaction trans = db.TransactionManager.StartTransaction())
    {
      BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId,
            OpenMode.ForRead);
      BlockTableRecord btr = (BlockTableRecord)trans.GetObject
            (bt, OpenMode.ForWrite);
      entId = btr.AppendEntity(ent);
      trans.AddNewlyCreatedDBObject(ent, true);
      trans.Commit();
    }
    return entId;
}

雪山飞狐_lzh 发表于 2009-5-20 09:38:00

对3d的东西一向不太熟悉,相信各位朋友也一样,
但在AutoCad不断加强3d功能的现在,确实应该引起重视
也希望ahlzl斑竹多发一些相关的东西,:)

gyj666 发表于 2011-2-12 20:46:00

紧急求助,需要一个VBA的例子,请ahlzl 斑竹不吝赐教呀!!!

lamntree 发表于 2015-9-12 20:52:00


直接loft的天圆地方实际做钣金是做不出来的,我把它分成4个三角面,4个曲面,组合出来,这样就和实际钣金做出来的一样了
页: [1]
查看完整版本: AutoCAD 2010的C#实体放样示例——天圆地方