View Issue Details

IDProjectCategoryView StatusLast Update
0004514SketcherBugpublic2020-12-20 18:30
ReporterVorpal Assigned Toabdullah  
PrioritynormalSeveritymajorReproducibilityalways
Status closedResolutionfixed 
PlatformLinuxOSUbuntuOS Version18.04
Summary0004514: Sketcher crash upon mirroring box selected bspline
DescriptionWhen box selecting a bspline such that the control points are also selected, then mirroring said selection, FreeCAD segfaults.

I would expect the mirroring code to ignore the control points when mirroring instead of failing on them.
Steps To Reproduce1. Open attached FreeCAD document
2. Box select bspline (as in attached image)
3. Select an axis or the origin to mirror about.
4. Press the mirror button in the toolbar.
5. FreeCAD segfaults
Additional InformationOn most crashes I get stacktrace on the terminal, though sometimes it just crashes without a stacktrace:


Program received signal SIGSEGV, Segmentation fault.
#0  /lib/x86_64-linux-gnu/libc.so.6(+0x3f040) [0x7f5e8e9bf040]
#1  /lib/x86_64-linux-gnu/libc.so.6(+0xa9c6a) [0x7f5e8ea29c6a]
0000002  0x7f5e8fff6b9d in operator==(SbName const&, char const*) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libCoin.so.80+0xd
0000003  0x7f5e900ea645 in SoFieldData::hasField(char const*) const from /tmp/.mount_freecaaobA25/usr/bin/../lib/libCoin.so.80+0x35
0000004  0x7f5e900ea69a in SoFieldData::addField(SoFieldContainer*, char const*, SoField const*) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libCoin.so.80+0x2a
0000005  0x7f5e903555e5 in SoImage::SoImage() from /tmp/.mount_freecaaobA25/usr/bin/../lib/libCoin.so.80+0x195
0000006  0x7f5e9035594d in SoImage::createInstance() from /tmp/.mount_freecaaobA25/usr/bin/../lib/libCoin.so.80+0x1d
0000007  0x7f5e900e70c6 in SoFieldContainer::setToDefaults() from /tmp/.mount_freecaaobA25/usr/bin/../lib/libCoin.so.80+0x86
0000008  0x7f5dd833504c in SketcherGui::ViewProviderSketch::drawMergedConstraintIcons(std::vector<SketcherGui::ViewProviderSketch::constrIconQueueItem, std::allocator<SketcherGui::ViewProviderSketch::constrIconQueueItem> >) from /tmp/.mount_freecaaobA25/usr/lib/SketcherGui.so+0x5c
0000009  0x7f5dd8336953 in SketcherGui::ViewProviderSketch::combineConstraintIcons(std::vector<SketcherGui::ViewProviderSketch::constrIconQueueItem, std::allocator<SketcherGui::ViewProviderSketch::constrIconQueueItem> >) from /tmp/.mount_freecaaobA25/usr/lib/SketcherGui.so+0x473
0000010  0x7f5dd8337c5c in SketcherGui::ViewProviderSketch::drawConstraintIcons() from /tmp/.mount_freecaaobA25/usr/lib/SketcherGui.so+0xd5c
0000011  0x7f5dd833c07c in SketcherGui::ViewProviderSketch::draw(bool, bool) from /tmp/.mount_freecaaobA25/usr/lib/SketcherGui.so+0x358c
0000012  0x7f5dd834b46e in SketcherGui::ViewProviderSketch::updateData(App::Property const*) from /tmp/.mount_freecaaobA25/usr/lib/SketcherGui.so+0x1ae
0000013  0x7f5e915da316 in Gui::ViewProviderDocumentObject::update(App::Property const*) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libFreeCADGui.so+0x56
0000014  0x7f5e9121d02e in Gui::Document::slotChangedObject(App::DocumentObject const&, App::Property const&) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libFreeCADGui.so+0x4e
0000015  /tmp/.mount_freecaaobA25/usr/bin/../lib/libFreeCADApp.so(+0x1a0eae) [0x7f5e9079beae]
0000016  0x7f5e907cea9c in App::DocumentObject::onChanged(App::Property const*) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libFreeCADApp.so+0x2bc
0000017  0x7f5e6a543010 in Part::Feature::onChanged(App::Property const*) from /tmp/.mount_freecaaobA25/usr/lib/Part.so+0x50
0000018  0x7f5e0423f866 in Sketcher::SketchObject::onChanged(App::Property const*) from /tmp/.mount_freecaaobA25/usr/lib/Sketcher.so+0x66
0000019  0x7f5e908d11fb in App::Property::hasSetValue() from /tmp/.mount_freecaaobA25/usr/bin/../lib/libFreeCADApp.so+0x3b
0000020  0x7f5e6a55fd7c in Part::PropertyGeometryList::setValues(std::vector<Part::Geometry*, std::allocator<Part::Geometry*> > const&&) from /tmp/.mount_freecaaobA25/usr/lib/Part.so+0x11c
0000021  0x7f5e6a55ffb1 in Part::PropertyGeometryList::setValues(std::vector<Part::Geometry*, std::allocator<Part::Geometry*> > const&) from /tmp/.mount_freecaaobA25/usr/lib/Part.so+0xd1
0000022  0x7f5e04220493 in Sketcher::SketchObject::solve(bool) from /tmp/.mount_freecaaobA25/usr/lib/Sketcher.so+0x243
0000023  0x7f5dd827106e in SketcherGui::tryAutoRecompute(Sketcher::SketchObject*, bool&) from /tmp/.mount_freecaaobA25/usr/lib/SketcherGui.so+0xae
0000024  0x7f5dd8271113 in SketcherGui::tryAutoRecomputeIfNotSolve(Sketcher::SketchObject*) from /tmp/.mount_freecaaobA25/usr/lib/SketcherGui.so+0x23
0000025  0x7f5dd82aaa1a in CmdSketcherSymmetry::activated(int) from /tmp/.mount_freecaaobA25/usr/lib/SketcherGui.so+0x57a
0000026  0x7f5e91293686 in Gui::Command::invoke(int, Gui::Command::TriggerSource) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libFreeCADGui.so+0x336
0000027  0x7f5e8f1060d2 in QMetaObject::activate(QObject*, int, int, void**) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Core.so.5+0x780
0000028  0x7f5e8f91596e in QAction::triggered(bool) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Widgets.so.5+0x32
0000029  0x7f5e8f917249 in QAction::activate(QAction::ActionEvent) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Widgets.so.5+0xcb
0000030  /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Widgets.so.5(+0x20e28a) [0x7f5e8f9b428a]
0000031  0x7f5e8f9b434a in QAbstractButton::mouseReleaseEvent(QMouseEvent*) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Widgets.so.5+0x88
0000032  0x7f5e8fa4b1c6 in QToolButton::mouseReleaseEvent(QMouseEvent*) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Widgets.so.5+0xa
0000033  0x7f5e8f945c23 in QWidget::event(QEvent*) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Widgets.so.5+0x135
0000034  0x7f5e8fa4b25d in QToolButton::event(QEvent*) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Widgets.so.5+0x4f
0000035  0x7f5e8f91a83a in QApplicationPrivate::notify_helper(QObject*, QEvent*) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Widgets.so.5+0xde
0000036  0x7f5e8f91f0a9 in QApplication::notify(QObject*, QEvent*) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Widgets.so.5+0x79d
0000037  0x7f5e91257189 in Gui::GUIApplication::notify(QObject*, QEvent*) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libFreeCADGui.so+0x89
0000038  0x7f5e8f0efa9c in QCoreApplication::notifyInternal2(QObject*, QEvent*) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Core.so.5+0x88
#39  0x7f5e8f91e553 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool, bool) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Widgets.so.5+0x283
#40  /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Widgets.so.5(+0x1af580) [0x7f5e8f955580]
0000041  /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Widgets.so.5(+0x1b03d2) [0x7f5e8f9563d2]
0000042  0x7f5e8f91a83a in QApplicationPrivate::notify_helper(QObject*, QEvent*) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Widgets.so.5+0xde
0000043  0x7f5e8f920405 in QApplication::notify(QObject*, QEvent*) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Widgets.so.5+0x1af9
0000044  0x7f5e91257189 in Gui::GUIApplication::notify(QObject*, QEvent*) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libFreeCADGui.so+0x89
0000045  0x7f5e8f0efa9c in QCoreApplication::notifyInternal2(QObject*, QEvent*) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Core.so.5+0x88
0000046  0x7f5e8f496724 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Gui.so.5+0x684
0000047  0x7f5e8f4972f7 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Gui.so.5+0x175
0000048  0x7f5e8f484020 in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Gui.so.5+0x64
0000049  /tmp/.mount_freecaaobA25/usr/plugins/platforms/../../lib/libQt5XcbQpa.so.5(+0x5b1ea) [0x7f5e892901ea]
0000050  /tmp/.mount_freecaaobA25/usr/bin/../lib/./libglib-2.0.so.0(g_main_context_dispatch+0x2cb) [0x7f5e8b22cdeb]
0000051  /tmp/.mount_freecaaobA25/usr/bin/../lib/./libglib-2.0.so.0(+0x55031) [0x7f5e8b22d031]
0000052  /tmp/.mount_freecaaobA25/usr/bin/../lib/./libglib-2.0.so.0(g_main_context_iteration+0x2e) [0x7f5e8b22d0be]
0000053  0x7f5e8f11ed23 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Core.so.5+0x63
0000054  0x7f5e8f0ec4d7 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) from /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Core.so.5+0x187
0000055  0x7f5e8f0f034f in QCoreApplication::exec() from /tmp/.mount_freecaaobA25/usr/bin/../lib/libQt5Core.so.5+0x105
0000056  0x7f5e911cd577 in Gui::Application::runApplication() from /tmp/.mount_freecaaobA25/usr/bin/../lib/libFreeCADGui.so+0x15e7
0000057  /tmp/.mount_freecaaobA25/usr/bin/freecad(+0x37cd) [0x55fda81207cd]
0000058  /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xe7) [0x7f5e8e9a1bf7]
0000059  /tmp/.mount_freecaaobA25/usr/bin/freecad(+0x4559) [0x55fda8121559]
TagsNo tags attached.
FreeCAD InformationOS: Ubuntu 18.04.5 LTS (X-Cinnamon/cinnamon)
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.19.23323 (Git) AppImage
Build type: Release
Branch: master
Hash: 512d5c6141aec52b6eecc67370336a28fde862a6
Python version: 3.8.6
Qt version: 5.12.5
Coin version: 4.0.0
OCC version: 7.4.0
Locale: English/United Kingdom (en_GB)

