元素结构:
一些基本元素的添加与绘制:
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的接口:
还有一些事件映射,现在暂时用不到。