www.pudn.com > CADtool.rar > PS_jmgc.lsp, change:2008-10-20,size:3687b


;;;------------------------------------------------------------------------ 
;;;计算并重新标注井面高程 
(defun C:PS_jmgc (/            jpoint       jppoint      lpjp         ob           obn 
                   obname       obstr        licheng      DaoLuGaoCheng             JMGaoCha 
                    ;井里程 , 道路设计高程 , 井面与道路设计高程差 
                   tJM ;井面高程文字 
                   GoOn ;用于循环控制 
                   zdmList ;纵断面数据表 
                   ListTemp     oblname      QiDianLiCheng             LiChengFangXiang 
                   ZhongDianLiCheng          LZhongXiang ;与中线相关变量 
                  ) 
 (initText) 
 ;;以当前设置初始化文本高、宽 
 (setq ListTemp (GetZhongXiang "否")) ;设置路中线及相关信息 
 
 (if ListTemp       ;如果成功设置中线 
  (progn 
   (setq oblname          (nth 0 ListTemp) 
         QiDianLiCheng    (nth 1 ListTemp) 
         LiChengFangXiang (nth 2 ListTemp) 
         ZhongDianLiCheng (nth 3 ListTemp) 
         LZhongXiang      (nth 4 ListTemp) 
   )                ;确定:( 中线  中线起点里程  里程增加与曲线正向的关系  终点里程  中线长 ) 
 
   (princ  "\n选择纬地道路纵断面设计数据文件:\n") 
   (setq zdmList (GetDateFromZDMFile)) 
 
   (setq JMGaoCha (getreal "输入(检查井井面高程-道路设计高程)值<0>:")) 
   (if (not JMGaoCha) 
    (setq JMGaoCha 0) 
   ) 
 
   (setvar "osmode" 0) 
   (setvar "dimzin" 0) ; 使输出结果不消除后续0 
   (setq GoOn "Continue") 
   (while (= GoOn "Continue") 
    (setq obn 2) 
    (while (> obn 1) 
     (princ  "\n选择一个需要重新计算井面高程的井(圆):") 
     (setq ob (ssget '((0 . "circle")))) ; 创建选择集 obc 
     (if ob 
      (setq obn (sslength ob)) 
      (progn 
       (setq obn 0) 
       (setq GoOn "Stop") 
      ) 
     )              ; 限制选择一个圆 
    ) 
 
    (if (= GoOn "Continue") 
     (progn 
      (setq obname (ssname ob 0)) ; obname,取得对象名 
      (setq obstr (entget obname)) 
      (setq jPoint (cdr (assoc 10 obstr))) ; 取得井中心坐标 
      (setq jpPoint (vlax-curve-getClosestPointTo oblname jPoint T)) ; 取得井圆心与中线的垂足坐标 
      (setq LPJP (vlax-curve-getDistAtPoint oblname jpPoint)) 
 
      (if (= LiChengFangXiang "同向") 
       (setq licheng (+ QiDianLiCheng LPJP)) 
       (setq licheng (- QiDianLiCheng LPJP)) 
      )             ; 计算井的里程数值 
 
      (setq DaoLuGaoCheng (ZDMBiaoGao zdmList licheng)) 
      (if (numberp DaoLuGaoCheng) 
       (setq tJM (rtos (+ DaoLuGaoCheng JMGaoCha) 2 3)) 
       (setq tJM DaoLuGaoCheng) 
      ) 
;;;输出计算结果 
;;;------------------------------------------------------------- 
;;;以下选择需要输入计算结果的本 
      (setq obn 2 
            ob  nil 
      ) 
      (while (> obn 1) 
       (princ "\n选择一个用于输入计算结果的单行文本:") 
       (setq ob (ssget '((0 . "text")))) ; 创建选择集 ob 
       (if ob 
        (progn 
         (setq obn (sslength ob)) 
 
         (if (= obn 1) 
          (progn 
           (setq obname (ssname ob 0)) ; obname,取得第1个对象名 
           (setq obstr (entget obname)) 
           (entmod (subst (cons 1 tJM) (assoc 1 obstr) obstr)) 
           (entupd obname) 
          ) 
         );只选择一个输出目标文本时,输出计算结果 
        ) ;选择有输出目标文本时 
 
        (progn 
         (setq obn 0) 
         (setq GoOn "Stop") 
        ) ;未选择输入目标文本 
       ) 
      )             ;限制只允许选择一个有效高程文本 
     ) 
    )               ;确定起点井面高程 
;;;------------------------------------------------------------- 
   ) 
   (setvar "osmode" 16383) 
   (setvar "dimzin" 8) 
   ;; 使输出结果消除后续0 
  ) 
 ) 
 (princ) 
) 
;;;------------------------------------------------------------------------