明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1445|回复: 0

[基础] [求助]编写一程序,由用户选取直线,然后沿着该直线角度,在线的上方输入文字

[复制链接]
发表于 2010-5-31 14:41 | 显示全部楼层 |阅读模式
我写了一个,但是不好。。

;;2010.05.29
;;求直线长度并标记
;;需选择直线、文字高度、比例因子
                                                                       

 

(DEFUN C:CD()
  (SETVAR "CMDECHO" 0)
  (GRAPHSCR)
  (SETQ K T)
  (WHILE K
    (INITGET "S L A")
    (SETQ K(GETKWORD "\n请选择直线[多条(S)][图层(L)/所有(A)]<退出>:"))
    (COND ((EQUAL K NIL)(EXIT))
   ((EQUAL K "S")(SETQ E1 (SSGET)))
   ((EQUAL K "L")(INITGET 1)(SETQ layer_name (GETSTRING "\n请输入图层名:"))
                            (SETQ E1 (SSGET "x" '((8 . "layer_name")(0 . "LINE")))))
   ((EQUAL K "A")(SETQ E1(SSGET "X" '((0 . "LINE")))))
  
    )
;;;输入高度和比例因子
    (SETQ H 10)
    (SETQ B 100)
    (INITGET 6)
    (SETQ H (GETDIST "\n请输入高度<10>:"))
    (SETQ B (GETREAL "\n请输入比例因子<100>: "))
;::::::::::::::::  
    (SETQ SLEN (SSLENGTH E1))
    (SETQ n 0)
    (WHILE (< n SLEN)
      (SETQ LL (SSNAME E1 n))
      (SETQ ST (entget LL))
      (SETQ P1 (CDR (ASSOC 10 ST)))                      ;获得直线起点坐标
      (SETQ P2 (CDR (ASSOC 11 ST)))                      ;获得直线终点坐标
       (SETQ ANG (ANGLE P1 P2))                           ;获得直线角度
;=== 求文字方向
  (COND ((AND(< ANG (/ PI 2))(>= ANG 0)) (SETQ ANG1 ANG))
 ((AND (>= ANG (/ PI 2))(< ANG PI))(SETQ ANG1 (+ ANG PI)))
 ((AND (>= ANG PI)(< ANG (* 1.5 PI))(SETQ ANG1 (- ANG PI))))
 ((AND(>= ANG (* PI 1.5))(<= ANG (* 2 PI))) (SETQ ANG1 ANG))
  )
;....................
;===求文字相对于直线位置
  (COND ((AND(< ANG (/ PI 2))(>= ANG 0)) (SETQ ANG2 (+ ANG (* 0.5 PI))))
        ((AND (>= ANG (/ PI 2))(<= ANG (* 1.5 PI))(SETQ ANG2 (- ANG (* 0.5 PI)))))
 ((AND(>= ANG (* PI 1.5))(<= ANG (* 2 PI))) (SETQ ANG2 (- ANG(* 1.5 PI))))     
  )
;.....................
  (SETQ L (DISTANCE P1 P2))                          ;获得直线长度
  (SETQ L (FIX (+ L 0.5)))                           ;长度四舍五入后取整
  (SETQ L (ITOA L))                                  ;将整数转换为字符串
  (SETQ P3 (LIST(+ (CAR P1)(/(-(CAR P2)(CAR P1))2.0))(+(CADR P1)(/(-(CADR P2)(CADR P1))2.0))))    ;求直线中点
  (SETQ P4 (POLAR P3 ANG2 (* H 0.8)))                ;求文字中心点坐标
  (SETQ ANG1 (/ (* ANG1 180) PI))                      ;将弧度转化为角度
  (SETQ TEX (STRCAT "L=" L))                         ;连接字符串
  (COMMAND ".TEXT" "J" "MC" P4 H ANG1 TEX)            ;输出长度
      (SETQ n (+ n 1))
     )
   )
)

 

 

 

 

 

求高手帮个忙。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-17 20:27 , Processed in 0.204928 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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