# Server-Side Conditional Query and Expression Query

# Conditional Query

For the backend database table structure, use the SQL WHERE clause for data query. Only the part after where needs to be written.

Table structure:

Field Name Type Description
id integer id
objectid text Entity id (block objectid naming rule: block id_referenced block definition id1_referenced block definition id2 (may have multiple)_entity id; group objectid naming rule: group id$entity id_entity element index; table naming rule: table id@entity id_entity element index; other entity naming rule: id_entity element index)
layerindex integer Layer index
name text Entity type value, e.g. "1" for AcDbLine. See "Supported CAD Entity Types" below for specific values
color int Color (calculated from RGB, e.g. black is 0x000000, with alpha 0xFF000000, becomes unsigned 0xff000000<<0 result -16777216)
data blob Geometry data
s1 text Linetype
s2 text Extended dictionary data
s3 text Coordinate data, varies by entity
s4 text Character attribute data, varies by entity
s5 text Character attribute data, varies by entity
n1 float Color index
n2 float Linetype scale
n3 float Line width
n4 float Transparency
n5 float Numeric attribute data, varies by entity
n6 float Numeric attribute data, varies by entity
n7 float Numeric attribute data, varies by entity
n8 float Numeric attribute data, varies by entity
n9 float Numeric attribute data, varies by entity
n10 float Numeric attribute data, varies by entity
geom GEOMETRY Entity bounding rectangle

(For detailed field meanings by entity type, see the documentation below)

# Built-in Variables for Render Mode Expressions

Variable Description Type Example
gInColor Current entity input color (numeric) 4278255615
gInColorRed Current entity input color (red component) (numeric) 255
gInColorGreen Current entity input color (green component) (numeric) 255
gInColorBlue Current entity input color (blue component) (numeric) 0
gInZoom Current zoom level (numeric) 1
println Debug output function
gOutColor Output color (color to modify) (numeric) 4278255615

# Built-in Variables for Query Mode Style Expressions

Variable Description Type Example
gInLayerIndex Current entity layer index (numeric) 0
gInObjectId Current entity object ID (string) '283' e.g. gInObjectId=='283'
gInEntityObjId Current entity parent object ID (string) '1C' e.g. gInEntityObjId=='1C' takes characters before _ in gInObjectId, e.g. for block when gInObjectId=='283_1', then gInEntityObjId= '283'
gInFeatureType Current entity type (string) 'AcDbPolyline' e.g. gInFeatureType=='AcDbPolyline'
gInLayerName Current entity layer name (string) e.g. 'Layer1': gInLayerName=='Layer1'
gInColor Current entity color (numeric) 4278255615
gInColorRed Current entity color (red component) (numeric) 255
gInColorGreen Current entity color (green component) (numeric) 255
gInColorBlue Current entity color (blue component) (numeric) 0
gInColorAlpha Current entity color (alpha component) (numeric) 0
println Debug output function
gInExtendMinX Current entity extent (bottom-right X) (numeric) 700.10
gInExtendMinY Current entity extent (bottom-right Y) (numeric) 10.01
gInExtendMaxX Current entity extent (top-left X) (numeric) 800.20
gInExtendMaxY Current entity extent (top-left Y) (numeric) 20.02
gInAttrs1 Current entity attribute one value (string) s1 linetype
gInAttrs2 Current entity attribute two value (string) s2 extended dictionary data
gInAttrs3 Current entity attribute three value (string) s3 varies by entity
gInAttrs4 Current entity attribute four value (string) s4 character attribute data, varies by entity
gInAttrs5 Current entity attribute five value (string) s5 character attribute data, varies by entity
gInAttrn6 Current entity attribute six value (numeric) n1 color index
gInAttrn7 Current entity attribute seven value (numeric) n2 linetype scale
gInAttrn8 Current entity attribute eight value (numeric) n3 line width
gInAttrn9 Current entity attribute nine value (numeric) n4 transparency
gInAttrn10 Current entity attribute ten value (numeric) n5 numeric attribute data, varies by entity
gInAttrn11 Current entity attribute 11 value (numeric) n6 varies by entity
gInAttrn12 Current entity attribute 12 value (numeric) n7 varies by entity
gInAttrn13 Current entity attribute 13 value (numeric) n8 varies by entity
gInAttrn14 Current entity attribute 14 value (numeric) n9 varies by entity
gInAttrn15 Current entity attribute 15 value (numeric) n10 varies by entity
gInCoordX Current entity X coordinate array (numeric array) [10,20...] gInCoordX[0]=10
gInCoordY Current entity Y coordinate array (numeric array) [10,20...] gInCoordY[0]=10
gInCoordZ Current entity Z coordinate array (numeric array) [10,20...] gInCoordZ[0]=10
gInCoordCount Current entity coordinate count (numeric) 2
gOutColorRed Return color (red component) (modify current entity color) (numeric) 255, e.g. gOutColorRed := 255; means all levels red component 255; can also be array, e.g. gOutColorRed[0] := 122;gOutColorRed[5] := 200; means levels 1-4 red 122, level 5+ red 200
gOutColorGreen Return color (green component) (modify current entity color) (numeric) 255, same usage as above
gOutColorBlue Return color (blue component) (modify current entity color) (numeric) 255, same usage as above
gOutColorAlpha Return color (alpha component) (modify current entity color) (numeric) 255, same usage as above
gOutLineWidth Return line width value (modify current entity line width) (numeric) 3, same usage as above
gOutVisible Return visibility (modify current entity visibility) (numeric) 1 or 0, same usage as above
gOutReturn 0 exclude from selection set; 1 include in selection set

