- 积分
 - 5962
 
- 明经币
 -  个
 
- 注册时间
 - 2022-9-23
 
- 在线时间
 -  小时
 
- 威望
 -  
 
- 金钱
 -  个
 
- 贡献
 -  
 
- 激情
 -  
 
 
 
 
 
 
 | 
 
 
 楼主 |
发表于 2025-1-20 12:53:15
|
显示全部楼层
 
 
 
(defun c:zd () 
  (vl-load-com) ; 加载 Visual LISP 扩展功能 
  (regapp "SOUTH") 
  (regapp "NAME") 
  (regapp "CODE") 
  (regapp "TIME") 
  (setq TIME (list "TIME" (cons 1000 (menucmd "M=$(edtime,$(getvar,date),YYYY-MO-DD-HH:MM:SS)")))) 
  (setq osm (getvar "osmode")) ; 保存当前捕捉模式 
  (setvar "osmode" 0) ; 设置为无捕捉模式 
  (vl-cmdf ".undo" "be") ; 开始撤销标记 
  (setq blc (getint "\n请输入比例尺1:")) 
  (setvar 'userr1 blc) ; 设置比例尺 
  (setq zg (* 0.002 blc)) ; 字高 
  (setq scale (* 0.001 blc)) ; 缩放比例 
  (setq xswsa 3) ; 固定高程小数位数为3 
 
  (setq ff (open (getfiled "请选择要展点的数据文件" "" "dat" 2) "r")) ; 打开数据文件 
  (while (setq zb (read-line ff)) 
    (while (vl-string-search "," zb) (setq zb (vl-string-subst " " "," zb))) ; 用空格替换逗号 
    (setq zb (read (strcat "(" zb ")")) 
          id (nth 0 zb) 
    ) 
    (if (= (length zb) 5) 
        (setq zpt (list (nth 2 zb) (nth 3 zb) (nth 4 zb))) ; 高程与点号的插入点 
        (setq zpt (list (nth 1 zb) (nth 2 zb) (nth 3 zb))) 
    ) 
    (setq p2 (polar zpt (* 0.25 pi) (* 1.5 zg))) ; 点号注记的插入点 
    (entmake (list '(0 . "POINT") (cons 10 zpt) '(8 . "ZDH") 
                   (list -3 (list "NAME" (cons 1000 (vl-princ-to-string (nth 0 zb)))) 
                         (list "CODE" (cons 1000 (vl-princ-to-string (nth 1 zb)))) TIME 
                   ) 
              ) 
    ) 
    (entmake (list '(0 . "TEXT") (cons 1 (vl-princ-to-string id)) (cons 10 p2) '(7 . "HZ") '(8 . "ZDH") (cons 40 zg) '(41 . 0.8))) ; 点号注记 
    (gxl-cs:gcd zpt (caddr zpt) scale 2 (list "NAME" (cons 1000 (vl-princ-to-string (nth 0 zb))) 
                                              (cons 1000 (vl-princ-to-string (nth 1 zb))) 
                                              ) 
               ) ; 展高程点 
  ) 
  (close ff) 
  (command "undo" "e") ; 结束撤销标记 
  (setvar "osmode" osm) ; 恢复原来的捕捉模式 
  (princ "展点完成") 
  (princ) 
) 
 
(defun gxl-cs:gcd (inspt height scale xsws name / pt blkdef obj) 
  (setvar "CMDECHO" 0) 
  (command "layer" "m" "GCD" "c" "1" "" "L" "CONTINUOUS" "" "") 
  (if height 
      (setq height (rtos height 2 xswsa)) ; 格式化高程值为3位小数 
      (setq height "") 
  ) 
  (regapp "SOUTH") 
   
  ; 检查字体 "HZ" 是否存在 
  (if (not (tblobjname "style" "HZ")) 
      (command "style" "HZ" "rs.shx,hztxt.shx" 0 1 0 "" "" "") 
  ) 
   
  ; 检查是否存在高程点图块定义 
  (if (not (tblobjname "block" "GC200")) 
      (progn 
        (setq blkdef (vla-Add (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-3D-point '(0 0 0)) "GC200")) 
        (setq obj 
              (vla-AddPolyline 
               blkdef 
               (vlax-make-variant 
                (vlax-safearray-fill 
                 (vlax-make-safearray vlax-vbdouble (cons 0 5)) 
                 '(-0.2 0 0 0.2 0 0) 
                 ) 
                ) 
              ) 
        ) 
        (vla-SetBulge obj 0 1) (vla-SetBulge obj 1 1) 
        (vla-put-Closed obj :vlax-true) 
        (vla-put-ConstantWidth obj 0.4) 
      ) 
  ) 
   
  ; 插入块 
  (entmake (list 
             '(0 . "INSERT") 
             '(100 . "AcDbEntity") 
             '(100 . "AcDbBlockReference") 
             '(66 . 1) ; 属性跟随标志,1跟随,0不跟随 
             (cons 2 "GC200") 
             (cons 10 inspt) 
             (cons 41 scale) 
             (cons 42 scale) 
             (cons 43 scale) 
             (list -3 '("SOUTH" (1000 . "202101")) NAME TIME) 
            ) 
  ) 
   
  ; 插入属性 
  (entmake (list 
             '(0 . "ATTRIB") 
             '(100 . "AcDbEntity") 
             '(100 . "AcDbText") 
             (cons 10 (setq pt (polar inspt 0 (* 1.2 scale)))) 
             (cons 40 (* 2.0 scale)) 
             (cons 50 0) 
             (cons 41 0.8) 
             (cons 51 0) 
             (cons 1 height) 
             (cons 7 "HZ") 
             (cons 72 0) 
             (cons 11 pt) 
             '(100 . "AcDbAttribute") 
             (cons 2 "height") 
             (cons 70 0) 
             (cons 74 2) 
            ) 
  ) 
   
  ; 结束标志 
  (entmake '((0 . "SEQEND"))) 
  (princ) 
) |   
 
 
 
 |