Направляющие/выпускные линии Fabric.js

Я использую Fabric.js для создания редактора, который будет выводить изображения для печати. Это будут отпечатки под обрез, и мне нужен способ показать поля под обрез поверх всего остального на холсте.

Лучшее решение, которое я нашел до сих пор, — это просто нарисовать 4 линии на холсте, но они постоянно помещаются за другими объектами и нарушают порядок расположения объектов.

Кажется, что для этого должно быть простое решение. Какие-нибудь мысли?

введите здесь описание изображения


person BWDesign    schedule 17.08.2016    source источник
comment
пожалуйста, покажи свой код   -  person alessandro    schedule 17.08.2016
comment
Я не думаю, что у меня есть код, который имеет отношение к вопросу. Я ищу альтернативный метод тому, что у меня уже есть.   -  person BWDesign    schedule 17.08.2016


Ответы (1)


Так что лучше всего, вероятно, сделать группу из этих 4 строк, и каждый раз, когда вы добавляете новый объект на страницу, вам также нужно выводить группу строк на передний план.

var canvas = new fabric.Canvas('c', { 
	selection: true,
  preserveObjectStacking: true,
});
window.canvas = canvas;

var line1 = new fabric.Line([
  10, 0,
  10, canvas.height
],{ 
  stroke: '#000', 
})
var line2 = new fabric.Line([
  canvas.width - 10, 0,
  canvas.width - 10, canvas.height
],{ 
  stroke: '#000', 
})
var line3 = new fabric.Line([
  0, 10,
  canvas.width, 10
],{ 
  stroke: '#000', 
})
var line4 = new fabric.Line([
  0, canvas.height - 10,
  canvas.width, canvas.height - 10
],{ 
  stroke: '#000', 
});

var group = new fabric.Group([
	line1,
  line2,
  line3,
  line4
]);
group.selectable = false;
group.evented = false;

canvas.add(group);

canvas.add(new fabric.Circle({ 
  left: 300, 
  top: 300, 
  radius: 50, 
  fill: '#9f9', 
  originX: 'left', 
  originY: 'top',
  centeredRotation: true
}));
group.bringToFront();
canvas {
    border: 1px solid #ccc;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.6.3/fabric.js"></script>

<canvas id="c" width="600" height="600"></canvas>

person StefanHayden    schedule 19.08.2016
comment
Ваше решение очень похоже на решение, которое у меня уже есть, только я не знал о функции группировки. Я надеялся на совершенно другой метод рисования направляющих на холсте (тот, который не использует объекты), но я дам вам ответ, если альтернативы нет. - person BWDesign; 19.08.2016
comment
руководства по сборке в качестве расширения ткани могут быть классной небольшой библиотекой для выпуска. Я не знаю, как это сделать без этого в стеке объектов. - person StefanHayden; 19.08.2016
comment
Я надеялся на какое-то расширение. Я уже установил расширение рекомендаций по выравниванию (github.com/kangax /fabric.js/blob/master/lib/), так как у него была похожая функциональность, но нет возможности рисовать статические направляющие. Он показывает динамические направляющие линии, которые не являются частью стека объектов. - person BWDesign; 19.08.2016
comment
отлично! даже не знал, что там есть. - person StefanHayden; 19.08.2016
comment
@StefanHayden, выполняя группу, у меня проблемы, потому что эта группа получает всю область холста и предназначена для того, чтобы быть перед всеми объектами. Тогда у меня проблемы с курсором и перемещением внутренних объектов. Между прочим, я делаю: var group = new fabric.Group([line1,...], {selectable: false, hasControls: false, hasRotatingPoint: false, hoverCursor: 'not-allowed'}); - person Ricardo Carvalho; 30.05.2018
comment
TBH, вышеизложенное — самый умный способ: просто специально пометьте объекты в виде линий (и других полезных вещей) и управляйте ими соответствующим образом. Помимо групп, вы также можете просмотреть коллекции пространств имен. В качестве альтернативы можно было бы рассмотреть использование функции фонового/переднего плана Fabric или иметь полностью отдельный элемент «холст» (задний и передний) основного «холста»… в любом случае вы просто вызываете больше проблем с управлением и производительностью. недостатки. В конце концов, вы не можете избежать аспекта управления; никто не знает, какие строки вы хотите, кроме вас. - person MarsAndBack; 12.07.2020