# Query Data Expression

Same as above

# Supported CAD Entity Types

Class Name Description Type Value
AcDbLine Line 1
AcDbPolyline Polyline 2
AcDb2dPolyline 2D polyline 3
AcDb3dPolyline 3D polyline 4
AcDbSpline Spline 5
AcDbArc Arc 6
AcDbCircle Circle 7
AcDbEllipse Ellipse 8
AcDbCurve Curve 9
AcDbBlockReference Block reference 10
AcDbHatch Hatch 11
AcDbMText Multiline text 12
AcDbText Single-line text 13
AcDbShape Shape entity 14
AcDbRasterImage Raster image 15
AcDbWipeout Wipeout entity 16
AcDb2LineAngularDimension Angular dimension [two lines] 17
AcDb3PointAngularDimension Angular dimension [three points] 18
AcDbAlignedDimension Aligned dimension 19
AcDbArcDimension Arc dimension 20
AcDbDiametricDimension Diameter dimension 21
AcDbOrdinateDimension Ordinate dimension 22
AcDbRadialDimension Radius dimension 23
AcDbRadialDimensionLarge Radius polyline dimension 24
AcDbRotatedDimension Rotated dimension 25
AcDbAttributeDefinition Attribute definition 26
AcDbAttribute Block attribute 27
AcDbTable Table 28
AcDbMLeader Leader dimension 29
AcDbRegion Region 30
AcDbPolyFaceMesh Polyface mesh entity 31
AcDbPolygonMesh Polygon mesh 32
AcDbSurface Surface 33
AcDb3dSolid 3D solid 34
AcDbFace 3D face 35
AcDbSolid Solid entity 36

# Query Return Fields

Field Name Description
objectid Entity unique id, unchanged after map update
layerindex Layer index
name Entity type
geojson Coordinates in WKT Mercator format
envelop Bounding rectangle (WKT Mercator format)
bounds Bounding rectangle (CAD coordinates) ([minx,miny,maxx, maxy])
isEnvelop Whether query uses actual extent or bounding box (for point selection with many points, returns by extent)
color Entity color
linetype Linetype
linetypeScale Linetype scale
lineWidth Line width
alpha Transparency
xdata Extended data
points Coordinate sequence
indices Point index sequence
thickness Thickness
area Area
isclosed Whether closed
polyType Polyline type
center Circle center point
radius Circle radius
startAngle Arc start angle
endAngle Arc end angle
rotate Rotation angle
positon Position
normal Normal vector
elevation Elevation
length Length
location Location
contents Text content (multiline text includes style content)
height Text height
width Text width
textHeight Text height
text Text content
actualHeight Multiline text actual height
actualWidth Multiline text actual width
bulge Bulge
origin Origin
u u in uv
v v in uv
size Size
isFit Whether fitted
fitTol Fit tolerance
degree Degree
horzMode Horizontal alignment mode
majorAxis Axis
data3d 3D entity material property data

# Field Meanings by Entity Type

s1 linetype (string); s2 extended dictionary data (string);

