zoukankan      html  css  js  c++  java
  • bently addin 二次开发学习

    元素结构:

    一些基本元素的添加与绘制:

    class CreateElement
    {
    public static void LineAndLineString()
    {
    Application app = Utilities.ComApp;
    Point3d startPnt = app.Point3dZero();
    Point3d endPnt = startPnt;
    startPnt.X = 10;
    LineElement oLine = app.CreateLineElement2(null, ref startPnt, ref endPnt);
    oLine.Color = 0; oLine.LineWeight = 2;
    app.ActiveModelReference.AddElement(oLine);
    Point3d[] pntArray = new Point3d[5];
    pntArray[0] = app.Point3dZero();
    pntArray[1] = app.Point3dFromXY(1, 2);
    pntArray[2] = app.Point3dFromXY(3, ‐2);
    pntArray[3] = app.Point3dFromXY(5, 2);
    pntArray[4] = app.Point3dFromXY(6, 0);
    oLine = app.CreateLineElement1(null, ref pntArray);
    oLine.Color = 1; oLine.LineWeight = 2;
    app.ActiveModelReference.AddElement(oLine);
    }
    public static void ShapeAndComplexShape()
    {
    Application app = Utilities.ComApp;
    Point3d[] pntArray = new Point3d[6];
    pntArray[0] = app.Point3dFromXY(0, ‐6);
    pntArray[1] = app.Point3dFromXY(0, ‐2);
    pntArray[2] = app.Point3dFromXY(2, ‐2);
    pntArray[3] = app.Point3dFromXY(2, ‐4);
    pntArray[4] = app.Point3dFromXY(4, ‐4);
    pntArray[5] = app.Point3dFromXY(4, ‐6);
    ShapeElement oShape = app.CreateShapeElement1(null, ref pntArray);
    oShape.Color = 0; oShape.LineWeight = 2;
    app.ActiveModelReference.AddElement(oShape);
    ChainableElement[] elmArray = new ChainableElement[2];
    for (int i = 0; i < 6; i++)
    pntArray[i].X += 5;
    elmArray[0] = app.CreateLineElement1(null, ref pntArray);
    pntArray[2].Y = ‐8;
    elmArray[1] = app.CreateArcElement3(null, ref pntArray[5], ref pntArray[2],
    ref pntArray[0]);
    ComplexShapeElement oComplexShape = app.CreateComplexShapeElement1(ref
    elmArray);
    oComplexShape.Color = 1; oComplexShape.LineWeight = 2;
    app.ActiveModelReference.AddElement(oComplexShape);
    }
    public static void TextAndTextNode()
    {
    Application app = Utilities.ComApp;
    double savedTextHeight = app.ActiveSettings.TextStyle.Height;
    double savedTextWidth = app.ActiveSettings.TextStyle.Width;
    Font savedFont = app.ActiveSettings.TextStyle.Font;
    bool savedAnnotationScaleEnabled = app.ActiveSettings.AnnotationScaleEnabled;
    app.ActiveSettings.TextStyle.Height = 0.7;
    app.ActiveSettings.TextStyle.Width = 0.6;
    app.ActiveSettings.TextStyle.Font =
    app.ActiveDesignFile.Fonts.Find(MsdFontType.WindowsTrueType, "Arial");
    app.ActiveSettings.AnnotationScaleEnabled = false;
    Point3d origin = app.Point3dFromXY(0, ‐7.5);
    Matrix3d rMatrix = app.Matrix3dIdentity();
    TextElement oText = app.CreateTextElement1(null, "Text String", ref origin,
    ref rMatrix);
    oText.Color = 0;
    app.ActiveModelReference.AddElement(oText);
    origin = app.Point3dFromXY(2, ‐9);
    TextNodeElement oTN = app.CreateTextNodeElement1(null, ref origin, ref
    rMatrix);
    oTN.AddTextLine("Text Node Line 1");
    oTN.AddTextLine("Text Node Line 2");
    oTN.Color = 1;
    app.ActiveModelReference.AddElement(oTN);
    app.ActiveSettings.TextStyle.Height = savedTextHeight;
    app.ActiveSettings.TextStyle.Width = savedTextWidth;
    app.ActiveSettings.TextStyle.Font = savedFont;
    app.ActiveSettings.AnnotationScaleEnabled = savedAnnotationScaleEnabled;
    }
    public static void CellAndSharedCell()
    {
    Application app = Utilities.ComApp;
    app.AttachCellLibrary("sample2.cel");
    Point3d origin = app.Point3dFromXY(1, ‐13);
    double xScale = 0.1 * app.ActiveModelReference.UORsPerMasterUnit / 1000.0;
    Point3d scale = app.Point3dFromXYZ(xScale, xScale, xScale);
    Matrix3d rMatrix = app.Matrix3dIdentity();
    CellElement oCell = app.CreateCellElement2("DECID", ref origin, ref scale,
    true, ref rMatrix);
    oCell.Color = 0;
    app.ActiveModelReference.AddElement(oCell);
    SharedCellElement oSC;
    xScale = 0.02 * app.ActiveModelReference.UORsPerMasterUnit / 1000.0;
    scale = app.Point3dFromXYZ(xScale, xScale, xScale);
    for (int x = 4; x <= 8; x += 2)
    {
    origin = app.Point3dFromXY(x, ‐14);
    oSC = app.CreateSharedCellElement2("NORTH", ref origin, ref scale, true,
    ref rMatrix);
    oSC.OverridesComponentColor = true; oSC.Color = 1;
    app.ActiveModelReference.AddElement(oSC);
    }
    }
    public static void LinearAndAngularDimension()
    {
    Application app = Utilities.ComApp;
    DimensionStyle ds = app.ActiveSettings.DimensionStyle;
    ds.OverrideAnnotationScale = true; ds.AnnotationScale = 1;
    ds.OverrideTextHeight = true; ds.TextHeight = 0.5;
    ds.OverrideTextWidth = true; ds.TextWidth = 0.4;
    ds.MinLeader = 0.01;
    ds.TerminatorArrowhead = MsdDimTerminatorArrowhead.Filled;
    Matrix3d rMatrix = app.Matrix3dIdentity();
    Point3d[] pnts = new Point3d[3];
    pnts[0] = app.Point3dFromXY(0, ‐17);
    pnts[1] = app.Point3dFromXY(3, ‐17);
    DimensionElement oDim = app.CreateDimensionElement1(null, ref rMatrix,
    MsdDimType.SizeArrow);
    oDim.AddReferencePoint(app.ActiveModelReference, ref pnts[0]);
    oDim.AddReferencePoint(app.ActiveModelReference, ref pnts[1]);
    oDim.Color = 0; oDim.DimHeight = 1;
    app.ActiveModelReference.AddElement(oDim);
    ds.AnglePrecision = MsdDimValueAnglePrecision.DimValueAnglePrecision1Place;
    oDim = app.CreateDimensionElement1(null, ref rMatrix, MsdDimType.AngleSize);
    pnts[0] = app.Point3dFromXY(7, ‐13);
    pnts[1] = app.Point3dFromXY(5, ‐15);
    pnts[2] = app.Point3dFromXY(9, ‐15);
    oDim.AddReferencePoint(app.ActiveModelReference, ref pnts[0]);
    oDim.AddReferencePoint(app.ActiveModelReference, ref pnts[1]);
    oDim.AddReferencePoint(app.ActiveModelReference, ref pnts[2]);
    oDim.Color = 1; oDim.DimHeight = 1;
    app.ActiveModelReference.AddElement(oDim);
    }
    public static void CurveAndBsplineCurve()
    {
    Application app = Utilities.ComApp;
    Point3d[] pntArray = new Point3d[5];
    pntArray[0] = app.Point3dFromXY(0, ‐19);
    pntArray[1] = app.Point3dFromXY(1, ‐17);
    pntArray[2] = app.Point3dFromXY(2, ‐19);
    pntArray[3] = app.Point3dFromXY(3, ‐17);
    pntArray[4] = app.Point3dFromXY(4, ‐19);
    CurveElement oCurve = app.CreateCurveElement1(null, ref pntArray);
    oCurve.Color = 0; oCurve.LineWeight = 2;
    app.ActiveModelReference.AddElement(oCurve);
    for (int i = 0; i < 5; i++)
    pntArray[i].X += 5;
    InterpolationCurve oInterpolationCurve = new InterpolationCurveClass();
    oInterpolationCurve.SetFitPoints(pntArray);
    BsplineCurveElement oBsplineCurve = app.CreateBsplineCurveElement2(null,
    oInterpolationCurve);

    oBsplineCurve.Color = 1;

    oBsplineCurve.LineWeight = 2;

    app.ActiveModelReference.AddElement(oBsplineCurve);

     

    }

     

    public static void ConeAndBsplineSurface()

     

    {

     

    Application app = Utilities.ComApp;

     

    Point3d basePt = app.Point3dFromXYZ(2, ‐23, 0);

     

    Point3d topPt = app.Point3dFromXYZ(2, ‐20, 0);

     
       
       

    Matrix3d rMatrix = app.Matrix3dFromAxisAndRotationAngle(0, app.Pi()/6);

    ConeElement oCone = app.CreateConeElement1(null, 2, ref basePt, 1, ref topPt,
    ref rMatrix);
    oCone.Color = 0;
    app.ActiveModelReference.AddElement(oCone);
    Point3d[] aFitPnts = new Point3d[4];
    InterpolationCurve oFitCurve = new InterpolationCurveClass();
    BsplineCurve[] aCurves = new BsplineCurve[3];
    aFitPnts[0] = app.Point3dFromXYZ(5.9, ‐21, ‐0.5);
    aFitPnts[1] = app.Point3dFromXYZ(6.9, ‐20, 1);
    aFitPnts[2] = app.Point3dFromXYZ(7.9, ‐20.3, 1.3);
    aFitPnts[3] = app.Point3dFromXYZ(8.9, ‐20.8, 0.3);
    oFitCurve.SetFitPoints(ref aFitPnts);
    oFitCurve.BesselTangents = true;
    aCurves[0] = new BsplineCurveClass();
    aCurves[0].FromInterpolationCurve(oFitCurve);
    aFitPnts[0] = app.Point3dFromXYZ(6.4, ‐22, 0);
    aFitPnts[1] = app.Point3dFromXYZ(7.1, ‐21.2, 0.7);
    aFitPnts[2] = app.Point3dFromXYZ(7.7, ‐21, 1);
    aFitPnts[3] = app.Point3dFromXYZ(8.4, ‐21.7, ‐0.2);
    oFitCurve.SetFitPoints(ref aFitPnts);
    oFitCurve.BesselTangents = true;
    aCurves[1] = new BsplineCurveClass();
    aCurves[1].FromInterpolationCurve(oFitCurve);
    aFitPnts[0] = app.Point3dFromXYZ(5.9, ‐23, 0);
    aFitPnts[1] = app.Point3dFromXYZ(7.2, ‐23.1, 1.2);
    aFitPnts[2] = app.Point3dFromXYZ(7.8, ‐23.3, 0.8);
    aFitPnts[3] = app.Point3dFromXYZ(8.7, ‐22.8, 0.2);
    oFitCurve.SetFitPoints(ref aFitPnts);
    oFitCurve.BesselTangents = true;
    aCurves[2] = new BsplineCurveClass();
    aCurves[2].FromInterpolationCurve(oFitCurve);
    BsplineSurface oBsplineSurface = new BsplineSurfaceClass();
    oBsplineSurface.FromCrossSections(ref aCurves, MsdBsplineSurfaceDirection.V,
    4, true, true);
    BsplineSurfaceElement oSurfaceElm = app.CreateBsplineSurfaceElement1(null,
    oBsplineSurface);
    oSurfaceElm.Color = 1;
    app.ActiveModelReference.AddElement(oSurfaceElm);
    }
    }
    }
    4. 打開MyAddins.cs文件修改如下。
    4. Open file MyAddins.cs and modify it as below.
    protected override int Run(string[] commandLine)
    {
    //string sWinFrameworkPath = RuntimeEnvironment.GetRuntimeDirectory();
    //MessageBox.Show("Framework Path =" + sWinFrameworkPath);
    CreateElement.LineAndLineString();
    CreateElement.ShapeAndComplexShape();
    CreateElement.TextAndTextNode();
    CreateElement.CellAndSharedCell();
    CreateElement.LinearAndAngularDimension();
    CreateElement.CurveAndBsplineCurve();
    CreateElement.ConeAndBsplineSurface();
    return 0;
    }

    窗口停靠:

    画如下图形:

    使用样条线可以实现revit历练类似放样融合的功能。

    可以调用mdl的接口:

    还有一些事件映射,现在暂时用不到。

  • 相关阅读:
    [BUUCTF]PWN14——not_the_same_3dsctf_2016
    flask cookie
    关于cookie和session
    mysql修改表操作
    MySQL 增删改查
    mysql数据类型
    python读写mysql
    聚合查询
    条件查询
    排序
  • 原文地址:https://www.cnblogs.com/liaocheng/p/8358551.html
Copyright © 2011-2022 走看看