; 用户可自行修改，文件在AUTOLOAD文件夹下【迷你大部分多重索引文件，用户可自行修改.lsp】
(if (or (> (atof (getvar "ACADVER")) 17.1)  ;代码在AutoCAD2008以下版本不加载，AutoCAD2008以下版本不支持多重索引
		(member mai_os_ver (list -2 -1 2 3 4 5 6))
	)
	(progn


            ; mai_zxindex_layer (list "装饰索引线" "2" "装饰索引文字" "3" "MN-INDEX" 3) ;装饰索引线层名,层颜色、装饰索引文字层名,层颜色、装饰索引文字字形,字高

            ; mai_mleader_arrow_block "MN-DOT" ; 文字多重索引及一般箭头块名

            ; mai_mleader_clsy_block (list "MN-ARROW2" "MN-INDEX-CLBH03") ;通用材料多重索引命令箭头块名，索引块名

            ; mai_mleader_jjsy_block (list "MN-ARROW2" "MN-INDEX-CLBH01") ; 家具多重索引命令命令箭头块名，索引块名

            ; mai_mleader_thsy_block (list "MN-ARROW2" "MN-INDEX-CLBH04")  ; 带天花标高多重索引命令命令箭头块名，索引块名

            ; mai_mleader_line_angle -45  ; 缺省多重引线倾斜角度（0-90），负数为智能角度
        ; 以上是迷你缺省设置




; 标注块或填充的名字
(defun c:mini_bzmc ( / old_cmd p1 p2 txt ent sty )
	(mai_start nil)
	(or mai_bzmc_angle
		(setq mai_bzmc_angle mai_mleader_line_angle) ;缺省引线角度为智能45度角
	)
	(setq ent (mai_Entsel nil  "选择要标注名字的块或填充:<退出>" "没有选择到块或填充:" '((0 . "insert,hatch")) nil))
	(or ent (exit))
	(setq
		p1 (cadr ent)
		ent (car ent)
		txt (strcase (mai_dxf 2 ent))
		txt (if (= "" txt) (mai_block_name ent) txt)
		p2 (getpoint p1 "\n输入文字说在点：<退出>")
	)
	(or p2 (exit))
	(setq sty (nth 4 mai_zxindex_layer))										; mai_zxindex_layer = (list RC-TEXT "50" RC-TEXT "50" "ST" 3.5)
	(or (tblsearch "style" sty) (mai_set_style sty T))
	(setq mai_bzmc_angle
			(cadr
				(mai_create_mleader
					(list (car mai_zxindex_layer) (cadr mai_zxindex_layer))		; 多重索引层名和层颜色组成的表
					mai_mleader_arrow_block										; "箭头块名，必须有，迷你提供四个块，"MN-TICK"、"MN-DOT"、"MN-ARROW1"、"MN-ARROW2"，用户也可用自己的块
					2															; 0 为块，1为文字在线上，2为文字在线外，3为文字在线外加框，4为多行文字
					(list
						(nth 4 mai_zxindex_layer)
						(nth 5 mai_zxindex_layer)
						(nth 3 mai_zxindex_layer)
					)															; 前一个参数为 1或2 时，此参数为文字形名字和字高度 , 文字颜色
					txt															; "文字或块属性，逗号分隔"
					(list p1 p2)												; 两点表或索引实体名，空为输入
					mai_bzmc_angle												; 引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
				)
			)
	)
	(mai_end)
)


;家具索引命令
(defun c:mini_indexer2 ()
	(mai_last_com "mini_indexer2")
	(princ "\n家具索引，用户可自行修改，源码在AUTOLOAD文件夹下文件【迷你大部分多重索引文件，用户可自行修改.lsp】")
	(or mai_indexer2_op
		(setq mai_indexer2_op
				(list
					(list
						(strcat mai_mini_path "text_lib\\装饰材料引线\\")			; 缺省词库文件路径
						"*.TXT"														; 缺省词库文件文件格式
						"家具代号.txt"												; 缺省词库文件
						"SF,--,单人沙发"											; 缺省文字
					)
					mai_mleader_line_angle											; 缺省引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
				)
		)
	)
	(setq mai_indexer2_op
			(mai_user_mleader
				(list (car mai_zxindex_layer) (cadr mai_zxindex_layer))				; 多重索引层名和层颜色组成的表
				(car mai_mleader_jjsy_block)										; "箭头块名，必须有，迷你提供四个块，"MN-TICK"、"MN-DOT"、"MN-ARROW1"、"MN-ARROW2"，用户也可用自己的块
				0																	; 0 为块，1为文字在线上，2为文字在线外，3为文字在线外加框，4为多行文字
				(list (cadr mai_mleader_jjsy_block) 1 (nth 3 mai_zxindex_layer))	; 前一个参数为 0 时，此参数为索引块名字和块比例表，1 2时为文字形名字和字高度，用户也可用自己的块，增加图块颜色
				(car mai_indexer2_op)												; 词库路径，类型，文件名，缺省文字
				nil																	; 两点表或索引实体名，空为输入
				(cadr mai_indexer2_op)												; 引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
			)
	)
)



;文字在线外索引命令
(defun c:mini_indexer6 ( / old_cmd sty )
	(mai_start nil)
	(mai_last_com "mini_indexer6")
	(princ "\n文字在线外索引，用户可自行修改，源码在用户文件夹下文件【迷你大部分多重索引文件，用户可自行修改.lsp】")
	(or mai_indexer6_op
		(setq mai_indexer6_op
				(list
					(list
						(strcat mai_mini_path "text_lib\\装饰材料引线\\")		; 缺省词库文件路径
						"*.TXT"													; 缺省词库文件文件格式
						"一般文字索引.txt"										; 缺省词库文件
						"床头柜内藏小夜灯,H:350mm"								; 缺省文字
					)
					mai_mleader_line_angle										; 缺省引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
				)
		)
	)
	(setq sty (nth 4 mai_zxindex_layer))										; mai_zxindex_layer = (list RC-TEXT "50" RC-TEXT "50" "ST" 3.5)
	(or (tblsearch "style" sty) (mai_set_style sty nil))
	(setq mai_indexer6_op
			(mai_create_mleader
				(list (car mai_zxindex_layer) (cadr mai_zxindex_layer))			; 多重索引层名和层颜色组成的表
				mai_mleader_arrow_block											; "箭头块名，必须有，迷你提供四个块，"MN-TICK"、"MN-DOT"、"MN-ARROW1"、"MN-ARROW2"，用户也可用自己的块
				2																; 0 为块，1为文字在线上，2为文字在线外，3为文字在线外加框，4为多行文字
				(list (nth 4 mai_zxindex_layer) (nth 5 mai_zxindex_layer) (nth 3 mai_zxindex_layer))  ; 前一个参数为 1或2 时，此参数为文字形名字和字高度，增加图块颜色
				(car mai_indexer6_op)											; 词库路径，类型，文件名，缺省文字
				nil																; 两点表或索引实体名，空为输入
				(cadr mai_indexer6_op)											; 引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
			)
	)
	(mai_txt_save_history (cadddr (car mai_indexer6_op)) (strcat mai_mini_path "text_lib\\装饰材料引线\\_+++文字索引历史记录+++.txt") 200)
	(mai_end)
)

;文字在线外加框索引命令
(defun c:mini_indexer3 ( / old_cmd sty )
	(mai_start nil)
	(mai_last_com "mini_indexer3")
	(princ "\n文字在线外加框索引，用户可自行修改，源码在AUTOLOAD文件夹下文件【迷你大部分多重索引文件，用户可自行修改.lsp】")
	(or mai_indexer3_op
		(setq mai_indexer3_op
				(list
					(list
						(strcat mai_mini_path "text_lib\\装饰材料引线\\")	; 缺省词库文件路径
						"*.TXT"												; 缺省词库文件文件格式
						"一般文字索引.txt"									; 缺省词库文件
						"床头柜内藏小夜灯,H:350mm"							; 缺省文字
					)
					mai_mleader_line_angle									; 缺省引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
				)
		)
	)
	(setq sty (nth 4 mai_zxindex_layer))									; mai_zxindex_layer = (list RC-TEXT "50" RC-TEXT "50" "ST" 3.5)
	(or (tblsearch "style" sty) (mai_set_style sty nil))
	(setq mai_indexer3_op
			(mai_create_mleader
				(list (car mai_zxindex_layer) (cadr mai_zxindex_layer))		; 多重索引层名和层颜色组成的表
				mai_mleader_arrow_block										; "箭头块名，必须有，迷你提供四个块，"MN-TICK"、"MN-DOT"、"MN-ARROW1"、"MN-ARROW2"，用户也可用自己的块
				3															; 0 为块，1为文字在线上，2为文字在线外，3为文字在线外加框，4为多行文字
				(list
					(nth 4 mai_zxindex_layer)
					(nth 5 mai_zxindex_layer)
					(nth 3 mai_zxindex_layer)
				)															; 前一个参数为 1或2 时，此参数为文字形名字和字高度
				(car mai_indexer3_op)										; 词库路径，类型，文件名，缺省文字
				nil															; 两点表或索引实体名，空为输入
				(cadr mai_indexer3_op)										; 引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
			)
	)
	(mai_txt_save_history (cadddr (car mai_indexer3_op)) (strcat mai_mini_path "text_lib\\装饰材料引线\\_+++文字索引历史记录+++.txt") 200)
	(mai_end)
)

;文字在线上索引命令
(defun c:mini_indexer5 ( / old_cmd sty )
	(mai_start nil)
	(mai_last_com "mini_indexer5")
	(princ "\n文字在线上索引，用户可自行修改，源码在AUTOLOAD文件夹下文件【迷你大部分多重索引文件，用户可自行修改.lsp】")
	(or mai_indexer5_op
		(setq mai_indexer5_op
				(list
					(list
						(strcat mai_mini_path "text_lib\\装饰材料引线\\")	; 缺省词库文件路径
						"*.TXT"												; 缺省词库文件文件格式
						"一般文字索引.txt"									; 缺省词库文件
						"床头柜内藏小夜灯,H:350mm"							; 缺省文字
					)
					mai_mleader_line_angle									; 缺省引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
				)
		)
	)
	;(setq sty (nth 4 mai_zxindex_layer))									; mai_zxindex_layer = (list RC-TEXT "50" RC-TEXT "50" "ST" 3.5)
	(setq sty (caddr maiindexname))
	(or (tblsearch "style" sty) (mai_set_style sty nil))
	(setq mai_indexer5_op
			(mai_create_mleader
				(list (car mai_zxindex_layer) (cadr mai_zxindex_layer))		; 多重索引层名和层颜色组成的表
				mai_mleader_arrow_block										; "箭头块名，必须有，迷你提供四个块，"MN-TICK"、"MN-DOT"、"MN-ARROW1"、"MN-ARROW2"，用户也可用自己的块
				1															; 0 为块，1为文字在线上，2为文字在线外，3为文字在线外加框，4为多行文字
				(list sty (cadddr maiindexname) (cadr maiindexname))
				(car mai_indexer5_op)										; 词库路径，类型，文件名，缺省文字
				nil															; 两点表或索引实体名，空为输入
				(cadr mai_indexer5_op)										; 引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
			)
	)
	(mai_txt_save_history (cadddr (car mai_indexer5_op)) (strcat mai_mini_path "text_lib\\装饰材料引线\\_+++文字索引历史记录+++.txt") 200)
	(mai_end)
)


;通用材料索引索引命令
(defun c:mini_indexer7 ()
	(mai_last_com "mini_indexer7")
	(princ "\n通用材料索引索引，用户可自行修改，源码在AUTOLOAD文件夹下文件【迷你大部分多重索引文件，用户可自行修改.lsp】")
	(or mai_indexer7_op
		(setq mai_indexer7_op
				(list
					(list
						(strcat mai_mini_path "text_lib\\装饰材料引线\\专用主材物料代号\\")		; 缺省词库文件路径
						"*.TXT"																	; 缺省词库文件文件格式
						"石材.txt"																; 缺省词库文件
						"ST,01,爵士白"															; 缺省文字
					)
					mai_mleader_line_angle														; 缺省引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
				)
		)
	)
	(setq mai_indexer7_op
			(mai_user_mleader
				(list (car mai_zxindex_layer) (cadr mai_zxindex_layer))				; 多重索引层名和层颜色组成的表
				(car mai_mleader_clsy_block)										; "箭头块名，必须有，迷你提供四个块，"MN-TICK"、"MN-DOT"、"MN-ARROW1"、"MN-ARROW2"，用户也可用自己的块
				0																	; 0 为块，1为文字在线上，2为文字在线外，3为文字在线外加框，4为多行文字
				(list (cadr mai_mleader_clsy_block) 1 (nth 3 mai_zxindex_layer))	; 前一个参数为 0 时，此参数为索引块名字和块比例表，用户也可用自己的块
				(car mai_indexer7_op)												; 词库路径，类型，文件名，缺省文字
				nil																	; 两点表或索引实体名，空为输入
				(cadr mai_indexer7_op)												; 引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
			)
	)
)

;多层构造说明索引命令
(defun c:mini_indexer8 ( / old_cmd sty txt_po ang angt p1 p2 p3 pts blk )
	(mai_start nil)
	(mai_last_com "mini_indexer8")
	(princ "\n多层构造说明索引命令，用户可自行修改，源码在AUTOLOAD文件夹下文件【迷你大部分多重索引文件，用户可自行修改.lsp】")
	(or mai_indexer8_op
		(setq
			mai_indexer8_arrow_m T 															;缺省多个索引点
			mai_indexer8_op
			(list
				(list
					(strcat mai_mini_path "text_lib\\节点多行做法索引\\室外地面铺装\\")		; 缺省词库文件路径
					"*.TXT"																	; 缺省词库文件文件格式
					"室外硬质铺装地面-01.txt"												; 缺省词库文件
					""																		; 缺省文字
				)
				mai_mleader_line_angle			; 缺省引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
			)
		)
	)
	(setq sty (caddr maiindexname))   ;这个样式用系统字体很难看
	(or (tblsearch "style" sty) (mai_set_style sty nil))
	(setq
		mai_indexer8_arrow_block (cond (mai_indexer8_arrow_block) (mai_mleader_arrow_block))
		mai_indexer8_arrow_ang (cadr mai_indexer8_op)
	)

	(while
		(and
			(progn
				(setq angt (if mai_indexer8_arrow_ang (rtos mai_indexer8_arrow_ang 2 2) "由两索引点确定"))
				(princ
					(strcat
						"\n当前 <"
						(if mai_indexer8_arrow_m "多" "单")
						" >个索引点，箭头块为< "
						(cond
							((= mai_indexer8_arrow_block "MN-TICK") "粗斜线块.")
							((= mai_indexer8_arrow_block "MN-DOT") "圆点块.")
							((= mai_indexer8_arrow_block "MN-ARROW1") "小箭头块.")
							((= mai_indexer8_arrow_block "MN-ARROW2") "大箭头块")
						)
						" >"
					)
				)
				(initget "A D S Q W E X")
				(setq p1 (getpoint (strcat "\n[引线角度【" angt "】,负数为智能角度、水平或垂直(A)/多个(D)/单个索引点(S)/圆点块(Q)/小箭头块(W)/大箭头块(E)/粗斜线块(X)]输入多行做法索引第一点:<回车更新索引>")))
			)
			(member p1 (list "A" "D" "S" "Q" "W" "E" "X"))
		)
		(cond
			(	(= p1 "A")
				(initget "A")
				(setq p3 (getangle (strcat "\n[由两索引点确定(A)]输入引线角度,负数为智能角度、水平或垂直:<" angt ">")))
				(cond
					(	(= p3 "A") (setq mai_indexer8_arrow_ang nil))
					(	p3
						(setq
							p1 '(0 0 0)
							mai_indexer8_arrow_ang (/ (* (if (>= 1 (/ p3 pi) 0) 1 -1) (angle p1 (mapcar 'abs (polar p1 p3 10.))) 180) pi)
						)
					)
				)
			)
			(	(= p1 "D") (setq mai_indexer8_arrow_m T))
			(	(= p1 "S") (setq mai_indexer8_arrow_m nil))
			(	(= p1 "X") (setq mai_indexer8_arrow_block "MN-TICK"))
			(	(= p1 "Q") (setq mai_indexer8_arrow_block "MN-DOT"))
			(	(= p1 "E") (setq mai_indexer8_arrow_block "MN-ARROW2"))
			(	(= p1 "W") (setq mai_indexer8_arrow_block "MN-ARROW1"))
		)
	)
	(while
		(and
			p1
			(progn
				(setq angt (if mai_indexer8_arrow_ang (rtos mai_indexer8_arrow_ang 2 2) "由两索引点确定"))
				(princ
					(strcat
						"\n当前 <"
						(if mai_indexer8_arrow_m "多" "单")
						" >个索引点，箭头块为< "
						(cond
							((= mai_indexer8_arrow_block "MN-TICK") "粗斜线块.")
							((= mai_indexer8_arrow_block "MN-DOT") "圆点块.")
							((= mai_indexer8_arrow_block "MN-ARROW1") "小箭头块.")
							((= mai_indexer8_arrow_block "MN-ARROW2") "大箭头块")
						)
						" >"
					)
				)
				(initget "A D S Q W E X")
				(setq p2 (getpoint p1 (strcat "\n[引线角度【" angt "】,负数为智能角度、水平或垂直(A)/多个(D)/单个索引点(S)/圆点块(Q)/小箭头块(W)/大箭头块(E)/粗斜线块(X)]输入多行做法索引第二点:<回车退出>")))
			)
			(member p2 (list "A" "D" "S" "Q" "W" "E" "X"))
		)
		(cond
			(	(= p2 "A")
				(initget "A")
				(setq p3 (getangle (strcat "\n[由两索引点确定(A)]输入引线角度,负数为智能角度、水平或垂直:<" angt ">")))
				(cond
					(	(= p3 "A") (setq mai_indexer8_arrow_ang nil))
					(	p3
						(setq
							p2 '(0 0 0)
							mai_indexer8_arrow_ang (/ (* (if (>= 1 (/ p3 pi) 0) 1 -1) (angle p1 (mapcar 'abs (polar p2 p3 10.))) 180) pi)
						)
					)
				)
			)
			(	(= p2 "D") (setq mai_indexer8_arrow_m T))
			(	(= p2 "S") (setq mai_indexer8_arrow_m nil))
			(	(= p2 "X") (setq mai_indexer8_arrow_block "MN-TICK"))
			(	(= p2 "Q") (setq mai_indexer8_arrow_block "MN-DOT"))
			(	(= p2 "E") (setq mai_indexer8_arrow_block "MN-ARROW2"))
			(	(= p2 "W") (setq mai_indexer8_arrow_block "MN-ARROW1"))
		)
	)
	(and p1 p2 (setq pts (list (list p1 p2))))
	(if pts
		(setq mai_indexer8_op
				(mai_user_mleader
					(list (car maiindexname) (cadr maiindexname))			; 多重索引层名和层颜色组成的表
					mai_indexer8_arrow_block								; "箭头块名，必须有，迷你提供四个块，"MN-TICK"、"MN-DOT"、"MN-ARROW1"、"MN-ARROW2"，用户也可用自己的块
					(if mai_indexer8_arrow_m 9 4)							; 0 为块，1为文字在线上，2为文字在线外，3为文字在线外加框，4为多行文字
					(list sty (cadddr maiindexname) (cadr maiindexname))	; 前一个参数为 1或2 时，此参数为文字形名字和字高度
					(car mai_indexer8_op)									; 词库路径，类型，文件名，缺省文字
					pts														; 两点表或索引实体名，空为输入
					mai_indexer8_arrow_ang									; 引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
				)
		)
		(progn
			(setq p1 (mai_select_first '((0 . "MULTILEADER")) "选择要更新的多重索引:<回车退出>" "选择的不是多重索引."))
			(foreach p2 (mai_ssget_2_list p1)
				(setq
					pts (mai_mleader_data p2)
					p3 (car (nth 5 pts))
					p3 (list (car p3) (cadr p3))
				)
				(mai_user_mleader
					(list (car maiindexname) (cadr maiindexname))			; 多重索引层名和层颜色组成的表
					mai_indexer8_arrow_block								; "箭头块名，必须有，迷你提供四个块，"MN-TICK"、"MN-DOT"、"MN-ARROW1"、"MN-ARROW2"，用户也可用自己的块
					(if mai_indexer8_arrow_m 9 4)							; 0 为块，1为文字在线上，2为文字在线外，3为文字在线外加框，4为多行文字
					(list sty (cadddr maiindexname) (cadr maiindexname))	; 前一个参数为 1或2 时，此参数为文字形名字和字高度
					(nth 4 pts)												; 词库路径，类型，文件名，缺省文字
					p3														; 两点表或索引实体名，空为输入
					mai_indexer8_arrow_ang									; 引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
				)
				(entdel p2)
			)
		)
	)
	(mai_end)
)



;带天花标高索引索引命令
(defun c:mini_indexer9 ()
	(mai_last_com "mini_indexer9")
	(princ "\n带天花标高索引，用户可自行修改，源码在AUTOLOAD文件夹下文件【迷你大部分多重索引文件，用户可自行修改.lsp】")
	(or mai_indexer9_op
		(setq mai_indexer9_op
				(list
					(list
						(strcat mai_mini_path "text_lib\\装饰材料引线\\专用主材-带天花标高\\")	; 缺省词库文件路径
						"*.TXT"																	; 缺省词库文件文件格式
						"石材.txt"																; 缺省词库文件
						"CH,--,ST,01,爵士白"													; 缺省文字
					)
					mai_mleader_line_angle														; 缺省引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
				)
		)
	)
	(setq mai_indexer9_op
			(mai_user_mleader
				(list (car mai_zxindex_layer) (cadr mai_zxindex_layer))				; 多重索引层名和层颜色组成的表
				(car mai_mleader_thsy_block)										; "箭头块名，必须有，迷你提供四个块，"MN-TICK"、"MN-DOT"、"MN-ARROW1"、"MN-ARROW2"，用户也可用自己的块
				0																	; 0 为块，1为文字在线上，2为文字在线外，3为文字在线外加框，4为多行文字
				(list (cadr mai_mleader_thsy_block) 1 (nth 3 mai_zxindex_layer))	; 前一个参数为 0 时，此参数为索引块名字和块比例表，用户也可用自己的块
				(car mai_indexer9_op)												; 词库路径，类型，文件名，缺省文字
				nil																	; 两点表或索引实体名，空为输入
				(cadr mai_indexer9_op)												; 引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
			)
	)
)


;文字在线上、线外线外带框三合一索引命令；BricsCAD无文字在线上功能
(defun c:mini_indexer_text ( / old_cmd sty txt_po ang angt p1 p2 p3 pts blk txt )
	(mai_start nil)
	(mai_last_com "mini_indexer_text")
	(princ "\n文字多重索引，用户可自行修改，源码在AUTOLOAD文件夹下文件【迷你大部分多重索引文件，用户可自行修改.lsp】")
	(or mai_indexer_text
		(setq mai_indexer_text
				(list
					2														;缺省文字位置 1=上 2=外 3=外带框
					mai_mleader_arrow_block									; "箭头块名，必须有，迷你提供四个块，"MN-TICK"、"MN-DOT"、"MN-ARROW1"、"MN-ARROW2"，用户也可用自己的块
					(list
						(strcat mai_mini_path "text_lib\\装饰材料引线\\")		; 缺省词库文件路径
						"*.TXT"													; 缺省词库文件文件格式
						"一般文字索引.txt"										; 缺省词库文件
						"床头柜内藏小夜灯,H:350mm"								; 缺省文字
					)
					mai_mleader_line_angle									; 缺省引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
				)
		)
	)
	(setq
		sty (nth 4 mai_zxindex_layer)
		txt_po (car mai_indexer_text)
		blk (cadr mai_indexer_text)
		txt (caddr mai_indexer_text)
		ang (cadddr mai_indexer_text)
	)
	(or (tblsearch "style" sty) (mai_set_style sty T))

	(while
		(and
			(progn
				(setq angt (if ang (rtos ang 2 2) "由两索引点确定"))
				(princ "\n当前 文字在线")
				(princ (cond ((= txt_po 1) "上,") ((= txt_po 2) "外,") ((= txt_po 3) "外带框,")))
				(princ
					(cond
						((= blk "MN-TICK") "粗斜线块.")
						((= blk "MN-DOT") "圆点块.")
						((= blk "MN-ARROW1") "小箭头块.")
						((= blk "MN-ARROW2") "大箭头块")
					)
				)
				(initget "A Z F C Q W E X")
				(setq p1 (getpoint (strcat "\n[引线角度【" angt "】,负数为智能角度、水平或垂直(A)/文字在线上(Z)/线外(F)/线外带框(C)/圆点块(Q)/小箭头块(W)/大箭头块(E)/粗斜线块(X)]输入多重索引第一点:<回车选择索引更新>")))
			)
			(member p1 (list "A" "Z" "F" "C" "Q" "W" "E" "X"))
		)
		(cond
			(	(= p1 "A")
				(initget "A")
				(setq p3 (getangle (strcat "\n[由两索引点确定(A)]输入引线角度,负数为智能角度、水平或垂直:<" angt ">")))
				(cond
					(	(= p3 "A") (setq ang nil))
					(	p3
						(setq
							p1 '(0 0 0)
							ang (/ (* (if (>= 1 (/ p3 pi) 0) 1 -1) (angle p1 (mapcar 'abs (polar p1 p3 10.))) 180) pi)
						)
					)
				)
			)
			(	(= p1 "Z") (setq txt_po 1))
			(	(= p1 "F") (setq txt_po 2))
			(	(= p1 "C") (setq txt_po 3))
			(	(= p1 "X") (setq blk "MN-TICK"))
			(	(= p1 "Q") (setq blk "MN-DOT"))
			(	(= p1 "E") (setq blk "MN-ARROW2"))
			(	(= p1 "W") (setq blk "MN-ARROW1"))
		)
	)
	(while
		(and
			p1
			(progn
				(setq angt (if ang (rtos ang 2 2) "由两索引点确定"))
				(princ "\n当前 文字在线")
				(if (< mai_os_ver 2)
					(princ (cond ((= txt_po 1) "上,") ((= txt_po 2) "外,") ((= txt_po 3) "外带框,")))
					(princ (cond (((= txt_po 3) "外带框,")) ("外,")))
				)
				(princ (cond ((= blk "MN-DOT") "圆点块.") ((= blk "MN-ARROW1") "小箭头块.") ((= blk "MN-ARROW2") "大箭头块")))
				(if (< mai_os_ver 2)
					(initget "A Z F C Q W E X")
					(initget "A F C Q W E X")
				)
				(if (< mai_os_ver 2)
					(setq p2 (getpoint p1 (strcat "\n[引线角度【" angt "】,负数为智能角度、水平或垂直(A)/文字在线上(Z)/线外(X)/线外带框(C)/圆点块(Q)/小箭头块(W)/大箭头块(E)]输入多重索引第二点:<回车退出>")))
					(setq p2 (getpoint p1 (strcat "\n[引线角度【" angt "】,负数为智能角度、水平或垂直(A)/文字在线外(X)/线外带框(C)/圆点块(Q)/小箭头块(W)/大箭头块(E)]输入多重索引第二点:<回车退出>")))
				)
			)
			(member p2 (list "A" "Z" "X" "C" "Q" "W" "E"))
		)
		(cond
			(	(= p2 "A")
				(initget "A")
				(setq p3 (getangle (strcat "\n[由两索引点确定(A)]输入引线角度,负数为智能角度、水平或垂直:<" angt ">")))
				(cond
					(	(= p3 "A") (setq ang nil))
					(	p3
						(setq
							p2 '(0 0 0)
							ang (/ (* (if (>= 1 (/ p3 pi) 0) 1 -1) (angle p2 (mapcar 'abs (polar p2 p3 10.))) 180) pi)
						)
					)
				)
			)
			(	(= p2 "Z") (setq txt_po 1))
			(	(= p2 "F") (setq txt_po 2))
			(	(= p2 "C") (setq txt_po 3))
			(	(= p2 "X") (setq blk "MN-TICK"))
			(	(= p2 "Q") (setq blk "MN-DOT"))
			(	(= p2 "W") (setq blk "MN-ARROW1"))
			(	(= p2 "E") (setq blk "MN-ARROW2"))
		)
	)
	(and p1 p2 (setq pts (list (list p1 p2))))
	(if pts
		(setq mai_indexer_text
				(vl-list*
					txt_po
					blk
					(mai_create_mleader
						(list (car mai_zxindex_layer) (cadr mai_zxindex_layer))			; 多重索引层名和层颜色组成的表
						blk																; "箭头块名，必须有，迷你提供四个块，"MN-TICK"、"MN-DOT"、"MN-ARROW1"、"MN-ARROW2"，用户也可用自己的块
						txt_po															; 0 为块，1为文字在线上，2为文字在线外，3为文字在线外加框，4为多行文字
						(list sty (nth 5 mai_zxindex_layer) (nth 3 mai_zxindex_layer))	; 前一个参数为 1或2 时，此参数为文字形名字和字高度
						txt																; 词库路径，类型，文件名，缺省文字
						pts																; 两点表或索引实体名，空为输入
						ang																; 引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
					)
				)
		)
		(progn
			(setq p1 (mai_select_first '((0 . "MULTILEADER")) "选择要更新的多重索引:<回车退出>" "选择的不是多重索引."))
			(and
				(setq txt (caddr mai_indexer_text))
				(setq txt
					(mai_get_text
						(car txt)
						(cadr txt)
						(caddr txt)
						nil
						nil
						nil
						(cadddr txt)
						nil
					)
				)
				(setq txt (list (car txt) (cadr txt) (caddr txt) (nth 6 txt)))
				(setq mai_indexer_text (list txt_po blk txt ang))
			)
			(foreach p2 (mai_ssget_2_list p1)
				(setq
					pts (mai_mleader_data p2)
					p3 (nth 5 pts)
				)
				(mai_user_mleader
					(list (car mai_zxindex_layer) (cadr mai_zxindex_layer))			; 多重索引层名和层颜色组成的表
					blk																; "箭头块名，必须有，迷你提供四个块，"MN-TICK"、"MN-DOT"、"MN-ARROW1"、"MN-ARROW2"，用户也可用自己的块
					txt_po															; 0 为块，1为文字在线上，2为文字在线外，3为文字在线外加框，4为多行文字
					(list sty (nth 5 mai_zxindex_layer) (nth 3 mai_zxindex_layer))	; 前一个参数为 1或2 时，此参数为文字形名字和字高度
					(cadddr txt)													; 词库路径，类型，文件名，缺省文字
					p3																; 两点表或索引实体名，空为输入
					ang																; 引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
				)
				(entdel p2)
			)
		)
	)

	(mai_txt_save_history (cadddr (caddr mai_indexer_text)) (strcat mai_mini_path "text_lib\\装饰材料引线\\_+++文字索引历史记录+++.txt") 200)
	(mai_end)
)


(defun c:mini_mleader_mirror ( / old_cmd ent ss pt old_scale)
	(mai_start nil)
	(mai_last_com "mini_mleade_mirror")
	(setq
		ss (mai_select_first
				'((0 . "MULTILEADER"))
				"选择要左右镜像的多重索引:<退出>"
				"没有找到多重索引."
			)
		old_scale mai_scale
	)
	(foreach ent (mai_ssget_2_list ss)
		(setq
			; pt (last (cdr (last (mai_mleader_data (car(entsel))))))
			pt (mai_mleader_data ent)
			elst (entget ent)
			mai_scale (cadar pt)
		)
		(mai_get_scale)
		(setvar "clayer" (mai_dxf 8 elst))
		(mai_create_mleader nil (cadr pt) (caddr pt) (cadddr pt) (nth 4 pt) (nth 5 pt) nil)
		(entdel ent)
		(setq ent (entlast))
		(entmod (mai_mleader_DoglegLength (entget ent) (caddr pt) (* mai_scale (caddar pt))))
		(if (member (caddr pt) (list 1 4))
			(progn
				(setq ent (vlax-ename->vla-object ent))
				(vlax-put ent 'textstring (vlax-get ent 'textstring))
			)
		)
	)
	(setq mai_scale old_scale)
	(mai_get_scale)
	(mai_end)
)


;电气多重说明索引命令
(defun c:mini_indexer10 ( / old_cmd sty txt_po ang angt p1 p2 p3 pts blk )
	(mai_start nil)
	(mai_last_com "mini_indexer10")
	(princ "\n电气多重说明索引命令，用户可自行修改，源码在AUTOLOAD文件夹下文件【迷你大部分多重索引文件，用户可自行修改.lsp】")
	(or mai_indexer10_op
		(setq mai_indexer10_op
			(list
				(list
					(strcat mai_mini_path "text_lib\\节点多行做法索引\\电气多重说明\\")		; 缺省词库文件路径
					"*.TXT"																	; 缺省词库文件文件格式
					"电气多重说明-01.txt"													; 缺省词库文件
					""																		; 缺省文字
				)
				mai_mleader_line_angle							; 缺省引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
			)
		)
	)
	(setq sty (caddr maiindexname))   ;这个样式用系统字体很难看
	(or (tblsearch "style" sty) (mai_set_style sty nil))
	(setq mai_indexer10_arrow_ang (cadr mai_indexer10_op))

	(while
		(and
			(progn
				(setq angt (if mai_indexer10_arrow_ang (rtos mai_indexer10_arrow_ang 2 2) "由两索引点确定"))
				(initget "A")
				(setq p1 (getpoint (strcat "\n[引线角度【" angt "】,负数为智能角度、水平或垂直(A)]当多个索引点，箭头块为 粗斜线块，输入多行做法索引第一点:<回车更新索引>")))
			)
			(= p1 "A")
		)
		(initget "A")
		(setq p3 (getangle (strcat "\n[由两索引点确定(A)]输入引线角度,负数为智能角度、水平或垂直:<" angt ">")))
		(cond
			(	(= p3 "A") (setq mai_indexer10_arrow_ang nil))
			(	p3
				(setq
					p1 '(0 0 0)
					mai_indexer10_arrow_ang (/ (* (if (>= 1 (/ p3 pi) 0) 1 -1) (angle p1 (mapcar 'abs (polar p1 p3 10.))) 180) pi)
				)
			)
		)
	)
	(while
		(and p1
			(progn
				(setq angt (if mai_indexer10_arrow_ang (rtos mai_indexer10_arrow_ang 2 2) "由两索引点确定"))
				(initget "A")
				(setq p2 (getpoint p1 (strcat "\n[引线角度【" angt "】,负数为智能角度、水平或垂直(A)]当多个索引点，箭头块为 粗斜线块，输入多行做法索引第二点:<回车退出>")))
			)
			(member p2 (list "A"))
		)
		(initget "A")
		(setq p3 (getangle (strcat "\n[由两索引点确定(A)]输入引线角度,负数为智能角度、水平或垂直:<" angt ">")))
		(cond
			(	(= p3 "A") (setq mai_indexer10_arrow_ang nil))
			(	p3
				(setq
					p2 '(0 0 0)
					mai_indexer10_arrow_ang (/ (* (if (>= 1 (/ p3 pi) 0) 1 -1) (angle p2 (mapcar 'abs (polar p2 p3 10.))) 180) pi)
				)
			)
		)
	)
	(and p1 p2 (setq pts (list (list p1 p2))))
	(if pts
		(setq mai_indexer10_op
				(mai_user_mleader
					(list (car maiindexname) (cadr maiindexname))			; 多重索引层名和层颜色组成的表
					"MN-TICK"												; "箭头块名，必须有，迷你提供四个块，"MN-TICK"、"MN-DOT"、"MN-ARROW1"、"MN-ARROW2"，用户也可用自己的块
					14														; 0 为块，1为文字在线上，2为文字在线外，3为文字在线外加框，4 9 14 为多行文字
					(list sty (cadddr maiindexname) (cadr maiindexname))	; 前一个参数为 1或2 时，此参数为文字形名字和字高度
					(car mai_indexer10_op)									; 词库路径，类型，文件名，缺省文字
					pts														; 两点表或索引实体名，空为输入
					mai_indexer10_arrow_ang									; 引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
				)
		)
		(progn
			(setq p1 (mai_select_first '((0 . "MULTILEADER")) "选择要更新的多重索引:<回车退出>" "选择的不是多重索引."))
			(foreach p2 (mai_ssget_2_list p1)
				(setq
					pts (mai_mleader_data p2)
					p3 (car (nth 5 pts))
					p3 (list (car p3) (cadr p3))
				)
				(mai_user_mleader
					(list (car maiindexname) (cadr maiindexname))			; 多重索引层名和层颜色组成的表
					"MN-TICK"												; "箭头块名，必须有，迷你提供四个块，"MN-TICK"、"MN-DOT"、"MN-ARROW1"、"MN-ARROW2"，用户也可用自己的块
					14														; 0 为块，1为文字在线上，2为文字在线外，3为文字在线外加框，4 9 14 为多行文字
					(list sty (cadddr maiindexname) (cadr maiindexname))	; 前一个参数为 1或2 时，此参数为文字形名字和字高度
					(nth 4 pts)												; 词库路径，类型，文件名，缺省文字
					p3														; 两点表或索引实体名，空为输入
					mai_indexer10_arrow_ang									; 引线倾斜角度（0-90），nil 为由标注点确定角度，负数为智能角度
				)
				(entdel p2)
			)
		)
	)
	(mai_end)
)


		;带框索引
		(defun c:mini_indexer4 ( / old_cmd mai_bak_osmode  xd_sty xd_val ob_foud pt1 pt2 pt3 ob_fence ob_len ob_pline ob_p1 ob_p0 gr1 gr2
								draw_index draw_cloud ob_txt ddata wfile old_txt
							)

			(defun draw_index ( pt2 pt1 txt sty )
				(if sty
					(mai_create_mleader
						(list (car maiindexname) (cadr maiindexname))
						mai_mleader_arrow_block
						0
						(list "INDEX_M4" 1)
						(strcat "详图," txt)
						(list pt2 pt1)
						nil
					)
					(mai_create_mleader
						(list (car maiindexname) (cadr maiindexname))			; 层名和层颜色组成的表
						mai_mleader_arrow_block									; "箭头块名，必须有"
						1														; 0 为块，1为文字在线上，2为文字在线外
						(list (caddr maiindexname) (cadddr maiindexname))		; 前一个参数为 0 时，此参数为索引块名字和块比例表，1 2时为文字形名字和字高度"
						txt														; 词库路径，类型，文件名，缺省文字
						(list pt2 pt1)											; 两点表或索引实体名，空为输入
						nil														; 引线倾斜角度（0-90），nil 为由标注点确定角度
					)
				)
				(setq ob_txt (entlast))
			)

			(defun draw_cloud ( fences / ss p1 p2 rad)
				(setq ss (if (= (type fences) 'ename) fences (mai_entmake "lwpolyline" fences)))
				(mapcar 'set '(p1 p2) (mai_getboundingbox ss))
				(setq
					rad (mapcar 'abs (mapcar '- p2 p1))
					rad (list (car rad) (cadr rad))
					rad (min (/ (apply 'min rad) 4) (mai_chgunits 400))
				)
				(mai_pline_width ss (* 0.5 mai_scale2)) ;(mai_pline_width (car(entsel)) (* 0.5 mai_scale2))
				(setq ss (entlast))
				(mai_loadltype "xu-xian" "IMINI")
				(command "_.chprop" ss "" "la" (car maiindexname) "lt" "xu-xian" "s" mai_scale2 "")
				(setvar "filletrad" rad)
					;(and (< -1 mai_os_ver 2) (>= (atof (getvar "AcadVer")) 20))
				(if command-s
					(command-s "_.fillet" "p" ss)
					(command "_.fillet" "p" ss)
				)
				(setq ob_pline (if (entget ss) ss (entlast)))
			)


			(mai_start T)
			(mai_last_com "mini_indexer4")
			(or mai_dksy (setq mai_dksy (list T "1,-")))
			(mapcar 'set '(xd_sty xd_val) mai_dksy)
			(setq mai_bak_osmode (getvar "osmode"))
			(mai_get_scale)
			(mai_create_layer (car maiindexname) (cadr maiindexname))
			(initget "C E D")
			(setq pt1 (getpoint "\n[画圆(C)/画椭圆(E)/画多段线(D)]带框索引，画矩形:<回车选择多段线,框选拾取角的第一点>"))
			(setvar "osmode" 0)
			(mai_temp_layer) ;mai_recycle_layer
			(cond
				(	(and
						(not pt1)
						(setq pt2 (car (mai_entsel nil "选择封闭多段线:" "选择的不是多段线." '((0 . "*POLYLINE,circle,spline,ellipse")) nil)))
					)
					(setq
						ob_fence (mai_curve_2_fence pt2 (* (cadddr maiindexname) mai_scale2))
						ob_len (mai_curve_length pt2)
						ob_p0 (caddr (mai_getboundingbox pt2))
					)
					(entdel pt2)
				)

				(	(and
						(= (type pt1) 'str)
						(wcmatch pt1 "C,E,D")
					)
					(setq gr1 (entlast))
					(setvar "cmdecho" 1)
					(command (cond ((= pt1 "C") "_.circle") ((= pt1 "E") "_.ellipse") ((= pt1 "D") "_.pline")))
					(mai_com_pause)
					(setvar "cmdecho" 0)
					(setq gr2 (entlast))
					(if (equal gr1 gr2) (exit))
					(setq
						ob_len (mai_curve_length gr2)
						ob_p0 (caddr (mai_getboundingbox gr2))
						ob_fence (mai_curve_2_fence gr2 (list 15. (/ ob_len 25.)))
						ob_fence (cons (last ob_fence) ob_fence)
					)
					(entdel gr2)
				)

				(	(setq pt2 (getcorner pt1 "\n带框索引:<框选拾取角的第二点>"))
					(setq
						ob_p0 (mai_divide_point pt1 pt2 0.5)
						ob_fence (mai_data_corner2 "fence" (list pt1 pt2))
						ob_len (* 2. (apply '+ (mapcar 'abs (mapcar '- pt1 pt2 (list 0 0)))))
					)
				)
			)
			(or ob_fence (exit))
			(draw_cloud ob_fence)
			(princ "\n")
			(while
				(progn
					(princ "\r[(Z)切换节点索引和文字索引]点取索引线位置点:<回车退出>")
					(setq
						gr1 (grread t 15 0)
						gr2 (cadr gr1)
						gr1 (car  gr1)
					)
					(cond
						(	(= 5 gr1)
							(setq ob_p1 gr2)
							(mai_entdel ob_txt nil)
							(draw_index ob_p0 ob_p1 xd_val xd_sty)
							T
						)
						(	(= 3 gr1) (setq ob_p1 gr2) nil)
						(	(= 2 gr1)
							(cond
								(	(member gr2 '(90 122)) ;z
									(setq xd_sty (not xd_sty))
								)
							)
							T
						)
						(	(member gr1 '(11 25)) nil)
						(	t )
					)
				)
			)
			(mai_entdel ob_txt nil)
			(setq ob_p0 (car (mai_data_inters (list ob_p0 ob_p1) (mai_data_entget ob_pline) nil nil)))
			(or ob_p0 (exit))
			(setq
				wfile (mai_fix_dir1 (strcat mai_mini_path "text_lib\\带虚线框索引.txt"))
				old_txt (if (findfile wfile) (mai_read_file wfile nil nil T) (list xd_val))
				gr1 old_txt
			)
			(if (> (length gr1) 30)
				(setq
					pt1 0
					gr1 (mapcar '(lambda(x)(setq pt1 (1+ pt1))(cons (strcat "页面-" (itoa pt1)) x)) (mai_list_divide gr1 30))
				)
			)
			(and
				(setq pt1 (mai_txt_menu ob_p0 gr1 xd_val nil))
				(setq xd_val pt1)
			)
			(setq mai_dksy (list xd_sty xd_val))
			(mai_undo_end)
			(mai_undo_start)
			(setvar "cecolor" "bylayer")
			(draw_index ob_p0 ob_p1 xd_val xd_sty)
			(or (member xd_val old_txt)
				(mai_write_file wfile (cons xd_val old_txt))
			)
			(mai_end)
		)




	)
)