n1 color index; n2 linetype scale; n3 line width; n4 transparency;

Class Name Class Description Type Value s3(string) s4(string) s5(string) n5 n6 n7 n8 n9 n10
AcDbLine Line 1 points thickness length
AcDbPolyline Polyline 2 points bulge data3d area isclosed linetypeScale thickness elevation
AcDb2dPolyline 2D polyline 3 points area isclosed polyType thickness elevation
AcDb3dPolyline 3D polyline 4 points area isclosed polyType
AcDbSpline Spline 5 points area isclosed isFit fitTol degree
AcDbArc Arc 6 center area isclosed radius startAngle endAngle thickness
AcDbCircle Circle 7 center area isclosed radius thickness
AcDbEllipse Ellipse 8 center majorAxis area isclosed radius startAngle endAngle
AcDbCurve Curve 9 area isclosed
AcDbBlockReference Block reference 10 positon attributeDef blockname rotate scaleX scaleY scaleZ
AcDbHatch Hatch 11 points patternName elevation patternAngle patternScale
AcDbMText Multiline text 12 location contents text height width rotate textHeight actualHeight actualWidth
AcDbText Single-line text 13 location text height rotate horzMode
AcDbShape Shape entity 14 positon normal rotate size
AcDbRasterImage Raster image 15 origin
AcDbWipeout Wipeout entity 16
AcDb2LineAngularDimension Angular dim [two lines] 17
AcDb3PointAngularDimension Angular dim [three points] 18
AcDbAlignedDimension Aligned dimension 19
AcDbArcDimension Arc dimension 20
AcDbDiametricDimension Diameter dimension 21
AcDbOrdinateDimension Ordinate dimension 22
AcDbRadialDimension Radius dimension 23
AcDbRadialDimensionLarge Radius polyline dim 24
AcDbRotatedDimension Rotated dimension 25
AcDbAttributeDefinition Attribute definition 26 location text contents height rotate horzMode
AcDbAttribute Block attribute 27 location text contents height rotate horzMode
AcDbTable Table 28 positon attributeDef contents rotate scaleX scaleY scaleZ
AcDbMLeader Leader dimension 29 location contents text height width rotate textHeight actualHeight actualWidth
AcDbRegion Region 30 points indices data3d area perimeter
AcDbPolyFaceMesh Polyface mesh 31 points indices data3d
AcDbPolygonMesh Polygon mesh 32 points indices data3d
AcDbSurface Surface 33 points indices data3d
AcDb3dSolid 3D solid 34 points indices data3d
AcDbFace 3D face 35 points indices data3d
AcDbSolid Solid entity 36 points thickness length isclosed

# Built-in Style Functions

