Merge branch 'qcast-pub' into dev

This commit is contained in:
김민식 2025-03-05 14:30:50 +09:00
commit 6fd2f7d1ff
8 changed files with 21 additions and 87 deletions

View File

@ -54,7 +54,6 @@ export default function ColorPickerModal(props) {
<div className="left-bar modal-handle"></div> <div className="left-bar modal-handle"></div>
<div className="right-bar modal-handle"></div> <div className="right-bar modal-handle"></div>
<div className="color-setting-wrap"> <div className="color-setting-wrap">
<div className="color-tit">COLOR PICKER</div>
<div className="color-picker"> <div className="color-picker">
<ColorPicker color={originColor} setColor={setOriginColor} /> <ColorPicker color={originColor} setColor={setOriginColor} />
</div> </div>

View File

@ -39,7 +39,7 @@ export default function CanvasLayout({ children }) {
onClick={() => handleCurrentPlan(plan.id)} onClick={() => handleCurrentPlan(plan.id)}
> >
<span>{`Plan ${plan.planNo}`}</span> <span>{`Plan ${plan.planNo}`}</span>
{index !== 0 && !pathname.includes('/estimate') && !pathname.includes('/simulator') && ( {plans.length > 1 && !pathname.includes('/estimate') && !pathname.includes('/simulator') && (
<i <i
className="close" className="close"
onClick={(e) => { onClick={(e) => {

View File

@ -183,8 +183,10 @@ export default function CanvasMenu(props) {
await reloadCanvasStatus(objectNo, pid) await reloadCanvasStatus(objectNo, pid)
break break
case 'surface': case 'surface':
const modules = canvas.getObjects().filter((module) => module.name === POLYGON_TYPE.MODULE) const modules = canvas
initRoofs() .getObjects()
.filter((obj) => [POLYGON_TYPE.MODULE_SETUP_SURFACE, POLYGON_TYPE.MODULE, POLYGON_TYPE.OBJECT_SURFACE].includes(obj.name))
if (modules.length > 0) { if (modules.length > 0) {
swalFire({ swalFire({
text: getMessage('module.delete.confirm'), text: getMessage('module.delete.confirm'),
@ -194,10 +196,7 @@ export default function CanvasMenu(props) {
const moduleSurfacesArray = canvas const moduleSurfacesArray = canvas
.getObjects() .getObjects()
.filter( .filter((obj) => [POLYGON_TYPE.MODULE_SETUP_SURFACE, POLYGON_TYPE.MODULE, POLYGON_TYPE.OBJECT_SURFACE].includes(obj.name))
(obj) =>
obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE || obj.name === POLYGON_TYPE.MODULE || obj.name === POLYGON_TYPE.OBJECT_SURFACE,
)
if (moduleSurfacesArray.length > 0) { if (moduleSurfacesArray.length > 0) {
// //

View File

@ -9,7 +9,7 @@ import { canvasState, pitchTextSelector } from '@/store/canvasAtom'
import { defaultSlope } from '@/store/commonAtom' import { defaultSlope } from '@/store/commonAtom'
import { re } from 'mathjs' import { re } from 'mathjs'
import { basicSettingState } from '@/store/settingAtom' import { basicSettingState } from '@/store/settingAtom'
import { getChonByDegree } from '@/util/canvas-util' import { getChonByDegree, getDegreeByChon } from '@/util/canvas-util'
export default function DimensionLineSetting(props) { export default function DimensionLineSetting(props) {
const contextPopupPosition = useRecoilValue(contextPopupPositionState) const contextPopupPosition = useRecoilValue(contextPopupPositionState)
@ -106,14 +106,14 @@ export default function DimensionLineSetting(props) {
} }
const calculateLength = (originalLength, angle, angle1) => { const calculateLength = (originalLength, angle, angle1) => {
const slope1 = basicSetting.roofAngleSet !== 'slope' ? getChonByDegree(angle) : angle
const slope2 = basicSetting.roofAngleSet !== 'slope' ? getChonByDegree(angle1 ?? 0) : angle1
if (!angle1) { if (!angle1) {
const angleInRadians = slope1 * (Math.PI / 180) const slope1 = basicSetting.roofAngleSet !== 'slope' ? getDegreeByChon(angle) : angle
const result = Math.sqrt(Math.pow(originalLength * Math.tan(angleInRadians), 2) + Math.pow(originalLength, 2)) const result = Math.sqrt(Math.pow(originalLength * Math.tan((getDegreeByChon(slope1) * Math.PI) / 180), 2) + Math.pow(originalLength, 2))
console.log(angleInRadians, result) console.log(result)
return result return result
} else { } else {
const slope1 = basicSetting.roofAngleSet !== 'slope' ? getChonByDegree(angle) : angle
const slope2 = basicSetting.roofAngleSet !== 'slope' ? getChonByDegree(angle1 ?? 0) : angle1
const numerator = Math.sqrt(Math.pow(slope1, 2) + 100 + Math.pow((10 * slope1) / slope2, 2)) * originalLength const numerator = Math.sqrt(Math.pow(slope1, 2) + 100 + Math.pow((10 * slope1) / slope2, 2)) * originalLength
const denominator = Math.sqrt(Math.pow((10 * slope1) / slope2, 2) + 100) const denominator = Math.sqrt(Math.pow((10 * slope1) / slope2, 2) + 100)
const result = numerator / denominator const result = numerator / denominator

View File

@ -205,7 +205,7 @@ export default function ContextRoofAllocationSetting(props) {
)} )}
<div className="block-box"> <div className="block-box">
<div className="flex-ment"> <div className="flex-ment">
<span>{getMessage('slope')}</span> <span>{getMessage('modal.object.setting.offset.slope')}</span>
<div className="input-grid"> <div className="input-grid">
<input <input
type="text" type="text"
@ -221,27 +221,6 @@ export default function ContextRoofAllocationSetting(props) {
<span className="absol">{pitchText}</span> <span className="absol">{pitchText}</span>
</div> </div>
</div> </div>
<div className="block-box">
<div className="icon-btn-wrap">
<button
className={roof.layout === ROOF_MATERIAL_LAYOUT.PARALLEL ? 'act' : ''}
onClick={() => {
handleChangeLayout(ROOF_MATERIAL_LAYOUT.PARALLEL, index)
}}
>
{getMessage('modal.roof.alloc.select.parallel')}
<i className="allocation01"></i>
</button>
<button
className={roof.layout === ROOF_MATERIAL_LAYOUT.STAIRS ? 'act' : ''}
onClick={() => {
handleChangeLayout(ROOF_MATERIAL_LAYOUT.STAIRS, index)
}}
>
{getMessage('modal.roof.alloc.select.stairs')} <i className="allocation02"></i>
</button>
</div>
</div>
</div> </div>
</div> </div>
) )

View File

@ -202,7 +202,7 @@ export default function RoofAllocationSetting(props) {
)} )}
<div className="block-box"> <div className="block-box">
<div className="flex-ment"> <div className="flex-ment">
<span>{getMessage('slope')}</span> <span>{getMessage('modal.object.setting.offset.slope')}</span>
<div className="input-grid"> <div className="input-grid">
<input <input
type="text" type="text"
@ -217,7 +217,7 @@ export default function RoofAllocationSetting(props) {
<span className="absol">{pitchText}</span> <span className="absol">{pitchText}</span>
</div> </div>
</div> </div>
<div className="block-box"> {/* <div className="block-box">
<div className="icon-btn-wrap"> <div className="icon-btn-wrap">
<button <button
className={roof.layout === ROOF_MATERIAL_LAYOUT.PARALLEL ? 'act' : ''} className={roof.layout === ROOF_MATERIAL_LAYOUT.PARALLEL ? 'act' : ''}
@ -237,7 +237,7 @@ export default function RoofAllocationSetting(props) {
{getMessage('modal.roof.alloc.select.stairs')} <i className="allocation02"></i> {getMessage('modal.roof.alloc.select.stairs')} <i className="allocation02"></i>
</button> </button>
</div> </div>
</div> </div> */}
</div> </div>
</div> </div>
) )

View File

@ -362,7 +362,7 @@ export function useModule() {
} }
modules.forEach((module) => { modules.forEach((module) => {
const { top, left } = getPosotion(module, direction, Number(length) + Number(moduleLength), false) const { top, left } = getPosotion(module, direction, Number(length) + Number(moduleLength), true)
module.clone((obj) => { module.clone((obj) => {
obj.set({ obj.set({
parentId: module.parentId, parentId: module.parentId,
@ -689,7 +689,7 @@ export function useModule() {
targetModules.forEach((module) => { targetModules.forEach((module) => {
if (width === -1) if (width === -1)
width = type === MODULE_INSERT_TYPE.LEFT ? Number(activeModule.left) - Number(module.left) : Number(module.left) - Number(activeModule.left) width = type === MODULE_INSERT_TYPE.LEFT ? Number(activeModule.left) - Number(module.left) : Number(module.left) - Number(activeModule.left)
const { top, left } = getPosotion(module, type, module.width, false) const { top, left } = getPosotion(module, type, module.width, true)
module.originPos = { module.originPos = {
left: module.left, left: module.left,
top: module.top, top: module.top,
@ -706,7 +706,7 @@ export function useModule() {
canvas.renderAll() canvas.renderAll()
otherModules = getOtherModules(columnModules) otherModules = getOtherModules(columnModules)
columnModules.forEach((module) => { columnModules.forEach((module) => {
const { top, left } = getPosotion(module, type, module.width, false) const { top, left } = getPosotion(module, type, module.width, true)
let copyModule = null let copyModule = null
module.clone((obj) => { module.clone((obj) => {
obj.set({ obj.set({
@ -807,7 +807,7 @@ export function useModule() {
targetModules.forEach((module) => { targetModules.forEach((module) => {
if (height === -1) if (height === -1)
height = type === MODULE_INSERT_TYPE.TOP ? Number(activeModule.top) - Number(module.top) : Number(module.top) - Number(activeModule.top) height = type === MODULE_INSERT_TYPE.TOP ? Number(activeModule.top) - Number(module.top) : Number(module.top) - Number(activeModule.top)
const { top, left } = getPosotion(module, type, activeModule.height, false) const { top, left } = getPosotion(module, type, activeModule.height, true)
module.originPos = { module.originPos = {
left: module.left, left: module.left,
top: module.top, top: module.top,
@ -823,7 +823,7 @@ export function useModule() {
canvas.renderAll() canvas.renderAll()
otherModules = getOtherModules(rowModules) otherModules = getOtherModules(rowModules)
rowModules.forEach((module) => { rowModules.forEach((module) => {
const { top, left } = getPosotion(module, type, activeModule.height, false) const { top, left } = getPosotion(module, type, activeModule.height, true)
let copyModule = null let copyModule = null
module.clone((obj) => { module.clone((obj) => {
obj.set({ obj.set({

View File

@ -76,50 +76,7 @@ export function useContextMenu() {
const currentMenuSetting = () => { const currentMenuSetting = () => {
switch (selectedMenu) { switch (selectedMenu) {
case 'placement':
setContextMenu([
[
{
id: 'gridMove',
name: getMessage('modal.grid.move'),
component: <GridMove id={popupId} />,
},
{
id: 'gridCopy',
name: getMessage('modal.grid.copy'),
component: <GridCopy id={popupId} />,
},
{
id: 'gridColorEdit',
name: getMessage('modal.grid.color.edit'),
component: (
<ColorPickerModal
id={popupId}
color={gridColor}
setColor={setGridColor}
settingsData={settingsData}
setSettingsDataSave={setSettingsDataSave}
/>
),
},
{
id: 'remove',
name: getMessage('delete'),
},
{
id: 'removeAll',
name: getMessage('delete.all'),
fn: () => {
removeGrid()
removeAdsorptionPoint()
},
},
],
])
break
case 'outline': case 'outline':
if (['roof', 'auxiliaryLine'].includes(currentObject?.name)) {
}
break break
default: default:
setContextMenu([]) setContextMenu([])