沿平面镜像对象 (.NET)
使用对象的方法和 Matrix 的方法,可以沿着由三个点指定的指定镜像平面镜像对象。TransformByMirroring ![]() 3D镜像本示例在模型空间中创建一个框。然后,它将盒子镜像到一个平面上,并将镜像的盒子涂成红色。 VB.NETImports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
<CommandMethod("MirrorABox3D")> _
Public Sub MirrorABox3D()
'' Get the current document and database, and start a transaction
Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
Dim acCurDb As Database = acDoc.Database
Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
'' Open the Block table for read
Dim acBlkTbl As BlockTable
acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, _
OpenMode.ForRead)
'' Open the Block table record Model space for write
Dim acBlkTblRec As BlockTableRecord
acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _
OpenMode.ForWrite)
'' Create a 3D solid box
Using acSol3D As Solid3d = New Solid3d()
acSol3D.CreateBox(5, 7, 10)
'' Position the center of the 3D solid at (5,5,0)
acSol3D.TransformBy(Matrix3d.Displacement(New Point3d(5, 5, 0) - _
Point3d.Origin))
'' Add the new object to the block table record and the transaction
acBlkTblRec.AppendEntity(acSol3D)
acTrans.AddNewlyCreatedDBObject(acSol3D, True)
'' Create a copy of the original 3D solid and change the color of the copy
Dim acSol3DCopy As Solid3d = acSol3D.Clone()
acSol3DCopy.ColorIndex = 1
'' Define the mirror plane
Dim acPlane As Plane = New Plane(New Point3d(1.25, 0, 0), _
New Point3d(1.25, 2, 0), _
New Point3d(1.25, 2, 2))
'' Mirror the 3D solid across the plane
acSol3DCopy.TransformBy(Matrix3d.Mirroring(acPlane))
'' Add the new object to the block table record and the transaction
acBlkTblRec.AppendEntity(acSol3DCopy)
acTrans.AddNewlyCreatedDBObject(acSol3DCopy, True)
End Using
'' Save the new objects to the database
acTrans.Commit()
End Using
End Sub
C#using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
[CommandMethod("MirrorABox3D")]
public static void MirrorABox3D()
{
// Get the current document and database, and start a transaction
Document acDoc = Application.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
// Open the Block table record for read
BlockTable acBlkTbl;
acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
OpenMode.ForRead) as BlockTable;
// Open the Block table record Model space for write
BlockTableRecord acBlkTblRec;
acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
OpenMode.ForWrite) as BlockTableRecord;
// Create a 3D solid box
using (Solid3d acSol3D = new Solid3d())
{
acSol3D.CreateBox(5, 7, 10);
// Position the center of the 3D solid at (5,5,0)
acSol3D.TransformBy(Matrix3d.Displacement(new Point3d(5, 5, 0) -
Point3d.Origin));
// Add the new object to the block table record and the transaction
acBlkTblRec.AppendEntity(acSol3D);
acTrans.AddNewlyCreatedDBObject(acSol3D, true);
// Create a copy of the original 3D solid and change the color of the copy
Solid3d acSol3DCopy = acSol3D.Clone() as Solid3d;
acSol3DCopy.ColorIndex = 1;
// Define the mirror plane
Plane acPlane = new Plane(new Point3d(1.25, 0, 0),
new Point3d(1.25, 2, 0),
new Point3d(1.25, 2, 2));
// Mirror the 3D solid across the plane
acSol3DCopy.TransformBy(Matrix3d.Mirroring(acPlane));
// Add the new object to the block table record and the transaction
acBlkTblRec.AppendEntity(acSol3DCopy);
acTrans.AddNewlyCreatedDBObject(acSol3DCopy, true);
}
// Save the new objects to the database
acTrans.Commit();
}
}
VBA/ActiveX 代码参考Sub MirrorABox3D()
' Create the box object
Dim boxObj As Acad3DSolid
Dim length As Double
Dim width As Double
Dim height As Double
Dim center(0 To 2) As Double
center(0) = 5#: center(1) = 5#: center(2) = 0
length = 5#: width = 7: height = 10#
' Create the box (3DSolid) object in model space
Set boxObj = ThisDrawing.ModelSpace. _
AddBox(center, length, width, height)
' Define the mirroring plane with three points
Dim mirrorPt1(0 To 2) As Double
Dim mirrorPt2(0 To 2) As Double
Dim mirrorPt3(0 To 2) As Double
mirrorPt1(0) = 1.25: mirrorPt1(1) = 0: mirrorPt1(2) = 0
mirrorPt2(0) = 1.25: mirrorPt2(1) = 2: mirrorPt2(2) = 0
mirrorPt3(0) = 1.25: mirrorPt3(1) = 2: mirrorPt3(2) = 2
' Mirror the box
Dim mirrorBoxObj As Acad3DSolid
Set mirrorBoxObj = boxObj.Mirror3D _
(mirrorPt1, mirrorPt2, mirrorPt3)
mirrorBoxObj.Color = acRed
ZoomAll
End Sub
相关概念父主题: |
|Archiver|CAD开发者社区
( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-11-1 12:02
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.