// gRed(inColor) get red component
	function_t(
				"gRed",
				"var color := inColor % 256					;				"
				"color															",
				"inColor");

	// gGreen(inColor) get green component
	function_t(
				"gGreen",
				"var color := inColor% (256 * 256) / 256;				       "
				"color															",
				"inColor");

	// gBlue(inColor) get blue component
	function_t(
				"gBlue",
				"var color := inColor % (256 * 256 * 256) / 256 / 256	;	   "
				"color															",
				"inColor");

	// gFilterGrey(r, g, b) greyscale filter (average of r,g,b)
	function_t(
				"gFilterGrey",
				"var grey := round(( clrRed +  clrGreen + clrBlue) / 3);"
				"var color := grey + grey * 256 + grey * 256 * 256;				"
				"color															",
				"clrRed", "clrGreen", "clrBlue");

	// gFilterGreyMin(r, g, b) greyscale filter (min of r,g,b)
	function_t(
				"gFilterGreyMin",
				"var grey := round(min(clrRed,clrGreen,clrBlue);"
				"var color := grey + grey * 256 + grey * 256 * 256;				"
				"color															",
				"clrRed", "clrGreen", "clrBlue");

	// gFilterGreyMax(r, g, b) greyscale filter (max of r,g,b)
	function_t(
				"gFilterGreyMax",
				"var grey := round(max(clrRed,clrGreen,clrBlue);"
				"var color := grey + grey * 256 + grey * 256 * 256;				"
				"color															",
				"clrRed", "clrGreen", "clrBlue");

	// gFilterWeight(r, g, b) greyscale filter (weighted average)
	function_t(
				"gFilterWeight",
				"var grey := round(0.3 * clrRed + 0.59 * clrGreen + 0.11 * clrBlue);"
				"var color := grey + grey * 256 + grey * 256 * 256;				"
				"color															",
				"clrRed", "clrGreen", "clrBlue");

	// gFilterBlackWhite(r, g, b) black & white filter
	function_t(
				"gFilterBlackWhite",
				"var grey := round(( clrRed +  clrGreen + clrBlue) / 3);        "
				"var color := if(grey >= 100, 16777215, 0);				"
				"color															",
				"clrRed", "clrGreen", "clrBlue");

	// gFilterOpposite(r, g, b) invert filter
	function_t(
				"gFilterOpposite",
				"var red := round(255 - clrRed);"
				"var green := round(255 - clrGreen);"
				"var blue := round(255 - clrBlue);"
				"var color := blue + green * 256 + red * 256 * 256;				"
				"color															",
				"clrRed", "clrGreen", "clrBlue");

	// gFilterMaxAvg(r, g, b) desaturate: average of max(r,g,b) values
	function_t(
				"gFilterMaxAvg",
				"var grey := round((max(clrRed,clrGreen,clrBlue) + min(clrRed,clrGreen,clrBlue))/2);"
				"var color := grey + grey * 256 + grey * 256 * 256;				"
				"color															",
				"clrRed", "clrGreen", "clrBlue");

	// gFilterRed(r, g, b) red-only filter
	function_t(
				"gFilterRed",
				"var red := clrRed;"
				"var green := 0;"
				"var blue := 0;"
				"var color := blue + green * 256 + red * 256 * 256;				"
				"color															",
				"clrRed", "clrGreen", "clrBlue");

	// gFilterGreen(r, g, b) green-only filter
	function_t(
				"gFilterGreen",
				"var red := 0;"
				"var green := clrGreen;"
				"var blue := 0;"
				"var color := blue + green * 256 + red * 256 * 256;				"
				"color															",
				"clrRed", "clrGreen", "clrBlue");

	// gFilterBlue(r, g, b) blue-only filter
	function_t(
				"gFilterBlue",
				"var red := 0;"
				"var green := 0;"
				"var blue := clrBlue;"
				"var color := blue + green * 256 + red * 256 * 256;				"
				"color															",
				"clrRed", "clrGreen", "clrBlue");

	// gFilterRemoveRed(r, g, b) remove red
	function_t(
				"gFilterRemoveRed",
				"var red := 0;"
				"var green := clrGreen;"
				"var blue := clrBlue;"
				"var color := blue + green * 256 + red * 256 * 256;				"
				"color															",
				"clrRed", "clrGreen", "clrBlue");

	// gFilterRemoveGreen(r, g, b) remove green
	function_t(
				"gFilterRemoveGreen",
				"var red := clrRed;"
				"var green := 0;"
				"var blue := clrBlue;"
				"var color := blue + green * 256 + red * 256 * 256;				"
				"color															",
				"clrRed", "clrGreen", "clrBlue");

	// gFilterRemoveBlue(r, g, b) remove blue
	function_t(
				"gFilterRemoveBlue",
				"var red := clrRed;"
				"var green := clrGreen;"
				"var blue := 0;"
				"var color := blue + green * 256 + red * 256 * 256;				"
				"color															",
				"clrRed", "clrGreen", "clrBlue");

	// gFilterOld(r, g, b) vintage filter
	function_t(
				"gFilterOld",
				"var red := round(0.393 * clrRed + 0.769 * clrGreen + 0.189 * clrBlue);"
				"var green := round(0.349 * clrRed + 0.686 * clrGreen + 0.168 * clrBlue);"
				"var blue := round(0.272 * clrRed + 0.534 * clrGreen + 0.131 * clrBlue);"
				"red := min(red, 255);"
				"green := min(green, 255);"
				"blue := min(blue, 255);"
				"var color := blue + green * 256 + red * 256 * 256;				"
				"color															",
				"clrRed", "clrGreen", "clrBlue");

	// gFilterFusion(r, g, b) fusion filter
	function_t(
				"gFilterFusion",
				"var red := round(clrRed * 128 / (clrGreen + clrBlue + 1);"
				"var green := round(clrGreen * 128 / (clrRed + clrBlue + 1);"
				"var blue := round(clrBlue * 128 / (clrGreen + clrRed + 1);"
				"red := min(red, 255);"
				"green := min(green, 255);"
				"blue := min(blue, 255);"
				"var color := blue + green * 256 + red * 256 * 256;				"
				"color															",
				"clrRed", "clrGreen", "clrBlue");

	// gFilterFrozen(r, g, b) frozen filter
	function_t(
				"gFilterFrozen",
				"var red := round((clrRed - clrGreen -clrBlue) * 3 /2);"
				"var green := round((clrGreen - clrRed -clrBlue) * 3 /2);"
				"var blue := round( (clrBlue - clrGreen - clrRed) * 3 /2);"
				"red := min(red, 255);"
				"green := min(green, 255);"
				"blue := min(blue, 255);"
				"red := max(red, 0);"
				"green := max(green, 0);"
				"blue := max(blue, 0);"
				"var color := blue + green * 256 + red * 256 * 256;				"
				"color															",
				"clrRed", "clrGreen", "clrBlue");

	// gFilterComic(r, g, b) comic filter
	function_t(
				"gFilterComic",
				"var red := round(abs(clrGreen - clrBlue + clrGreen + clrRed) * clrRed / 256);"
				"var green := round(abs(clrBlue -clrGreen + clrBlue + clrRed) * clrRed / 256);"
				"var blue := round(abs(clrBlue -clrGreen + clrBlue + clrRed) * clrGreen / 256);"
				"red := min(red, 255);"
				"green := min(green, 255);"
				"blue := min(blue, 255);"
				"red := max(red, 0);"
				"green := max(green, 0);"
				"blue := max(blue, 0);"
				"var color := blue + green * 256 + red * 256 * 256;				"
				"color															",
				"clrRed", "clrGreen", "clrBlue");

	// gFilterBrown(r, g, b) sepia filter
	function_t(
				"gFilterBrown",
				"var red := round(clrRed * 0.393 + clrGreen * 0.769 + clrBlue * 0.189);"
				"var green := round(clrRed * 0.349 + clrGreen * 0.686 + clrBlue * 0.168);"
				"var blue := round(clrRed * 0.272 + clrGreen * 0.534 + clrBlue * 0.131);"
				"red := min(red, 255);"
				"green := min(green, 255);"
				"blue := min(blue, 255);"
				"var color := blue + green * 256 + red * 256 * 256;				"
				"color															",
				"clrRed", "clrGreen", "clrBlue");

	// gFilterBlueTheme(r, g, b) blue theme filter
	function_t(
				"gFilterBlueTheme",
				"var red := round(clrRed * 0.7);"
				"var green := round(clrGreen * 0.7);"
				"var blue := clrBlue;"
				"blue := max(100, blue);"
				"var color := blue + green * 256 + red * 256 * 256;				"
				"color															",
				"clrRed", "clrGreen", "clrBlue");

	// gFilterRedTheme(r, g, b) red theme filter
	function_t(
				"gFilterRedTheme",
				"var red := clrRed;"
				"var green := round(clrGreen * 0.7);"
				"var blue := round(clrBlue * 0.7);"
				"red := max(100, red);"
				"var color := blue + green * 256 + red * 256 * 256;				"
				"color															",
				"clrRed", "clrGreen", "clrBlue");

	// gFilterGreenTheme(r, g, b) green theme filter
	function_t(
				"gFilterGreenTheme",
				"var red := round(clrRed * 0.7);"
				"var green := clrGreen;"
				"var blue := round(clrBlue * 0.7);"
				"green := max(100, green);"
				"var color := blue + green * 256 + red * 256 * 256;				"
				"color															",
				"clrRed", "clrGreen", "clrBlue");

	// gFilterCustomTheme(r, g, b, maxr, maxg, maxb) custom theme filter
	function_t(
				"gFilterCustomTheme",
				"var red := if(maxr > 1, max(maxr, clrRed), round(clrRed * maxr);"
				"var green := if(maxg > 1, max(maxg, clrGreen), round(clrGreen * maxg);"
				"var blue := if(maxb > 1, max(maxb, clrBlue), round(clrBlue * maxb);"
				"var color := blue + green * 256 + red * 256 * 256;				"
				"color															",
				"clrRed", "clrGreen", "clrBlue", "maxr", "maxg", "maxb");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252