fix #IPMHS 优化捕捉性能

pull/214/MERGE
ChenX 6 years ago
parent ddae4d616d
commit c64122eb19

@ -26,11 +26,11 @@ export function GenerateRaycaster(ptVcs: Vector3, view: IViewer): Raycaster
* @param {Object3D} [selectObject] . app.view.scene * @param {Object3D} [selectObject] . app.view.scene
* @returns {Object3D[]} ,. * @returns {Object3D[]} ,.
*/ */
export function PointPick(ptVcs: Vector3, view: IViewer, filter?: Filter, selectObject: Object3D = view.Scene): Object3D[] export function PointPick(ptVcs: Vector3, view: IViewer, filter?: Filter, selectObjects: Object3D[] = view.Scene.children): Object3D[]
{ {
let raycaster = GenerateRaycaster(ptVcs, view); let raycaster = GenerateRaycaster(ptVcs, view);
let intersection = Raycast(raycaster, selectObject.children, filter); let intersection = Raycast(raycaster, selectObjects, filter);
if (intersection.object) if (intersection.object)
return [intersection.object]; return [intersection.object];
@ -40,7 +40,7 @@ export function PointPick(ptVcs: Vector3, view: IViewer, filter?: Filter, select
let maxPt = pCenter.clone().add(selectSize); let maxPt = pCenter.clone().add(selectSize);
let selectBox = new SelectBox(view, minPt, maxPt, SelectType.C); let selectBox = new SelectBox(view, minPt, maxPt, SelectType.C);
selectBox.Select(selectObject.children, filter); selectBox.Select(selectObjects, filter);
return selectBox.m_SelectList; return selectBox.m_SelectList;
} }

@ -3,7 +3,7 @@ import { app } from '../ApplicationServices/Application';
import { arrayRemoveIf } from '../Common/ArrayExt'; import { arrayRemoveIf } from '../Common/ArrayExt';
import { ColorMaterial } from '../Common/ColorPalette'; import { ColorMaterial } from '../Common/ColorPalette';
import { GetPointPrompt } from '../Common/InputState'; import { GetPointPrompt } from '../Common/InputState';
import { FixIndex } from '../Common/Utils'; import { FixIndex, GetEntity } from '../Common/Utils';
import { Arc } from '../DatabaseServices/Arc'; import { Arc } from '../DatabaseServices/Arc';
import { Curve } from '../DatabaseServices/Curve'; import { Curve } from '../DatabaseServices/Curve';
import { Entity } from '../DatabaseServices/Entity'; import { Entity } from '../DatabaseServices/Entity';
@ -20,6 +20,7 @@ import { PromptBlock } from '../UI/DynamicPrompt/PromptBlock';
import { ObjectSnapMode } from './ObjectSnapMode'; import { ObjectSnapMode } from './ObjectSnapMode';
import { SelectPick } from './SelectPick'; import { SelectPick } from './SelectPick';
import { Circle } from '../DatabaseServices/Circle'; import { Circle } from '../DatabaseServices/Circle';
import { PointPick } from './PointPick';
/** /**
* 线 * 线
@ -226,12 +227,12 @@ export class SnapServices
) )
return this.m_LastSnapEntityPoint; return this.m_LastSnapEntityPoint;
//显示图元列表 let selectEns = PointPick(vcsP, app.m_Viewer, undefined, app.m_Viewer.VisibleObjects).map(GetEntity).filter(e => e !== undefined);
let visEns = app.m_Viewer.VisibleEntitys;
//如果只有切线捕捉 //如果只有切线捕捉
if (this.SnapModeEnable === ObjectSnapMode.Tan && !this.m_HasBasePoint) if (this.SnapModeEnable === ObjectSnapMode.Tan && !this.m_HasBasePoint)
for (let e of visEns) for (let e of selectEns)
{ {
if (e instanceof Circle || e instanceof Arc) if (e instanceof Circle || e instanceof Arc)
{ {
@ -265,9 +266,9 @@ export class SnapServices
if ((mode & this.SnapModeEnable) === 0) if ((mode & this.SnapModeEnable) === 0)
continue; continue;
for (let ei = 0, el = visEns.length; ei < el; ei++) for (let ei = 0, el = selectEns.length; ei < el; ei++)
{ {
let en = visEns[ei]; let en = selectEns[ei];
if (!en.Id || en.IsErase) if (!en.Id || en.IsErase)
continue; continue;
let sps = en.GetObjectSnapPoints(mode, wcsP, baseP, viewXform); let sps = en.GetObjectSnapPoints(mode, wcsP, baseP, viewXform);
@ -289,7 +290,7 @@ export class SnapServices
if (mode === ObjectSnapMode.End) if (mode === ObjectSnapMode.End)
for (; ei < el; ei++) for (; ei < el; ei++)
{ {
let en = visEns[ei]; let en = selectEns[ei];
let sps = en.GetObjectSnapPoints(ObjectSnapMode.End, wcsP, baseP, viewXform); let sps = en.GetObjectSnapPoints(ObjectSnapMode.End, wcsP, baseP, viewXform);
for (let i = 0, l = sps.length; i < l; i++) for (let i = 0, l = sps.length; i < l; i++)
{ {
@ -404,7 +405,7 @@ export class SnapServices
//#region 最近点捕捉 //#region 最近点捕捉
if (this.SnapModeEnable & ObjectSnapMode.Nea) if (this.SnapModeEnable & ObjectSnapMode.Nea)
for (let en of visEns) for (let en of selectEns)
{ {
if (!en.Id || en.IsErase) if (!en.Id || en.IsErase)
continue; continue;

@ -53,7 +53,7 @@ export class TransformServicess implements EditorService
return; return;
axes.Rest(); axes.Rest();
let objs = PointPick(ed.m_MouseCtrl.m_CurMousePointVCS, preView, undefined, axes); let objs = PointPick(ed.m_MouseCtrl.m_CurMousePointVCS, preView, undefined, axes.children);
if (objs.length === 1) if (objs.length === 1)
{ {
let obj = objs[0]; let obj = objs[0];

Loading…
Cancel
Save