⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pgz.lsp

📁 PC 计算机计算坡度标高1:0.2 PC1 计算机计算坡度标高1:100 PW PPC计算坡度标高1:0.2 PW1 PPC计算坡度标高1:100 zb 计算机标坐标1:0.2
💻 LSP
字号:

;(autoload "pgz" '("pc1" "pw1" "pw" "pc" "zb" "pg1" "pgz"))


;PC 计算机计算坡度标高1:0.2
;PC1 计算机计算坡度标高1:100

;PW PPC计算坡度标高1:0.2
;PW1 PPC计算坡度标高1:100

;zb 计算机标坐标1:0.2

;Pgz 计算点距离与北向夹角1:100
;Pg1 计算点距离与北向夹角1:0.2


(defun mid(pt1 pt2 ) ;计算两点之中点的功能函数 

(setq pt (mapcar '+ pt1 pt2 )) 

(setq pt (mapcar '/ pt '(2 2 2))) 

) 



(defun c:pc1 ( / gd1 bg bd M cl1 cl  e p0  p1 p2 p3 x1 y1 x2 y2 x3 y3 c1 c2 c3  d a)
 (setq osm (getvar"osmode"))
(setvar "osmode" 679)
  (setq gd1 (getreal "指定标注文字高度<250>:>"))
  
  (if (= gd1 nil) (setq gd1 250))

(setq bg (getreal "指定基准标高<-4.520>:>"))

  (if (= bg nil) (setq bg -4.520))

;(setq bd (getreal "指定坡度<0.01>:>"))
 
  (if (= bd nil) (setq bd 0.01))
(initget 1)

  (SETQ M 1) 

 (WHILE M 

  (SETQ CL1 (ENTSEL"\n选择第一条直线 ")) 

  (cond 

   ((not cl1 )  (prompt"\n 没有发现实体")) 

   ((/="LINE"(cdr (assoc 0 (setq e(entget (car cl1)))))) 

(prompt"\n 所选不是直线") 

  ) 

  (t (prompt"找到了第一条直线") 

   (setq m nil)  ;退出循环 

  ) 

  ) 

) 

                        ;(setq cl (ssget (nth 0 (cdr cl1))));取得第一条直线的实体数据 

                       ;(SETQ CL2 (ENTSEL"\n选择第二条直线")) 

                        ;if (ssmemb (car cl2) cl )

                    ;(princ"\n选择重复,重新选择") 

  
                         ;取得第一直线两端点的坐标 

(setq p1 (cdr (assoc 10 e )) p2 (cdr (assoc 11 e )))

;计算两端中点坐标 

 (setq p3 (mid p1 p2 )) 


  

(while(setq p0 (getpoint"\n选择一个点")) 


;Request distance from a point(p0) to a line(p1 p2).
  

  (setq    x1 (car p1)
    y1 (cadr p1)
    x2 (car p2)
    y2 (cadr p2)
    c1 (- y2 y1) 
    c2 (- x1 x2)
    c3 (- (* x2 y1) (* x1 y2))
  )


  
 (setq d (/ (+ (* c1 (car p0)) (* c2 (cadr p0)) c3) (sqrt (+ (* c1 c1) (* c2 c2)))  ))

(setq d (/ d 1000))
  
(setq x3 (/ (- (* (* c2 c2) (car p0)) (* (* c1 c2) (cadr p0)) (* c1 c3)) (+ (* c1 c1) (* c2 c2))  ))

(setq y3 (/ (- (* (* c1 c1) (cadr p0)) (* (* c1 c2) (car p0)) (* c2 c3)) (+ (* c1 c1) (* c2 c2))  ))

(setq    p3 ( list x3 y3 0 )) 
  
(setq d (+ bg (* bd (- 0 d)))) 

(setq d (rtos d 2 3)) 

  (entmake (list
    '(0 . "text")
    '(62 . 6)
    '(8 . "斜高") 
    (list 10 (+ (car p0) gd1) (car(cdr p0)) )
    (cons 40 gd1)
    (cons 1 ( strcat "" d))
    '(50 . 0)
    )
  )


(entmake (list
    '(0 . "LINE")
    '(62 . 5)
    '(67 . 0)
    '(8 . "距离") 
    (list 10 (car p0) (cadr p0) 0)
    (list 11 (+ (car p0) gd1) ( + (car(cdr p0)) ( / gd1 3) ) )
    '(210 0.0 0.0 1.0)
    )
)
  

  (entmake (list
    '(0 . "LINE")
    '(62 . 2)
    '(67 . 0)
    '(8 . "距离") 
    (list 10 (car p0) (cadr p0) 0)
    (list 11 (car p3) (cadr p3) 0)
    '(210 0.0 0.0 1.0)
    )
)
;(command "line" p0 p3 "")

(Princ "\n ok") )
(setvar "osmode" osm)
(princ) 

  

 
)

















(defun c:pw1 ( / gd1 bg bd p1 p2 p0  p3 x1 y1 x2 y2 x3 y3  c1 c2 c3  d )
 (setq osm (getvar"osmode"))
(setvar "osmode" 679)
  (setq gd1 (getreal "指定标注文字高度<250>:>"))
  
  (if (= gd1 nil) (setq gd1 250))

(setq bg (getreal "指定基准标高<-4.520>:>"))

  (if (= bg nil) (setq bg -4.520))

;(setq bd (getreal "指定坡度<0.01>:>"))
 
  (if (= bd nil) (setq bd 0.01))
(initget 1)

  

                        ;(setq cl (ssget (nth 0 (cdr cl1))));取得第一条直线的实体数据 

                       ;(SETQ CL2 (ENTSEL"\n选择第二条直线")) 

                        ;if (ssmemb (car cl2) cl )

                    ;(princ"\n选择重复,重新选择") 

  
                         ;取得第一直线两端点的坐标 

(setq p1 (getpoint"\n选择直线一个点"))

(setq p2 (getpoint p1 "\n选择直线另一个点"))

  (setvar "osmode" 167)

(while(setq p0 (getpoint"\n选择一个点")) 


;Request distance from a point(p0) to a line(p1 p2).
  

  (setq    x1 (car p1)
    y1 (cadr p1)
    x2 (car p2)
    y2 (cadr p2)
    c1 (- y2 y1) 
    c2 (- x1 x2)
    c3 (- (* x2 y1) (* x1 y2))
  )
 
 (setq d (/ (+ (* c1 (car p0)) (* c2 (cadr p0)) c3) (sqrt (+ (* c1 c1) (* c2 c2)))  ))

   (setq    d (/ d 1000))

(setq x3 (/ (- (* (* c2 c2) (car p0)) (* (* c1 c2) (cadr p0)) (* c1 c3)) (+ (* c1 c1) (* c2 c2))  ))

(setq y3 (/ (- (* (* c1 c1) (cadr p0)) (* (* c1 c2) (car p0)) (* c2 c3)) (+ (* c1 c1) (* c2 c2))  ))

(setq    p3 ( list x3 y3 0 )) 
  
(setq d (+ bg (* bd (- 0 d)))) 

(setq d (rtos d 2 3)) 

  (entmake (list
    '(0 . "text")
    '(62 . 6)
    '(8 . "斜高") 
    (list 10 (+ (car p0) gd1) (car(cdr p0)) )
    (cons 40 gd1)
    (cons 1 ( strcat "" d))
    '(50 . 0)
    )
  )
(entmake (list
    '(0 . "LINE")
    '(62 . 5)
    '(67 . 0)
    '(8 . "距离") 
    (list 10 (car p0) (cadr p0) 0)
    (list 11 (+ (car p0) gd1) ( + (car(cdr p0)) ( / gd1 3) ) )
    '(210 0.0 0.0 1.0)
    )
)
  (entmake (list
    '(0 . "LINE")
    '(62 . 2)
    '(67 . 0)
    '(8 . "距离") 
    (list 10 (car p0) (cadr p0) 0)
    (list 11 (car p3) (cadr p3) 0)
    '(210 0.0 0.0 1.0)
    )
)
;(command "line" p0 p3 "")

(Princ "\n ok") )
(setvar "osmode" osm)
(princ) 

  

 
)











(defun c:pw ( / gd1 bg bd p1 p2 p0  p3 x1 y1 x2 y2 x3 y3  c1 c2 c3  d )
 (setq osm (getvar"osmode"))
(setvar "osmode" 679)
  
  (setq gd1 (getreal "指定标注文字高度<0.51>:>"))
  
  (if (= gd1 nil) (setq gd1 0.51))

(setq bg (getreal "指定基准标高<-4.520>:>"))

  (if (= bg nil) (setq bg -4.520))

;(setq bd (getreal "指定坡度<0.01>:>"))
 
  (if (= bd nil) (setq bd 0.01))
(initget 1)

  

                        ;(setq cl (ssget (nth 0 (cdr cl1))));取得第一条直线的实体数据 

                       ;(SETQ CL2 (ENTSEL"\n选择第二条直线")) 

                        ;if (ssmemb (car cl2) cl )

                    ;(princ"\n选择重复,重新选择") 

  
                         ;取得第一直线两端点的坐标 

(setq p1 (getpoint"\n选择直线一个点"))

(setq p2 (getpoint p1 "\n选择直线另一个点"))

  (setvar "osmode" 167)

(while(setq p0 (getpoint"\n选择一个点")) 


;Request distance from a point(p0) to a line(p1 p2).
  

  (setq    x1 (car p1)
    y1 (cadr p1)
    x2 (car p2)
    y2 (cadr p2)
    c1 (- y2 y1) 
    c2 (- x1 x2)
    c3 (- (* x2 y1) (* x1 y2))
  )
 
 (setq d (/ (+ (* c1 (car p0)) (* c2 (cadr p0)) c3) (sqrt (+ (* c1 c1) (* c2 c2)))  ))

(setq x3 (/ (- (* (* c2 c2) (car p0)) (* (* c1 c2) (cadr p0)) (* c1 c3)) (+ (* c1 c1) (* c2 c2))  ))

(setq y3 (/ (- (* (* c1 c1) (cadr p0)) (* (* c1 c2) (car p0)) (* c2 c3)) (+ (* c1 c1) (* c2 c2))  ))

(setq    p3 ( list x3 y3 0 )) 
  
(setq d (+ bg (* bd (- 0 d)))) 

(setq d (rtos d 2 3)) 

  (entmake (list
    '(0 . "text")
    '(62 . 6)
    '(8 . "斜高") 
    (list 10 (+ (car p0) gd1) (car(cdr p0)) )
    (cons 40 gd1)
    (cons 1 ( strcat "" d))
    '(50 . 0)
    )
  )
(entmake (list
    '(0 . "LINE")
    '(62 . 5)
    '(67 . 0)
    '(8 . "距离") 
    (list 10 (car p0) (cadr p0) 0)
    (list 11 (+ (car p0) gd1) ( + (car(cdr p0)) ( / gd1 3) ) )
    '(210 0.0 0.0 1.0)
    )
)
  (entmake (list
    '(0 . "LINE")
    '(62 . 2)
    '(67 . 0)
    '(8 . "距离") 
    (list 10 (car p0) (cadr p0) 0)
    (list 11 (car p3) (cadr p3) 0)
    '(210 0.0 0.0 1.0)
    )
)
;(command "line" p0 p3 "")

(Princ "\n ok") )
(setvar "osmode" osm)
(princ) 

  

 
)




(defun c:pc ( / gd1 bg bd M cl1 cl  e p0  p1 p2 p3 x1 y1 x2 y2 x3 y3 c1 c2 c3  d a)
 (setq osm (getvar"osmode"))
(setvar "osmode" 679)
  (setq gd1 (getreal "指定标注文字高度<0.50>:>"))
  
  (if (= gd1 nil) (setq gd1 0.50))

(setq bg (getreal "指定基准标高<-4.520>:>"))

  (if (= bg nil) (setq bg -4.520))

;(setq bd (getreal "指定坡度<0.01>:>"))
 
  (if (= bd nil) (setq bd 0.01))
(initget 1)

  (SETQ M 1) 

 (WHILE M 

  (SETQ CL1 (ENTSEL"\n选择第一条直线 ")) 

  (cond 

   ((not cl1 )  (prompt"\n 没有发现实体")) 

   ((/="LINE"(cdr (assoc 0 (setq e(entget (car cl1)))))) 

(prompt"\n 所选不是直线") 

  ) 

  (t (prompt"找到了第一条直线") 

   (setq m nil)  ;退出循环 

  ) 

  ) 

) 

                        ;(setq cl (ssget (nth 0 (cdr cl1))));取得第一条直线的实体数据 

                       ;(SETQ CL2 (ENTSEL"\n选择第二条直线")) 

                        ;if (ssmemb (car cl2) cl )

                    ;(princ"\n选择重复,重新选择") 

  
                         ;取得第一直线两端点的坐标 

(setq p1 (cdr (assoc 10 e )) p2 (cdr (assoc 11 e )))

;计算两端中点坐标 

 (setq p3 (mid p1 p2 )) 


  

(while(setq p0 (getpoint"\n选择一个点")) 


;Request distance from a point(p0) to a line(p1 p2).
  

  (setq    x1 (car p1)
    y1 (cadr p1)
    x2 (car p2)
    y2 (cadr p2)
    c1 (- y2 y1) 
    c2 (- x1 x2)
    c3 (- (* x2 y1) (* x1 y2))
  )


  
 (setq d (/ (+ (* c1 (car p0)) (* c2 (cadr p0)) c3) (sqrt (+ (* c1 c1) (* c2 c2)))  ))
(setq x3 (/ (- (* (* c2 c2) (car p0)) (* (* c1 c2) (cadr p0)) (* c1 c3)) (+ (* c1 c1) (* c2 c2))  ))

(setq y3 (/ (- (* (* c1 c1) (cadr p0)) (* (* c1 c2) (car p0)) (* c2 c3)) (+ (* c1 c1) (* c2 c2))  ))

(setq    p3 ( list x3 y3 0 )) 
  
(setq d (+ bg (* bd (- 0 d)))) 

(setq d (rtos d 2 3)) 

  (entmake (list
    '(0 . "text")
    '(62 . 6)
    '(8 . "斜高") 
    (list 10 (+ (car p0) gd1) (car(cdr p0)) )
    (cons 40 gd1)
    (cons 1 ( strcat "" d))
    '(50 . 0)
    )
  )


(entmake (list
    '(0 . "LINE")
    '(62 . 5)
    '(67 . 0)
    '(8 . "距离") 
    (list 10 (car p0) (cadr p0) 0)
    (list 11 (+ (car p0) gd1) ( + (car(cdr p0)) ( / gd1 3) ) )
    '(210 0.0 0.0 1.0)
    )
)
  

  (entmake (list
    '(0 . "LINE")
    '(62 . 2)
    '(67 . 0)
    '(8 . "距离") 
    (list 10 (car p0) (cadr p0) 0)
    (list 11 (car p3) (cadr p3) 0)
    '(210 0.0 0.0 1.0)
    )
)
;(command "line" p0 p3 "")

(Princ "\n ok") )
(setvar "osmode" osm)
(princ) 

  

 
)



(defun C:zb( / zb gd cld osm )
(setq osm (getvar"osmode"))
(setvar "osmode" 167)
(setq gd1 (getreal "指定标注文字高度<0.60>:>"))

(if (= gd nil) (setq gd 0.60))

(while (setq zb (getpoint "指定坐标点:"))

(setq cld(getpoint zb "指定文字插入点:"))

(entmake (list
    '(0 . "LINE")
    '(62 . 5)
    '(67 . 0)
    '(8 . "坐标") 
    (list 10 (car zb) (cadr zb) 0)
    (list 11 (car cld) (cadr cld) 0)
    '(210 0.0 0.0 1.0)
    )
)
(entmake (list
    '(0 . "text")
    (list 10 (+ (car cld) gd) (car(cdr cld)) )
    (cons 40 gd)
    (cons 1 ( strcat "X=" (rtos (cadr zb) 2 3)))
    '(50 . 0)
    )
  )
(entmake (list
    '(0 . "text")
    (list 10 (+ (car cld) gd)
      (- (car(cdr cld)) (+ gd (/ gd 3)) )
      )
    (cons 40 gd)
    (cons 1 (strcat "Y="(rtos (car zb) 2 3)))
    '(50 . 0)
    )
  )
)

(setvar "osmode" osm)
(princ)

)



;标注距离 角度命令 jj

(defun c:pg1(/ gd1 jd  r p1 p2 a b ) 

;保存环境变量 

 (setq os (getvar "osmode")) 

 ;(setq cm (getvar "cmdecho")) 
;设置环境变量 

 (setvar "osmode" 37) 

 ;(setvar "cmdecho" 0) 

;依次读取两条直线点 

  

(setq gd1 (getreal "指定标注文字高度<0.60>:>"))
(if (= gd1 nil) (setq gd1 0.6))

  (setq jd (getreal "指定标注角度方向逆时针1 顺时针0 <顺时针0>:>"))
(if (= jd nil) (setq jd 0))

 (setq p1 (getpoint"\n选择第一个点")) 

 (initget 1)

(while (setq p2 (getpoint  p1 "\n选择第二个点"))

(if (> jd 0) (setq a(angtos (angle p1 p2) 1 4) ))
(if (= jd 0) (setq a(angtos (- 6.2831852  (angle p1 p2)) 1 4) ))
  
  
  (setq b (rtos (/ (distance p1 p2) 1) 2 3)) 
 

 (command "line" p1 p2 "")


   (entmake (list
    '(0 . "text")
    '(62 . 5)
    '(8 . "斜角") 
    (list 10 (+ (car p2) gd1) (car(cdr p2)) )
    (cons 40 gd1)
    (cons 1 ( strcat "" a))
    '(50 . 0)
    )
  )
(entmake (list
    '(0 . "text")
    '(62 . 11)                      ;映射
    '(8 . "斜角") 
    (list 10 (+ (car p2) gd1)
      (- (car(cdr p2)) (+ gd1 (/ gd1 3)) )
      )
    (cons 40 gd1)
    (cons 1 (strcat ">" b ))
    '(50 . 0)
    )
  )

)

  (setvar "osmode" os) 


(princ)

)


;标注距离 角度命令 jj

(defun c:pgz(/ x y  p1 p2 a b ) 

;保存环境变量 

 (setq os (getvar "osmode")) 

 (setq cm (getvar "cmdecho")) 
;设置环境变量 

 (setvar "osmode" 679) 

 (setvar "cmdecho" 0) 

;依次读取两条直线点 
 (setq d 250)
  
(setq x (getreal "指定标注文字高度<250>:>"))
(if (= x nil) (setq x 250))

  (setq y (getreal "指定标注角度方向逆时针1 顺时针0 <顺时针0>:>"))
(if (= y nil) (setq y 0))


 (initget 1) 

 (setq p1 (getpoint"\n选择第一个点")) 

 (initget 1)

(while (setq p2 (getpoint  p1 "\n选择第二个点"))
 
 
 (if (> y 0) (setq a(angtos (angle p1 p2) 1 4) ))
(if (= y 0) (setq a(angtos (- 6.2831852  (angle p1 p2)) 1 4) ))

 (setq b (rtos (/ (distance p1 p2) 1000) 2 3)) 
  

 (command "line" p1 p2 "")

  
(entmake (list
    '(0 . "text")
    '(62 . 12)
    '(8 . "斜角") 
    (list 10 (+ (car p2) x) (car(cdr p2)) )
    (cons 40 x)
    (cons 1 ( strcat "" a))
    '(50 . 0)
    )
  )
(entmake (list
    '(0 . "text")
    '(62 . 11)                      ;映射
    '(8 . "斜角") 
    (list 10 (+ (car p2) x)
      (- (car(cdr p2)) (+ x (/ x 3)) )
      )
    (cons 40 x)
    (cons 1 (strcat ">" b ))
    '(50 . 0)
    )
  )

)

  

  (setvar "osmode" os) 
(setvar "cmdecho" cm)

) 

(princ "\nC:GSL1 has loaded") 

(Princ "\n for symmetry line") 

(princ)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -