А где-то есть более подробная подборка информации от Автодеска по:В таком виде информации нет.
Как из общей матрицы выделять поворот, перенос. и т.д.Вообще-то это не дело Autodesk разъяснять то, что следует знать из аналитической геометрии и матричного исчисления.
Несколько примеров есть:
И восстановить все единичные преобразования по результирующей матрице нельзя.это логично, на то она и результирующая.
Вообще-то это не дело Autodesk разъяснять то, что следует знать из аналитической геометрии и матричного исчисления.В других источника как-раз нашел, что матрица трансформации содержит информацию о сдвиге(тут могу напутать, это что-то из разряда трансформации ). Поддерживает ли такую возможность автодеск, ведь это далеко не очевидно что все в нем реализовано? Тут больше волнует не в плане возможностей создать, а в вероятности встретить в чертеже и как распознать.
В других источника как-раз нашел, что матрица трансформации содержит информацию о сдвиге (тут могу напутать, это что-то из разряда трансформации ).Сдвиг (скос) в теории может быть, но в AutoCAD такое преобразование не используется (т.е. ни ECS, ни DCS, ни UCS не могут содержать такую компоненту). Это преобразование меняет форму примитива. Имеет смысл только для твердых тел и поверхностей.
но у многих примитивов она единичная. Например, Line, Solid3d, Face.к сожалению это не так. Иначе бы и не интересовался.
у многих примитивов она единичная.Еще вопрос. есть ли стандартная проверка на единичную матрицу типа entity.Ecs.IsSingle
Вообще-то это не дело Autodesk разъяснять то, что следует знать из аналитической геометрии и матричного исчисления.
Сдвиг (скос) в теории может быть, но в AutoCAD такое преобразование не используется (т.е. ни ECS, ни DCS, ни UCS не могут содержать такую компоненту). Это преобразование меняет форму примитива. Имеет смысл только для твердых тел и поверхностей.
Цитата: Александр Ривилис от 13-05-2016, 14:21:23Приложи чертеж, в котором это так. Так быть не должно. Это какой-то глюк.
но у многих примитивов она единичная. Например, Line, Solid3d, Face.
к сожалению это не так. Иначе бы и не интересовался.
Line
Ecs: ((0.652308286583294,0,0.757953757992377,0),(0.757953757992377,0,-0.652308286583294,0),(0,1,0,0),(0,0,0,1))
Normal: (0.757953757992377,-0.652308286583294,0)
предварительное предположение такое:
если применен перенос, то координаты Line пересчитываются и Ecs единичная
если применен поворот, тогда получаем не единичную Ecs.
Еще вопрос. есть ли стандартная проверка на единичную матрицу типа entity.Ecs.IsSingle
Или стандартное получение матрицы, типа Matrix3d.Single
не смог найти подобные методы. И создаю единичную матрицу через передачу массива, и потом сравниваю.
Этот момент важен и поэтому и искал описание от автодеска, что может их матрица, а что нет, какими методами задается как считывать. И примеры кода с разъяснениями по матричным преобразованиям Api вроде как напрашивается, даже если освоил теорию.В документации ObjectARX есть какая-то информация по этому поводу. Например раздел: Autodesk ObjectARX for AutoCAD: Developer Guide > Basic Interaction with AutoCAD > Basic Interaction with AutoCAD > Selection Set, Entity, and Symbol Table Functions > Entity Name and Data Functions > Entity Name Functions > Entity Context and Coordinate Transform Data >
Так быть не должно. Это какой-то глюк.Я тоже не ожидал, пока не наткнулся. А потом понял, что все возможно)
Приложи чертеж, в котором это так.https://yadi.sk/d/cI7pRNRIrgd9C (https://yadi.sk/d/cI7pRNRIrgd9C)
Я тоже не ожидал, пока не наткнулся.Для отрезка это очень странно. И явно противоречит документации:
In AutoCAD, planar entities have an ECS; 3D entities do not. AutoCAD entities that can return a nonidentity matrix for their getEcs() function are:
Dimensions
Text
Circles
Arcs
2D polylines
Block inserts
Points
Traces
Solids
Shapes
Attribute definitions
Attributes
As AcDbLine is an object for which ECS is equivalent to WCS, getECS()Долго перечитывал его и пришёл к выводу, что ответивший не силён в матричном исчислении.
can return non identity matrix.
As AcDbLine is an object for which ECS is equivalent to WCS, getECS()
can return non identity matrix.
Если я правильно понял его, то он говорит, что Line ECS возвращает WCS. а WCS может не быть единичной матрицей.Именно это он и говорит. Но это чушь!
Или WCS всегда единичная матрицf?Конечно! ECS - это матрица преобразования из системы координат объекта в мировую систему координат (WCS). Если обе системы координат совпадают, то матрица преобразования единичная. Это азы матричного исчисления.
Так вот выдавливание и толщина направлены по вектору нормали примитива. Соотвественно вектор нормали у отрезка должен быть и соотвественно по этому вектору нормали вычисляется ECS.Про выдавливание вдоль нормали, направленной произвольно, т.е. не вдоль оси 0Z я натыкался с десяток раз.)))))
Вы указываете уже не первый раз, что вектор нормали первичен, а из него высчитывается ECS.Именно так. Это касается плоских объектов, о которых мы говорили.
Данное предположение основано на том, что ECS помимо поворота, который нужен для вычисления вектора нормали содержит еще и смещение и масштабирование по осям, которые вектор нормали не содержит.Смещение определяется свойством elevation для 2D-объектов, а масштабирование по осям есть только у вставки блока, и эти масштабы содержатся отдельно в свойстве scaleFactors. Для вставки блока вообще всё иначе. Как я блок не крутил, не зеркалил и не масштабировал его ECS оставалась единичной.
Это касается плоских объектов, о которых мы говорили.Ну мы же определили что они хорошо содержат в себе ECS. о которой ниже распишу.
Смещение определяется свойством elevation для 2D-объектов, а масштабирование по осям есть только у вставки блока, и эти масштабы содержатся отдельно в свойстве scaleFactors. Для вставки блока вообще всё иначе. Как я блок не крутил, не зеркалил и не масштабировал его ECS оставалась единичной.у меня другие выводы....просто почти уверен что прав, т.к. просмотрел с несколько десятков объектов с матрицей. И смотрел иерархию наследования объектов.
Есть матрица у объекта. Это именно Matrix3d. Она задает трансформацию координат объекта относительно MCS.Сохрани объект в DXF и поищи там матрицу.
Сохрани объект в DXF и поищи там матрицу.
Еще одно подтверждение моих слов
2. Скорее всего в Entity определено, что всегда выдается нулевая матрица, а наследуемый примитив должен переопределить выдаваемую матрицу на основе своих свойств. Что похоже не реализовано в Text.1. Не "нулевая", а "единичная" (identity) матрица.
Description
This function is intended to be overridden by derived classes that need to be able to provide access to an object coordinate system for objects of the class. The intent is that this function provide a transformation matrix that can be used to transform vectors or points from the object's object coordinate system (OCS) to the World Coordinate System (WCS).
Default implementation: Return the identity matrix (ones along the diagonal, zeros elsewhere) in retVal.
1. Не "нулевая", а "единичная" (identity) матрица.чет я плавно от единичной перешел к нулевой)))...поправил