Activities

Vorpal

2020-12-17 00:09

reporter  

broken_mirror_2.FCStd (4,433 bytes)
freecad_box_select.png (13,656 bytes)   
freecad_box_select.png (13,656 bytes)   

Vorpal

2020-12-17 00:25

reporter   ~0015154

I experimented some more. Interestingly this seems to be unique to bsplines. The centre points of circles and arcs as well as the various control lines of ellipses and hyperbola do not cause crashes:
  • The control lines seem to actually act more like free-standing construction elements, and it is possible to not mirror them (very weird).
  • On the other hand, the circle/arc centre points seem to be special but ignored.

chennes

2020-12-19 19:38

administrator   ~0015159

I'm getting a slightly different failure: instead of a seg fault immediately, I get an assertion failure on the first mouseMove event in the viewer window.

The assertion is:
index ?= 0 && index < this->numCoords

My version is:
OS: Windows 10 Version 2004
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.19.23448 (Git)
Build type: Debug
Branch: master
Hash: c276139f192a51bd9c57a911e1d70f1398e69d01
Python version: 3.8.6+
Qt version: 5.15.1
Coin version: 4.0.1
OCC version: 7.5.0
Locale: English/United States (en_US)


Backtrace:

>	ucrtbased.dll!common_assert_to_message_box<wchar_t>(const wchar_t * const expression, const wchar_t * const file_name, const unsigned int line_number, void * const return_address) Line 388	C++
     ucrtbased.dll!common_assert<wchar_t>(const wchar_t * const expression, const wchar_t * const file_name, const unsigned int line_number, void * const return_address) Line 424	C++
     ucrtbased.dll!_wassert(const wchar_t * expression, const wchar_t * file_name, unsigned int line_number) Line 444	C++
     Coin4d.dll!SoCoordinateElement::get3(const int index) Line 178	C++
     Coin4d.dll!SoLineSet::generatePrimitives(SoAction * action) Line 722	C++
     Coin4d.dll!SoShape::rayPick(SoRayPickAction * action) Line 464	C++
     Coin4d.dll!SoNode::rayPickS(SoAction * action, SoNode * node) Line 1170	C++
     Coin4d.dll!SoAction::traverse(SoNode * const node) Line 951	C++
     Coin4d.dll!SoChildList::traverse(SoAction * const action, const int first, const int last) Line 381	C++
     Coin4d.dll!SoChildList::traverse(SoAction * const action) Line 451	C++
     Coin4d.dll!SoGroup::doAction(SoAction * action) Line 552	C++
     Coin4d.dll!SoSeparator::doAction(SoAction * action) Line 490	C++
     Coin4d.dll!SoSeparator::rayPick(SoRayPickAction * action) Line 866	C++
     Coin4d.dll!SoNode::rayPickS(SoAction * action, SoNode * node) Line 1170	C++
     Coin4d.dll!SoAction::traverse(SoNode * const node) Line 951	C++
     Coin4d.dll!SoChildList::traverse(SoAction * const action, const int first, const int last) Line 381	C++
     Coin4d.dll!SoChildList::traverse(SoAction * const action) Line 451	C++
     Coin4d.dll!SoGroup::doAction(SoAction * action) Line 552	C++
     Coin4d.dll!SoSeparator::doAction(SoAction * action) Line 490	C++
     Coin4d.dll!SoSeparator::rayPick(SoRayPickAction * action) Line 866	C++
     Coin4d.dll!SoNode::rayPickS(SoAction * action, SoNode * node) Line 1170	C++
     Coin4d.dll!SoAction::traverse(SoNode * const node) Line 951	C++
     Coin4d.dll!SoChildList::traverse(SoAction * const action, const int first, const int last) Line 381	C++
     Coin4d.dll!SoChildList::traverse(SoAction * const action) Line 451	C++
     Coin4d.dll!SoGroup::doAction(SoAction * action) Line 552	C++
     Coin4d.dll!SoSeparator::doAction(SoAction * action) Line 490	C++
     Coin4d.dll!SoSeparator::rayPick(SoRayPickAction * action) Line 866	C++
     Coin4d.dll!SoNode::rayPickS(SoAction * action, SoNode * node) Line 1170	C++
     Coin4d.dll!SoAction::traverse(SoNode * const node) Line 951	C++
     Coin4d.dll!SoChildList::traverse(SoAction * const action, const int first, const int last) Line 381	C++
     Coin4d.dll!SoChildList::traverse(SoAction * const action) Line 451	C++
     Coin4d.dll!SoGroup::doAction(SoAction * action) Line 552	C++
     Coin4d.dll!SoSeparator::doAction(SoAction * action) Line 490	C++
     Coin4d.dll!SoSeparator::rayPick(SoRayPickAction * action) Line 866	C++
     Coin4d.dll!SoNode::rayPickS(SoAction * action, SoNode * node) Line 1170	C++
     Coin4d.dll!SoAction::traverse(SoNode * const node) Line 951	C++
     Coin4d.dll!SoAction::beginTraversal(SoNode * node) Line 1273	C++
     Coin4d.dll!SoPickAction::beginTraversal(SoNode * node) Line 141	C++
     Coin4d.dll!SoRayPickAction::beginTraversal(SoNode * node) Line 1062	C++
     Coin4d.dll!SoAction::apply(SoNode * root) Line 566	C++
     FreeCADGui_d.dll!Gui::View3DInventorViewer::getPointOnRay(const SbVec2s & pos, Gui::ViewProvider * vp) Line 1159	C++
     FreeCADGui_d.dll!Gui::ViewProvider::getPointOnRay(const SbVec2s & pos, const Gui::View3DInventorViewer * viewer) Line 610	C++
     SketcherGui_d.pyd!SketcherGui::ViewProviderSketch::mouseMove(const SbVec2s & cursorPos, Gui::View3DInventorViewer * viewer) Line 1129	C++
     FreeCADGui_d.dll!Gui::ViewProvider::eventCallback(void * ud, SoEventCallback * node) Line 258	C++
     Coin4d.dll!SoEventCallback::handleEvent(SoHandleEventAction * action) Line 358	C++
     Coin4d.dll!SoNode::handleEventS(SoAction * action, SoNode * node) Line 1114	C++
     Coin4d.dll!SoAction::traverse(SoNode * const node) Line 951	C++
     Coin4d.dll!SoChildList::traverse(SoAction * const action, const int first, const int last) Line 381	C++
     Coin4d.dll!SoChildList::traverse(SoAction * const action) Line 451	C++
     Coin4d.dll!SoGroup::doAction(SoAction * action) Line 552	C++
     Coin4d.dll!SoSeparator::doAction(SoAction * action) Line 490	C++
     Coin4d.dll!SoSeparator::handleEvent(SoHandleEventAction * action) Line 819	C++
     FreeCADGui_d.dll!Gui::SoFCUnifiedSelection::handleEvent(SoHandleEventAction * action) Line 726	C++
     Coin4d.dll!SoNode::handleEventS(SoAction * action, SoNode * node) Line 1114	C++
     Coin4d.dll!SoAction::traverse(SoNode * const node) Line 951	C++
     Coin4d.dll!SoChildList::traverse(SoAction * const action, const int first, const int last) Line 381	C++
     Coin4d.dll!SoChildList::traverse(SoAction * const action) Line 451	C++
     Coin4d.dll!SoGroup::doAction(SoAction * action) Line 552	C++
     Coin4d.dll!SoSeparator::doAction(SoAction * action) Line 490	C++
     Coin4d.dll!SoSeparator::handleEvent(SoHandleEventAction * action) Line 819	C++
     Coin4d.dll!SoNode::handleEventS(SoAction * action, SoNode * node) Line 1114	C++
     Coin4d.dll!SoAction::traverse(SoNode * const node) Line 951	C++
     Coin4d.dll!SoHandleEventAction::beginTraversal(SoNode * node) Line 380	C++
     Coin4d.dll!SoAction::apply(SoNode * root) Line 566	C++
     Coin4d.dll!SoEventManager::actuallyProcessEvent(const SoEvent * const event) Line 367	C++
     Coin4d.dll!SoEventManager::processEvent(const SoEvent * const event) Line 316	C++
     FreeCADGui_d.dll!SIM::Coin3D::Quarter::QuarterWidget::processSoEvent(const SoEvent * event) Line 1087	C++
     FreeCADGui_d.dll!SIM::Coin3D::Quarter::SoQTQuarterAdaptor::processSoEvent(const SoEvent * event) Line 715	C++
     FreeCADGui_d.dll!Gui::View3DInventorViewer::processSoEventBase(const SoEvent * const ev) Line 2572	C++
     FreeCADGui_d.dll!Gui::NavigationStyle::processSoEvent(const SoEvent * const ev) Line 1491	C++
     FreeCADGui_d.dll!Gui::BlenderNavigationStyle::processSoEvent(const SoEvent * const ev) Line 382	C++
     FreeCADGui_d.dll!Gui::NavigationStyle::processEvent(const SoEvent * const ev) Line 1455	C++
     FreeCADGui_d.dll!Gui::View3DInventorViewer::processSoEvent(const SoEvent * ev) Line 2567	C++
     FreeCADGui_d.dll!SIM::Coin3D::Quarter::EventFilter::eventFilter(QObject * obj, QEvent * qevent) Line 173	C++
     [External Code]	
     FreeCADGui_d.dll!Gui::GUIApplication::notify(QObject * receiver, QEvent * event) Line 92	C++
     [External Code]	
     FreeCADGui_d.dll!Gui::GUIApplication::notify(QObject * receiver, QEvent * event) Line 92	C++
     [External Code]	
     FreeCADGui_d.dll!Gui::Application::runApplication() Line 2287	C++
     FreeCAD_d.exe!main(int argc, char * * argv) Line 302	C++
     FreeCAD_d.exe!WinMain(HINSTANCE__ * __formal, HINSTANCE__ * __formal, char * __formal, int __formal) Line 97	C++
     [External Code]	

