明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: znchssy

[求助]求助一个x,y不同比例时候,cad计算路基横断面lsp

  [复制链接]
 楼主| 发表于 2009-6-5 12:26:00 | 显示全部楼层
上传我的效果图。
 楼主| 发表于 2009-6-7 16:16:00 | 显示全部楼层

下面程序还是有点问题,就是想把开始比例x/y用常量1000赋值,不知道怎样改。

(DEFUN C:QA4(/ OLDOS PT STA QAREA)
  (setq olderr *error*)
  (setq *error* myerr)
  (SETVAR "CMDECHO" 0)
  (SETQ OLDOS (GETVAR "OSMODE"))
  (SETVAR "OSMODE" 0)
  (prompt "点已知x y 比例的多边形: ")
  (setq en (car (entsel)))
  (setq x(,1000))
  (setq y(,1000)) 
  (SETQ QAREA (GETVAR "AREA"))
  (setq yuanmj (/ qarea x y)) 
  (prompt "点另一已知x y 比例的多边形: ")
   (setq x1 (getreal "输入x向的比例: ") y1 (getreal "输入y向的比例: "))
  (setq pt1 (getpoint "文字的位置: "))
  (setq qarea1 (* yuanmj x1 y1) qarea1 (rtos qarea1 2 3))
  (COMMAND "TEXT" PT1 h "0" QAREA1)
  (SETVAR "OSMODE" OLDOS)
  (SETVAR "CMDECHO" 1)
  (setq *error* olderr)
  (PRINC)
)

