public GeoObject loadGeoObject(GeoRefObject refObject, GeoObject geoObject) { GeoObject returnObject = geoObject; if (refObject.hasReturnMode(GeoReturnModes.ClosesNode)) { //todo } if (refObject.hasReturnMode(GeoReturnModes.OpensNode)) { //todo } if (refObject.hasReturnMode(GeoReturnModes.Scaling)) { //geo scaling returnObject.objScale.SetScale((uint)elem.geoParams[1].GetVal()); } if (refObject.hasReturnMode(GeoReturnModes.Translation) || refObject.hasReturnMode(GeoReturnModes.Rotation)) { if (refObject.hasReturnMode(GeoReturnModes.Translation) && refObject.hasReturnMode(GeoReturnModes.Rotation)) { //geo translation and rotation returnObject.objTrans.xTrans = (short)elem.geoParams[1].GetVal(); returnObject.objTrans.yTrans = (short)elem.geoParams[2].GetVal(); returnObject.objTrans.zTrans = (short)elem.geoParams[3].GetVal(); returnObject.objRot.xRot = (short)elem.geoParams[4].GetVal(); returnObject.objRot.yRot = (short)elem.geoParams[5].GetVal(); returnObject.objRot.zRot = (short)elem.geoParams[6].GetVal(); } else { if (refObject.hasReturnMode(GeoReturnModes.Translation)) { //geo translation returnObject.objTrans.xTrans = (short)elem.geoParams[1].GetVal(); returnObject.objTrans.yTrans = (short)elem.geoParams[2].GetVal(); returnObject.objTrans.zTrans = (short)elem.geoParams[3].GetVal(); } if (refObject.hasReturnMode(GeoReturnModes.Rotation)) { //geo rotation returnObject.objRot.xRot = (short)elem.geoParams[1].GetVal(); returnObject.objRot.yRot = (short)elem.geoParams[2].GetVal(); returnObject.objRot.zRot = (short)elem.geoParams[3].GetVal(); } } } if (refObject.hasReturnMode(GeoReturnModes.GeoDL)) { returnObject.f3d.SetInitialDataFromLabelName(elem.geoParams[elem.geoParams.Count - 1].GetVal()); } return(returnObject); }
public List <GeoObject> GetGeoObjectsFromGeoElems(List <GeoElem> geoElems, string labelName, GeoObject prevObject = null) { List <GeoObject> geoObjects = new List <GeoObject>(); GeoObject curObject; if (prevObject == null) { curObject = new GeoObject(GeoObjectTypes.RenderObject); } else { curObject = prevObject; } foreach (GeoElem geoElem in geoElems) { if (labelName != null) { string[] name = MISCUtils.ParseAsmbd(geoElem.geoName); if (name[0] == "glabel") { if (name[1] != labelName) { continue; } } } if (geoElem.type == GeoType.ListCloser) { geoObjects.Add(new GeoObject(GeoObjectTypes.PopMatrix)); } GeoCMDs CMD = new GeoCMDs(); CMD.elem = geoElem; curObject = CMD.loadGeoObject(CMD.getRefObject(), curObject); if (curObject.f3d.fileName != null) { geoObjects.Add(curObject); curObject = new GeoObject(GeoObjectTypes.RenderObject); } if (geoElem.type == GeoType.ListOpener) { geoObjects.Add(new GeoObject(GeoObjectTypes.PushMatrix)); geoObjects.AddRange(GetGeoObjectsFromGeoElems(geoElem.geoElems, labelName, curObject)); } } return(geoObjects); }