61
AutoCAD .NET API / Re: Множественное копирование
« Последний ответ от Judas 10-05-2024, 13:11:00 »Получилось так
Код - C# [Выбрать]
- using (Teigha.DatabaseServices.Transaction tr = db.TransactionManager.StartTransaction())
- {
- BlockTableRecord blocktableRecord = tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
- //Получаем полилинию (точки) для копирования
- Polyline trassa = tr.GetObject(trassId, OpenMode.ForRead) as Polyline;
- //Первая расчетная точка полилинии
- Point3d startPoint = trassa.GetPoint3dAt(0);
- //Перебор всех точек, кроме 1-ой: считается что сечение стоит там
- for (int i = 1; i <= (trassa.NumberOfVertices - 1); i++)
- {
- //Начальная и конечная точка отрезка на полилинии
- Point3d insPoint = trassa.GetPoint3dAt(i);
- Polyline cross = tr.GetObject(crossId, OpenMode.ForRead) as Polyline;
- Polyline crossClone = cross.Clone() as Polyline;
- //Перемещение копии
- crossClone.TransformBy(Matrix3d.Displacement(insPoint - startPoint));
- blocktableRecord.AppendEntity(crossClone);
- tr.AddNewlyCreatedDBObject(crossClone, true);
- }
- tr.Commit();
- }
Последние сообщения
, но это так коряво и при наличие множества битых полей не надежно, да и положение получается не отдельного поля, а строки в MTextе
Есть плоские сплайны (IsPlanar == true), у них можно вызвать GetPlane. Вот там и нормаль.