找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 660|回复: 3

[分享]:画结构面赤平极射投影图的lsp程序

[复制链接]
发表于 2005-6-20 21:20:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
俺做啦一个画结构面赤平极射投影图的lsp程序,与大家分享。

(defun c:CPT
           (/ oce1 oce2        p1 pz1 R n1 n2 qxc qxp qx
            qjp qj pt1 pt2 pt3 a1 str)

  (command "undo" "be")
  (setq        oce1 (getvar "cmdecho")
        oce2 (getvar "OSNAPCOORD")
  )
  (setvar "cmdecho" 0)
  (setvar "OSNAPCOORD" 1)

  (command "-style" "BG_ST" "宋体" 0 0.8 0 "n" "n")
  (initget 1)
  (setq        p1  (getpoint "\n请指定绘图基点: ")
        pz1 (polar p1 0 35)
        R   25;;;大圆半径
  )
  (command "zoom" "w" (polar p1 (* pi 0.5) 40) (polar p1 (* pi 1.5) 50))




  (command "line" (polar p1 pi 2.5)(polar p1 0 2.5) "")
  (command "line" (polar p1 (* pi 0.5) 2.5)(polar p1 (* pi 1.5) 2.5) "")
  (command "line" (polar p1 0 25)(polar p1 0 26.5) "")
  (command "line" (polar p1 (* pi 0.5) 25)(polar p1 (* pi 0.5) 26.5) "")
  (command "line" (polar p1 pi 25)(polar p1 pi 26.5) "")
  (command "line" (polar p1 (* pi 1.5) 25)(polar p1 (* pi 1.5) 26.5) "")
  (command "circle" p1 R)
  (command "text" "ml" (polar p1 0 28) 2.5 0 "E")
  (command "text" "bc" (polar p1 (* pi 0.5) 28) 2.5 0 "N")
  (command "text" "mr" (polar p1 pi 28) 2.5 0 "W")
  (command "text" "tc" (polar p1 (* pi 1.5) 28) 2.5 0 "S")




  (command "text"
             "m"
             (polar p1 (* pi 1.5) 38)
             3.2
             0
           "结构面赤平极射投影图"
  )

  (setq        n1 1
        n2 888
  )
  (while (= n2 888)
    (setq qxc 888)
    (while (= qxc 888)
      (if (not
            (setq qxp (getint "\n输入结构面倾向<退出>: "))
          )
        (setq qxc 886)
      )

      (if (= qxc 886)
        (setq qxc 886)
        (cond
          ((< qxp 0)
           (setq qxc 888)
           (princ "\---倾向数值太小,重新输入---")
          )
          ((> qxp 360)
           (setq qxc 888)
           (princ "\---倾向数值太大,重新输入---")
          )
          (t (setq qxc 880))
        )
      )
    )
    (if        (= qxc 880)
      (setq qx (/ (* (- 90 qxp) PI) 180))
    )
    (if        (= qxc 886)
      (setq qxc 886)
      (setq qxc 888)
    )
    (while (= qxc 888)
      (if (not
            (setq qjp (getint "\n输入结构面倾角<退出>: "))
          )
        (setq qxc 886)
      )

      (if (= qxc 886)
        (setq qxc 886)
        (cond
          ((< qjp 1)
           (setq qxc 888)
           (princ "\---倾角数值太小,重新输入---")
          )
          ((> qjp 89)
           (setq qxc 888)
           (princ "\---倾角数值太大,重新输入---")
          )
          (t (setq qxc 880))
        )
      )
    )

    (if        (= qxc 880)
      (setq qj (/ (* qjp PI) 180))
    )
    (cond
      ((= qxc 880)
       (progn
         (setq pt1 (polar p1 (- qx (/ PI 2)) R))
         (setq a1 (/ (sin (- (/ PI 4) (/ qj 2)))
                     (cos (- (/ PI 4) (/ qj 2)))
                  )
         )
         (setq pt2 (polar p1 (+ qx PI) (* R a1)))
         (setq pt3 (polar p1 (+ qx (/ PI 2)) R))
         (command "arc" pt1 pt2 pt3)
         (command "text" "m" pt2 2.5 0 n1)
       )
      )
      (t
       (progn
         (princ)
       )
      )
    )
    (cond
      ((= qxc 880)
       (progn
         (setq
           str (strcat (itoa n1)
                       "、结构面产状:"
                       (itoa qxp)
                       "°∠"
                       (itoa qjp)
                       "°"
               )
         )
         (command "text" "tl" pz1 2.8 0 str)
         (setq n1  (1+ n1)
               pz1 (polar pz1 (* pi 1.5) 6)
               n2  888
         )
       )
      )
      (t
       (progn
         (setq n2 886)
       )
      )
    )
  )
  (setvar "cmdecho" oce1)
  (setvar "OSNAPCOORD" oce2)
  (command "undo" "e")
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-6-22 22:34:53 | 显示全部楼层
为什么角度要限制成整数呢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-23 02:14:55 | 显示全部楼层
在野外用罗盘测量产状,只能读到整数,不会精确到0.1度的。
当然你如果要精确到小数,把getint改为getreal就行啦。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-6-23 22:06:14 | 显示全部楼层
这个东西可以!支持!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-28 09:41 , Processed in 0.441840 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表