Skip to content

gi-nx


gi-nx / updateRawSections

ts
function updateRawSections(features: {
  geometry?:   | {
     coordinates: [number, number];
     type: "Point";
   }
     | {
     coordinates: [number, number][];
     type: "MultiPoint";
   }
     | {
     coordinates: [number, number][];
     type: "LineString";
   }
     | {
     coordinates: [number, number][][];
     type: "MultiLineString";
   }
     | {
     coordinates: [number, number][][];
     type: "Polygon";
   }
     | {
     coordinates: [number, number][][][];
     type: "MultiPolygon";
   };
  properties: {
     id: string;
   } & Partial<{
   [key: string]: any;
     angleOfRepose?: number;
     appId?: string;
     arrowEnd?: boolean;
     arrowEndLength?: number;
     arrowEndYawn?: number;
     arrowStart?: boolean;
     arrowStartLength?: number;
     arrowStartYawn?: number;
     baseHeight?: number;
     bevel?: number;
     bevelSegments?: number;
     blockBasePoint?: boolean;
     blockId?: string;
     blockPropagation?: Record<string, "pass" | "force" | "stop">;
     borderColor?: string;
     borderRadius?: number;
     borderStyle?:   | "solid"
        | "dotted"
        | "dashed"
        | "double"
        | "groove"
        | "ridge"
        | "inset"
        | "outset";
     borderWidth?: number;
     boxShadow?: number;
     buildingID?: string;
     childFeatures?: Feature<
        | LineString
        | Polygon, {
      [name: string]: any;
     }>[];
     circleText?: boolean;
     color?: string;
     content?: string;
     cornerRadius?: number;
     corners?: "fillet" | "chamfer";
     cutAndFill?: boolean;
     cutAndFillOffset?: number;
     dendrogram?: DendroRoot;
     depth?: number;
     doesStack?: boolean;
     dwellingCount?: NumberKeyValueList;
     dwellingCountPerLevel?: boolean;
     dwellingMix?: NumberKeyValueList;
     dwellingParkingRequired?: NumberKeyValueList;
     dwellingPrice?: NumberKeyValueList;
     dwellingResidents?: NumberKeyValueList;
     dwellingSize?: NumberKeyValueList;
     efficiency?: number;
     elevationDatum?: number;
     fillOpacity?: number;
     floorToFloor?: number;
     flow?: RawSectionFlowProp;
     fromLayer?: string;
     gltf?: string;
     groupID?: string;
     guidelineOffset?: number;
     height?: number;
     hideBackground?: boolean;
     hideFloors?: boolean;
     hideVerticals?: boolean;
     id: string;
     imageUrl?: string;
     isDraped?: boolean;
     label?: string;
     labelColor?: string;
     layerId?: string;
     levels?: number;
     loft?: boolean;
     lotNumber?: string;
     marker?: Marker;
     markerAnchor?:   | {
        label: "Right";
        value: "bottom left";
      }
        | {
        label: "Left";
        value: "bottom right";
      }
        | {
        label: "Center";
        value: "bottom";
      };
     markerIcon?: string;
     maxWidth?: number;
     mirror?: boolean;
     noFacade?: boolean;
     offset?: number;
     offsetSide?: "right" | "left" | "both";
     padding?: number;
     parkingProvided?: number;
     parkingRequired?: number;
     pavementWidth?: number;
     popup?: Record<string, any>;
     popupBorderColor?: string;
     popupBorderRadius?: number;
     popupBorderWidth?: number;
     popupColor?: string;
     popupContent?: string;
     popupHeight?: number;
     popupImg?: string;
     popupPadding?: number;
     popupWidth?: number;
     projectId: string;
     public: true;
     radius?: number;
     roadWidth?: number;
     rotation?: number;
     scale?: number;
     scenario?: string[];
     sellEfficiency?: number;
     shiny?: boolean;
     slabThickness?: number;
     sourceFeatureProperties?: Record<string, any>;
     stackOrder?: number;
     stickColor?: string;
     stickHeight?: number;
     stickWidth?: number;
     stroke?: string;
     strokeDasharray?: number[];
     strokeLinecap?: "butt" | "round" | "square";
     strokeLinejoin?: "bevel" | "round" | "miter";
     strokeOpacity?: number;
     strokeWidth?: number;
     textColor?: string;
     textSize?: number;
     topThickness?: number;
     type?: SectionType;
     usage?: string;
     visitorParkingRequired?: number;
     width?: number;
  }>;
}[]): void;

Same as updateRawSection but for many features. Partial updates are supported for each feature, but each must have properties.id to identify which section to update. Pass null for a property value to delete it.

Parameters

ParameterType
features{ geometry?: | { coordinates: [number, number]; type: "Point"; } | { coordinates: [number, number][]; type: "MultiPoint"; } | { coordinates: [number, number][]; type: "LineString"; } | { coordinates: [number, number][][]; type: "MultiLineString"; } | { coordinates: [number, number][][]; type: "Polygon"; } | { coordinates: [number, number][][][]; type: "MultiPolygon"; }; properties: { id: string; } & Partial<{ [key: string]: any; angleOfRepose?: number; appId?: string; arrowEnd?: boolean; arrowEndLength?: number; arrowEndYawn?: number; arrowStart?: boolean; arrowStartLength?: number; arrowStartYawn?: number; baseHeight?: number; bevel?: number; bevelSegments?: number; blockBasePoint?: boolean; blockId?: string; blockPropagation?: Record<string, "pass" | "force" | "stop">; borderColor?: string; borderRadius?: number; borderStyle?: | "solid" | "dotted" | "dashed" | "double" | "groove" | "ridge" | "inset" | "outset"; borderWidth?: number; boxShadow?: number; buildingID?: string; childFeatures?: Feature< | LineString | Polygon, { [name: string]: any; }>[]; circleText?: boolean; color?: string; content?: string; cornerRadius?: number; corners?: "fillet" | "chamfer"; cutAndFill?: boolean; cutAndFillOffset?: number; dendrogram?: DendroRoot; depth?: number; doesStack?: boolean; dwellingCount?: NumberKeyValueList; dwellingCountPerLevel?: boolean; dwellingMix?: NumberKeyValueList; dwellingParkingRequired?: NumberKeyValueList; dwellingPrice?: NumberKeyValueList; dwellingResidents?: NumberKeyValueList; dwellingSize?: NumberKeyValueList; efficiency?: number; elevationDatum?: number; fillOpacity?: number; floorToFloor?: number; flow?: RawSectionFlowProp; fromLayer?: string; gltf?: string; groupID?: string; guidelineOffset?: number; height?: number; hideBackground?: boolean; hideFloors?: boolean; hideVerticals?: boolean; id: string; imageUrl?: string; isDraped?: boolean; label?: string; labelColor?: string; layerId?: string; levels?: number; loft?: boolean; lotNumber?: string; marker?: Marker; markerAnchor?: | { label: "Right"; value: "bottom left"; } | { label: "Left"; value: "bottom right"; } | { label: "Center"; value: "bottom"; }; markerIcon?: string; maxWidth?: number; mirror?: boolean; noFacade?: boolean; offset?: number; offsetSide?: "right" | "left" | "both"; padding?: number; parkingProvided?: number; parkingRequired?: number; pavementWidth?: number; popup?: Record<string, any>; popupBorderColor?: string; popupBorderRadius?: number; popupBorderWidth?: number; popupColor?: string; popupContent?: string; popupHeight?: number; popupImg?: string; popupPadding?: number; popupWidth?: number; projectId: string; public: true; radius?: number; roadWidth?: number; rotation?: number; scale?: number; scenario?: string[]; sellEfficiency?: number; shiny?: boolean; slabThickness?: number; sourceFeatureProperties?: Record<string, any>; stackOrder?: number; stickColor?: string; stickHeight?: number; stickWidth?: number; stroke?: string; strokeDasharray?: number[]; strokeLinecap?: "butt" | "round" | "square"; strokeLinejoin?: "bevel" | "round" | "miter"; strokeOpacity?: number; strokeWidth?: number; textColor?: string; textSize?: number; topThickness?: number; type?: SectionType; usage?: string; visitorParkingRequired?: number; width?: number; }>; }[]

Returns

void

Examples

typescript
// Set height to 30 on multiple sections
const sections = await rpc.invoke("getRawSections");
await rpc.invoke("updateRawSections", [
  sections.map(s => ({
    properties: { id: s.properties.id, height: 30 }
  }))
]);
typescript
// Shift all selected features 0.001° east
const selected = await rpc.invoke("getSelectedFeatures");
await rpc.invoke("updateRawSections", [
  selected.features.map(f => ({
    geometry: {
      ...f.geometry,
      coordinates: f.geometry.coordinates.map(ring =>
        ring.map(([lng, lat]) => [lng + 0.001, lat])
      )
    },
    properties: { id: f.properties.id }
  }))
]);