abdullah

2020-12-20 18:30

manager   ~0015163

Fix committed to master branch.

Related Changesets

FreeCAD: master 2ebed71e

2020-12-20 10:42:45

abdullah


Committer: abdullahtahiriyo Details Diff
Sketcher: fix crash on mirroring geometry defined by internal alignment geometry

================================================================================

Internal Alignment constraint mirroring was never implemented. With the enhancements
brought with implementation of geometry extensions in the sketcher, this lack of
implementation became a crash, as geometry was marked as being internal alignment, while
no associated internal alignment constraint was created.

Restrictions:
- Internal alignment geometry is only to be mirrored if the geometry it defines is also
being mirrored. Internal alignment geometry is otherwise skipped. This is because it
does not make sense to have a pole without a b-spline, or a major axis of a ellipse without
an ellipse.

fixes 0004514
Affected Issues
0004514
mod - src/Mod/Sketcher/App/SketchObject.cpp Diff File

Issue History

Date Modified Username Field Change
2020-12-17 00:09 Vorpal New Issue
2020-12-17 00:09 Vorpal File Added: broken_mirror_2.FCStd
2020-12-17 00:09 Vorpal File Added: freecad_box_select.png
2020-12-17 00:25 Vorpal Note Added: 0015154
2020-12-19 19:38 chennes Note Added: 0015159
2020-12-20 18:30 abdullah Changeset attached => FreeCAD master 2ebed71e
2020-12-20 18:30 abdullah Note Added: 0015163
2020-12-20 18:30 abdullah Assigned To => abdullah
2020-12-20 18:30 abdullah Status new => closed
2020-12-20 18:30 abdullah Resolution open => fixed