明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: kxdm1984

[已解答] 哪位大神知道怎么把一条多义线各段的x、y方向的增量读出来的lisp程序吗

[复制链接]
发表于 2013-6-8 16:44 | 显示全部楼层
wowan1314 发表于 2013-6-8 16:33
X变为绝对值,y不变 。 不知道对不对?! 你看看
(mapcar '(lambda(x) (list (abs (car x)) (cadr x) (cad ...

轻多义线没有caddr。^_^
发表于 2013-6-8 19:29 | 显示全部楼层
ll_j 发表于 2013-6-8 16:44
轻多义线没有caddr。^_^

呵呵! 还是按您的代码妥当
(mapcar '(lambda(x) (cons (abs (car x)) (cdr x))) lst)
 楼主| 发表于 2013-6-9 00:05 | 显示全部楼层
是这样的,这个cad图中多段线起点在右边终点在左边,用以下代码得到x、y方向增量是这样的:((-169.046 279.382) (-334.067 -68.3381) (-251.557 -150.746) (-285.769 66.3281) (-90.5605 -124.617)),现在我希望不管多段线起点在那边,都希望x方向增量是正值,该如何修改代码,代码如下:
(
(lambda (l)
   (mapcar
     (function
       (lambda
         (a b)
          (mapcar '- b a)
       )
     )
     l
     (cdr l)
   )
)
  (mapcar
    'cdr
    (vl-remove-if-not
      (function
        (lambda (x) (= 10 (car x)))
      )
      (entget (car (entsel "\n选择多段线:")))
    )
  )
)

本帖子中包含更多资源

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

x
发表于 2013-6-9 08:34 | 显示全部楼层
本帖最后由 ZZXXQQ 于 2013-6-9 19:31 编辑
  1. ;输出长度到文件 明经 ZZXXQQ 2013.6.9
  2. (defun c:tt ()
  3. (setq nm (if (= (type nm) 'STR) nm ""))
  4. (if (and (setq nm (getfiled "选择保存文件名" nm "txt" 1))
  5.              (setq ss (ssget '((0 . "LWPOLYLINE"))))) (progn
  6.   (setq i -1)
  7.   (repeat (sslength ss)
  8.    (setq ent (entget(ssname ss (setq i (1+ i)))))
  9.    (setq plst (list))
  10.    (foreach x ent (if (= (car x) 10) (setq plst (cons (cdr x) plst))))
  11.    (setq plst (reverse plst))
  12.    (setq llst (mapcar
  13.      '(lambda (a b) (list (abs(- (car b) (car a))) (- (cadr b) (cadr a))))
  14.      plst (cdr plst)
  15.     )
  16.    )
  17.    (setq fp (open nm (if (findfile nm) "a" "w")))
  18.    (mapcar
  19.    '(lambda (x)
  20.    (princ "X=" fp) (princ (rtos (car x) 2 3) fp)
  21.    (princ "Y=" fp) (princ (rtos (cadr x) 2 3) fp) (princ "\n" fp)
  22.    )
  23.    llst
  24.   )
  25.   (princ "\n" fp)
  26.   (close fp)
  27. )
  28. ))
  29. (princ)
  30. )
 楼主| 发表于 2013-6-9 09:48 | 显示全部楼层
谢谢大神了
发表于 2013-6-9 10:26 | 显示全部楼层
本帖最后由 ll_j 于 2013-6-9 10:29 编辑
kxdm1984 发表于 2013-6-9 00:05
是这样的,这个cad图中多段线起点在右边终点在左边,用以下代码得到x、y方向增量是这样的:((-169.046 279.3 ...


还按G版的代码延续下去:
  1. (setq lst
  2.        ((lambda (l)
  3.           (mapcar
  4.             (function
  5.               (lambda
  6.                 (a b)
  7.                  (mapcar '- b a)
  8.               )
  9.             )
  10.             l
  11.             (cdr l)
  12.           )
  13.         )
  14.          (if (< (caar (setq lst (mapcar
  15.                                   'cdr
  16.                                   (vl-remove-if-not
  17.                                     (function
  18.                                       (lambda (x) (= 10 (car x)))
  19.                                     )
  20.                                     (entget (car (entsel "\n选择多段线:")))
  21.                                   )
  22.                                 )
  23.                       )
  24.                 )
  25.                 (caar (reverse lst))
  26.              )
  27.            lst
  28.            (reverse lst)
  29.          )
  30.        )
  31. )


通俗一点应该是这样:
  1. (defun c:tt ()
  2.   (defun tmp (l)
  3.     (mapcar
  4.       (function
  5.         (lambda
  6.           (a b)
  7.            (mapcar '- b a)
  8.         )
  9.       )
  10.       l
  11.       (cdr l)
  12.     )
  13.   )

  14.   (setq lst (mapcar
  15.               'cdr
  16.               (vl-remove-if-not
  17.                 (function
  18.                   (lambda (x) (= 10 (car x)))
  19.                 )
  20.                 (entget (car (entsel "\n选择多段线:")))
  21.               )
  22.             )
  23.   )
  24.   (if (> (caar lst) (caar (reverse lst)))
  25.     (setq lst (reverse lst))
  26.   )
  27.   (setq lst (tmp lst))
  28. )

 楼主| 发表于 2013-6-9 11:08 | 显示全部楼层
x方向增量为正值的问题是解决了,但是多段线起点如果在右边终点在左边的话,输出的值就刚好是反的
发表于 2013-6-9 11:56 | 显示全部楼层
kxdm1984 发表于 2013-6-9 11:08
x方向增量为正值的问题是解决了,但是多段线起点如果在右边终点在左边的话,输出的值就刚好是反的

那么你看看晓东那边的回帖。
 楼主| 发表于 2013-6-9 12:20 | 显示全部楼层
ZZXXQQ 发表于 2013-6-9 08:34

谢谢问题解决了。但如果我现在要输出一段多段线x、y方向增量,得到结果如下X=468.666Y=-190.668X=327.632Y=249.168X=436.12Y=-26.0002X=303.765Y=121.334; 现在我希望输出小数位保留三位,请问该如何设置
发表于 2013-6-9 19:49 | 显示全部楼层
kxdm1984 发表于 2013-6-9 12:20
谢谢问题解决了。但如果我现在要输出一段多段线x、y方向增量,得到结果如下X=468.666Y=-190.668X=327.632 ...

14楼改了。是要求所有数据写在一行吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-20 00:16 , Processed in 0.154135 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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