发表于 2009-6-8 08:36:00 | 显示全部楼层
  1. (setvar "CMDECHO" 0)
  2. (vl-load-com)
  3. ;;;=================================================================*
  4. ;;;功能:测量封闭区域的面积(可分别设置XY比例)                     *
  5. ;;;日期:zml84 于 2009-06-07                                        *
  6. (defun C:TT (/ X Y SIZE SS AREA STR TMP)
  7.     ;; 0 初始化
  8.     (or *TEST_TMP*
  9. (setq *TEST_TMP* '(1000 100 2.5))
  10.     )
  11.     (setq X    (nth 0 *TEST_TMP*)
  12.    Y    (nth 1 *TEST_TMP*)
  13.    SIZE (nth 2 *TEST_TMP*)
  14.     )
  15.     ;; 1
  16.     (while
  17. (progn
  18.      (princ
  19.   (strcat
  20.       "\n当前设置:X比例="
  21.       (rtos X)
  22.       ",X比例="
  23.       (rtos Y)
  24.       ",字高="
  25.       (rtos SIZE)
  26.   )
  27.      )
  28.      (initget "X Y Size")
  29.      (princ
  30.   "\n点取要测量面积的封闭对象,或 [X比例(X)/Y比例(Y)/字高(S)]: "
  31.      )
  32.      (setq SS (entsel ""))
  33. )
  34.     (cond ((= SS "X")
  35.     (if (and (setq TMP (getreal "\n设置X向比例: "))
  36.       (> TMP 0)
  37.         )
  38.         (setq X TMP)
  39.     )
  40.    )
  41.    ((= SS "Y")
  42.     (if (and (setq TMP (getreal "\n设置Y向比例: "))
  43.       (> TMP 0)
  44.         )
  45.         (setq Y TMP)
  46.     )
  47.    )
  48.    ((= SS "Size")
  49.     (if (and (setq TMP (getreal "\n设置字体高度: "))
  50.       (> TMP 0)
  51.         )
  52.         (setq SIZE TMP)
  53.     )
  54.    )
  55.    ((and (setq
  56.       AREA (vla-get-area
  57.         (vlax-ename->vla-object (car SS))
  58.     )
  59.          )
  60.          (setq AREA (/ AREA 1.0 X Y)
  61.         STR  (rtos AREA 2 3)
  62.          )
  63.          (princ (strcat "\n**面积 = " STR))
  64.          (setq PT (getpoint "\n文字的位置: "))
  65.     )
  66.     (command "_.TEXT" "non" PT SIZE 0 STR)
  67.    )
  68.     )
  69.     )
  70.    
  71.     ;; 2
  72.     (setq *TEST_TMP* (list X Y SIZE))
  73.     (princ)
  74. )
发表于 2009-6-8 09:08:00 | 显示全部楼层
13楼是点取对象的方式;
14楼是点取封闭区域内一点的方式。
  1. ;;;=================================================================*
  2. ;;;功能:点取内部一点,测量封闭区域的面积(可分别设置XY比例)       *
  3. ;;;日期:zml84 于 2009-06-07                                        *
  4. (defun C:TT2 (/ X Y SIZE PT EN AREA STR TMP)
  5.     ;; 0 初始化
  6.     (or *TEST_TMP*
  7. (setq *TEST_TMP* '(1000 100 2.5))
  8.     )
  9.     (setq X    (nth 0 *TEST_TMP*)
  10.    Y    (nth 1 *TEST_TMP*)
  11.    SIZE (nth 2 *TEST_TMP*)
  12.     )
  13.     ;; 1
  14.     (while
  15. (progn
  16.      (princ
  17.   (strcat
  18.       "\n当前设置:X比例="
  19.       (rtos X)
  20.       ",X比例="
  21.       (rtos Y)
  22.       ",字高="
  23.       (rtos SIZE)
  24.   )
  25.      )
  26.      (initget "X Y Size")
  27.      (princ
  28.   "\n点取要测量的位置,或 [X比例(X)/Y比例(Y)/字高(S)]: "
  29.      )
  30.      (setq PT (getpoint ""))
  31. )
  32.     (cond ((= PT "X")
  33.     (if (and (setq TMP (getreal "\n设置X向比例: "))
  34.       (> TMP 0)
  35.         )
  36.         (setq X TMP)
  37.     )
  38.    )
  39.    ((= PT "Y")
  40.     (if (and (setq TMP (getreal "\n设置Y向比例: "))
  41.       (> TMP 0)
  42.         )
  43.         (setq Y TMP)
  44.     )
  45.    )
  46.    ((= PT "Size")
  47.     (if (and (setq TMP (getreal "\n设置字体高度: "))
  48.       (> TMP 0)
  49.         )
  50.         (setq SIZE TMP)
  51.     )
  52.    )
  53.    ((and
  54.         (setq EN (bpoly PT))
  55.         (setq
  56.      AREA (vla-get-area
  57.        (vlax-ename->vla-object EN)
  58.           )
  59.         )
  60.         ;;(progn (command "REGEN") (redraw EN 3) t)
  61.         (entdel EN)
  62.         (setq AREA (/ AREA 1.0 X Y)
  63.        STR  (rtos AREA 2 3)
  64.         )
  65.         (princ (strcat "\n**面积 = " STR))
  66.     )
  67.     (command "_.TEXT" "non" PT SIZE 0 STR)
  68.    )
  69.     )
  70.     )
  71.     ;; 2
  72.     (setq *TEST_TMP* (list X Y SIZE))
  73.     (princ)
  74. )
 楼主| 发表于 2009-6-8 09:17:00 | 显示全部楼层
谢谢zml84 ,真是厉害,你的程序很智能,很好用的。
发表于 2009-6-8 10:14:00 | 显示全部楼层
同行兄弟,多多交流。
 楼主| 发表于 2009-6-8 10:47:00 | 显示全部楼层
zml84问你一个画地面线的问题,现实工作测横断面,我们有几种方法实测,一种是直接在大致的断面线上采集点,xyz这样速度快。另外也可以对边测量模式,平距。高差。第一种方法虽然不完全在断面的法线上,但是可以模拟碎步点投影到法线上,把数据转换成平距高差形,再画地面线。我以前见过通过平距高差画地面线的lsp,但一时找不到了,不知道同行你有啥好方法能提高速度,或者好的画地面线程序。
发表于 2009-6-8 12:44:00 | 显示全部楼层
znchssy发表于2009-6-8 10:47:00zml84问你一个画地面线的问题,现实工作测横断面,我们有几种方法实测,一种是直接在大致的断面线上采集点,xyz这样速度快。另外也可以对边测量模式,平距。高差。第一种方法虽然不完全在断面的

数据格式而已,怎样都行。
发表于 2010-12-29 09:01:52 | 显示全部楼层
发表于 2011-1-6 19:10:18 | 显示全部楼层
呵呵,zml84真的很强大。不过14楼中第20行是不是 将",X比例="改成 ",Y比例="才对?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-11 11:08 , Processed in 0.193783 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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