文档库 最新最全的文档下载
当前位置:文档库 › 标注并提取插件.lsp

标注并提取插件.lsp






(setq GZWJ "C:\\YJX\\")
(princ "\n本插件为初学测试程序")
(alert "带地面附作物标注命令:BB \n 确权信息标注命令:BV \n 修改村名字命令:CM")
(setq symbolSize 0.6)
(setq symbolDistan 0.15)
(defun c:CM()
(princ "请输入新的村名!")
(princ "(1)从图上选取已有村名(2)输入输入新的村名(默认为1):")
(setq xin_Name (getreal))
(if (/= xin_Name 2)
(progn
(setq cun_Name (ssname (ssget) 0))
(setq xincun_Name (cdr (assoc 1 (entget cun_Name))))
);progn
(setq xincun_Name (getstring "\n输入新村名:"))
);if
;将村名信息存入文件中
;
(setq fpl (open (strcat GZWJ "村名.txt") "w"))
;检查文件是否已处于打开状态,防止误操作
(if (= fpl nil)
(progn
(alert (strcat GZWJ "村名.csv文件追加操作打开文件出错,可能是因为该文件处于打开状态。需关闭该文件,才能进行正常的追加写入操作。"))
(alert (strcat xincun_Name " 该村名信息未成功写入-村名.txt-文件中,请重新操作!"))
(close fpl)
(setvar "osmode" oldosmode)
(exit)
)
()
)
(write-line xincun_Name fpl)
(close fpl)
(setq yjx (strcat "新村名【" xincun_Name "】已成功写入" GZWJ "《村名.txt》"))
(alert yjx)

)
(defun c:BB()
(setq oldosmode (getvar "osmode"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(princ "选择需要标注名称、编号、面积的范围线")

(setq IsFileOpen (open (strcat GZWJ "宗地信息统计表.csv") "a"))
(if (= IsFileOpen nil)
(progn
(alert "宗地信息统计表.csv文件追加操作打开文件出错,可能是因为该文件处于打开状态。需关闭该文件,才能进行正常的追加写入操作。")
(close IsFileOpen)
(setvar "osmode" oldosmode)
(exit)
)
(close IsFileOpen)
)

(setq ent1 (ssname (ssget) 0))
(command "_Area")
(command "O" ent1 "") ;计算LWPOLYLINE构成的封闭面面积
(setq point_num (length point_list))
(setq counter 0)
(setq pl_area 0)

(repeat (- point_num 1)
(progn
(setq x1 (car (nth counter point_list)))
(setq y1 (cadr (nth counter point_list)))
(setq counter (+ counter 1))
(setq x2 (car (nth counter point_list)))
(setq y2 (cadr (nth counter point_list)))

(setq pl_area (+ pl_area (- (* x1 y2) (* y1 x2))))
);progn
);repeat
;计算闭合多段线的面积,并换算至亩
(command "_Area")
(command "O" ent1 "")
(setq pl_area (getvar "AREA"))
;(princ (strcat "\n所选取图元的面积为" (rtos pl_area 2 3)))

;(setq pl_area (abs (* pl_area 0.5)))
(setq pl_area_M (* pl_area 1))
(setq pl_area (rtos pl_area 2 3))
(setq pl_area_M_str (rtos pl_area_M 2 3))
(setq IsFile (open (strcat GZWJ "宗地编号.txt") "r"))
(if (= IsFile nil)
(progn
(setq fp (o

pen (strcat GZWJ "宗地编号.txt") "w"))
(write-line "1" fp)
(close fp)
);progn
()
);if

;从临时文档处获取当前村名
(setq cunm (open (strcat GZWJ "村名.txt") "r"))
(setq cun_Name (read-line cunm))
;从临时文档处获取当前宗地编号
(setq fp (open (strcat GZWJ "宗地编号.txt") "r"))
(setq zd_Num (read-line fp))
(if (= zd_Num nil) (setq zd_Num "1") ())
(setq zd_NumMsg (strcat "当前宗地编号为:" zd_Num ",其后宗地将以此为基础顺次+1进行编号。\n"))
(princ zd_NumMsg)
(setq IsRealNum 1)
(princ "是否使用该编号?")
(princ "(1)是(2)重新编号[1]:")
(setq IsRealNum (getreal))
(if (= IsRealNum 2)
(progn
(close fp)
(setq fp (open (strcat GZWJ "宗地编号.txt") "w"))
(setq zd_Num (getstring "输入新的起始编号:"))
(write-line zd_Num)
(close fp)
(setq zd_NumMsg (strcat "当前宗地编号为:" zd_Num ",其后宗地将以此为基础顺次+1进行编号。\n"))
);progn
(close fp)
);if
(princ zd_NumMsg)

;获取户主名称
(princ "是否手动输入宗地户主名称?")
(princ "(1)从图上选取已有名称(2)输入宗地户主(默认为1):")
(setq Iszd_NamePutIn (getreal))
(if (/= Iszd_NamePutIn 2)
(progn
(setq entName (ssname (ssget) 0))
(setq zd_Name (cdr (assoc 1 (entget entName))))
);progn
(setq zd_Name (getstring "\n输入宗地户主名:"))
);if

;获取附作物名称
(princ "是否手动输入附作物名称?")
(princ "(1)从图上选取已有名称(2)输入附作物(默认为1):")
(setq fzw_Name (getreal))
(if (/= fzw_Name 2)
(progn
(setq fzwhName (ssname (ssget) 0))
(setq zfzw_Name (cdr (assoc 1 (entget fzwhName))))
);progn
(setq zfzw_Name (getstring "\n输入附作物名:"))
);if

;检查是否有'01户主姓名"图层,有则将其作为当前图层,无则创建,并在该图层上标注户主名
(if (=(tblobjname "LAYER" "01户主姓名") nil)
(progn
(entmake (list '(0 . "LAYER")
'(100 . "AcDbSymbolTableRecord")
'(100 . "AcDbLayerTableRecord")
'(6 . "CONTINUOUS")
'(62 . 1)
'(70 . 0)
(cons 2 "01户主姓名")
);list
);entmake
);progn
);if
(setvar "clayer" "01户主姓名")

(princ "\n输入文字标注的位置:")
(setq bz_place (getpoint))
(command "-text" "J" "C" bz_place symbolSize "0" zd_Name "")
;计算宗地号标注位置
(if (=(tblobjname "LAYER" "02宗地号") nil)
(progn
(entmake (list '(0 . "LAYER")
'(100 . "AcDbSymbolTableRecord")
'(100 . "AcDbLayerTableRecord")
'(6 . "CONTINUOUS")
'(62 . 1)
'(70 . 0)
(cons 2 "02宗地号")
);list
);entmake
);progn
);if
(setvar "claye

r" "02宗地号")

(setq bz_place (list (car bz_place) (- (cadr bz_place) (+ symbolSize symbolDistan))))
(command "-text" "J" "C" bz_place symbolSize "0" zd_Num "")
;标注面积
(if (=(tblobjname "LAYER" "03宗地面积") nil)
(progn
(entmake (list '(0 . "LAYER")
'(100 . "AcDbSymbolTableRecord")
'(100 . "AcDbLayerTableRecord")
'(6 . "CONTINUOUS")
'(62 . 1)
'(70 . 0)
(cons 2 "03宗地面积")
);list
);entmake
);progn
);if
(setvar "clayer" "03宗地面积")

(setq bz_area (strcat "S="pl_area ))
(setq bz_place (list (car bz_place) (- (cadr bz_place) (+ symbolSize symbolDistan))))
(command "-text" "J" "C" bz_place symbolSize "0" bz_area "")
;标注附作物
(if (=(tblobjname "LAYER" "04附作物") nil)
(progn
(entmake (list '(0 . "LAYER")
'(100 . "AcDbSymbolTableRecord")
'(100 . "AcDbLayerTableRecord")
'(6 . "CONTINUOUS")
'(62 . 1)
'(70 . 0)
(cons 2 "04附作物")
);list
);entmake
);progn
);if
(setvar "clayer" "04附作物")
(setq bz_place (list (car bz_place) (- (cadr bz_place) (+ symbolSize symbolDistan))))
(command "-text" "J" "C" bz_place symbolSize "0" zfzw_Name "")
;修改文本中保存的宗地编号,使其增加1,供下宗地使用
(setq zd_length1 (strlen zd_Num))
(setq zd_Num (atof zd_Num))
(setq zd_Num (+ zd_Num 1))
(setq fp (open (strcat GZWJ "宗地编号.txt") "w"))
(setq zd_Num (rtos zd_Num 2 0))
(setq zd_length2 (strlen zd_Num))
;计算数字转字串过程中丢失的0的个数,进行补充
(setq zd_NumOfZero1 (- zd_length1 zd_length2))
(repeat zd_NumOfZero1
(setq zd_Num (strcat "0" zd_Num))
);repeat
(write-line zd_Num fp)
(close fp)

;将宗地信息存入文件中
(setq fp1 (open (strcat GZWJ "宗地信息统计表.csv") "a"))
;检查文件是否已处于打开状态,防止误操作
(if (= fp1 nil)
(progn
(alert (strcat GZWJ "宗地信息统计表.csv文件追加操作打开文件出错,可能是因为该文件处于打开状态。需关闭该文件,才能进行正常的追加写入操作。"))
(alert (strcat zd_Name " 该户主信息未成功写入-宗地信息统计表.csv-文件中,请重新操作!"))
(close fp1)
(setvar "osmode" oldosmode)
(exit)
)
()
)
;因zd_Num比实际编号大1,故减1后保存
(setq zd_Num (atof zd_Num))
(setq zd_Num (- zd_Num 1))
(setq zd_Num (rtos zd_Num 2 0))
(setq zd_length3 (strlen zd_Num))
(setq zd_NumOfZero2 (- zd_length1 zd_length3))
(repeat zd_NumOfZero2
(setq zd_Num (strcat "0" zd_Num))
);repeat

(setq zd_Msg "")
(setq zd_Msg (strcat "," zd_Num "," zd_Name "," cun_Name "," pl_area "," zfzw_Name))
(write-line zd_Msg fp1)
(close fp1)
(setvar "clayer" "0")

(setvar "osmode" oldosmode)
(pr

inc)
);;;


(defun c:BV()
(setq oldosmode (getvar "osmode"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(princ "选择需要标注名称、编号、面积的范围线")

(setq IsFileOpen (open (strcat GZWJ "宗地信息统计表.csv") "a"))
(if (= IsFileOpen nil)
(progn
(alert "宗地信息统计表.csv文件追加操作打开文件出错,可能是因为该文件处于打开状态。需关闭该文件,才能进行正常的追加写入操作。")
(close IsFileOpen)
(setvar "osmode" oldosmode)
(exit)
)
(close IsFileOpen)
)

(setq ent1 (ssname (ssget) 0))
(command "_Area")
(command "O" ent1 "") ;计算LWPOLYLINE构成的封闭面面积
(setq point_num (length point_list))
(setq counter 0)
(setq pl_area 0)

(repeat (- point_num 1)
(progn
(setq x1 (car (nth counter point_list)))
(setq y1 (cadr (nth counter point_list)))
(setq counter (+ counter 1))
(setq x2 (car (nth counter point_list)))
(setq y2 (cadr (nth counter point_list)))

(setq pl_area (+ pl_area (- (* x1 y2) (* y1 x2))))
);progn
);repeat
;计算闭合多段线的面积,并换算至亩
(command "_Area")
(command "O" ent1 "")
(setq pl_area (getvar "AREA"))
;(princ (strcat "\n所选取图元的面积为" (rtos pl_area 2 3)))

;(setq pl_area (abs (* pl_area 0.5)))
(setq pl_area_M (* pl_area 1))
(setq pl_area (rtos pl_area 2 3))
(setq pl_area_M_str (rtos pl_area_M 2 3))
(setq IsFile (open (strcat GZWJ "宗地编号.txt") "r"))
(if (= IsFile nil)
(progn
(setq fp (open (strcat GZWJ "宗地编号.txt") "w"))
(write-line "1" fp)
(close fp)
);progn
()
);if

;从临时文档处获取当前村名
(setq cunm (open (strcat GZWJ "村名.txt") "r"))
(setq cun_Name (read-line cunm))
;从临时文档处获取当前宗地编号
(setq fp (open (strcat GZWJ "宗地编号.txt") "r"))
(setq zd_Num (read-line fp))
(if (= zd_Num nil) (setq zd_Num "1") ())
(setq zd_NumMsg (strcat "当前宗地编号为:" zd_Num ",其后宗地将以此为基础顺次+1进行编号。\n"))
(princ zd_NumMsg)
(setq IsRealNum 1)
(princ "是否使用该编号?")
(princ "(1)是(2)重新编号[1]:")
(setq IsRealNum (getreal))
(if (= IsRealNum 2)
(progn
(close fp)
(setq fp (open (strcat GZWJ "宗地编号.txt") "w"))
(setq zd_Num (getstring "输入新的起始编号:"))
(write-line zd_Num)
(close fp)
(setq zd_NumMsg (strcat "当前宗地编号为:" zd_Num ",其后宗地将以此为基础顺次+1进行编号。\n"))
);progn
(close fp)
);if
(princ zd_NumMsg)

;获取户主名称
(princ "是否手动输入宗地户主名称?")
(princ "(1)从图上选取已有名称(2)输入宗地户主(默认为1):")
(setq Iszd_NamePutIn (getreal))
(if (/= Iszd_N

amePutIn 2)
(progn
(setq entName (ssname (ssget) 0))
(setq zd_Name (cdr (assoc 1 (entget entName))))
);progn
(setq zd_Name (getstring "\n输入宗地户主名:"))
);if

;检查是否有'01户主姓名"图层,有则将其作为当前图层,无则创建,并在该图层上标注户主名
(if (=(tblobjname "LAYER" "01户主姓名") nil)
(progn
(entmake (list '(0 . "LAYER")
'(100 . "AcDbSymbolTableRecord")
'(100 . "AcDbLayerTableRecord")
'(6 . "CONTINUOUS")
'(62 . 1)
'(70 . 0)
(cons 2 "01户主姓名")
);list
);entmake
);progn
);if
(setvar "clayer" "01户主姓名")

(princ "\n输入文字标注的位置:")
(setq bz_place (getpoint))
(command "-text" "J" "C" bz_place symbolSize "0" zd_Name "")
;计算宗地号标注位置
(if (=(tblobjname "LAYER" "02宗地号") nil)
(progn
(entmake (list '(0 . "LAYER")
'(100 . "AcDbSymbolTableRecord")
'(100 . "AcDbLayerTableRecord")
'(6 . "CONTINUOUS")
'(62 . 1)
'(70 . 0)
(cons 2 "02宗地号")
);list
);entmake
);progn
);if
(setvar "clayer" "02宗地号")

(setq bz_place (list (car bz_place) (- (cadr bz_place) (+ symbolSize symbolDistan))))
(command "-text" "J" "C" bz_place symbolSize "0" zd_Num "")
;标注面积
(if (=(tblobjname "LAYER" "03宗地面积") nil)
(progn
(entmake (list '(0 . "LAYER")
'(100 . "AcDbSymbolTableRecord")
'(100 . "AcDbLayerTableRecord")
'(6 . "CONTINUOUS")
'(62 . 1)
'(70 . 0)
(cons 2 "03宗地面积")
);list
);entmake
);progn
);if
(setvar "clayer" "03宗地面积")

(setq bz_area (strcat "S="pl_area ))
(setq bz_place (list (car bz_place) (- (cadr bz_place) (+ symbolSize symbolDistan))))
(command "-text" "J" "C" bz_place symbolSize "0" bz_area "")
;修改文本中保存的宗地编号,使其增加1,供下宗地使用
(setq zd_length1 (strlen zd_Num))
(setq zd_Num (atof zd_Num))
(setq zd_Num (+ zd_Num 1))
(setq fp (open (strcat GZWJ "宗地编号.txt") "w"))
(setq zd_Num (rtos zd_Num 2 0))
(setq zd_length2 (strlen zd_Num))
;计算数字转字串过程中丢失的0的个数,进行补充
(setq zd_NumOfZero1 (- zd_length1 zd_length2))
(repeat zd_NumOfZero1
(setq zd_Num (strcat "0" zd_Num))
);repeat
(write-line zd_Num fp)
(close fp)

;将宗地信息存入文件中
(setq fp1 (open (strcat GZWJ "宗地信息统计表.csv") "a"))
;检查文件是否已处于打开状态,防止误操作
(if (= fp1 nil)
(progn
(alert (strcat GZWJ "宗地信息统计表.csv文件追加操作打开文件出错,可能是因为该文件处于打开状态。需关闭该文件,才能进行正常的追加写入操作。"))
(alert (strcat zd_Name " 该户主信息未成功

写入-宗地信息统计表.csv-文件中,请重新操作!"))
(close fp1)
(setvar "osmode" oldosmode)
(exit)
)
()
)
;因zd_Num比实际编号大1,故减1后保存
(setq zd_Num (atof zd_Num))
(setq zd_Num (- zd_Num 1))
(setq zd_Num (rtos zd_Num 2 0))
(setq zd_length3 (strlen zd_Num))
(setq zd_NumOfZero2 (- zd_length1 zd_length3))
(repeat zd_NumOfZero2
(setq zd_Num (strcat "0" zd_Num))
);repeat

(setq zd_Msg "")
(setq zd_Msg (strcat "," zd_Num "," zd_Name "," cun_Name "," pl_area ))
(write-line zd_Msg fp1)
(close fp1)
(setvar "clayer" "0")

(setvar "osmode" oldosmode)
(princ)
);;;

相关文档