明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: H-浩浩-H

[已解答] 新手编的lisp请高手指错误 谢谢

[复制链接]
 楼主| 发表于 2016-5-4 23:43:33 | 显示全部楼层
feng83 发表于 2016-5-3 21:40
;;未经过严格测试,有问题记得提出来
(defun c:tt()
  (defun dxf (code elist) (cdr (assoc code  ...

等分  我已经搞定了       可是  矩形炸开 后的   还是解决不了

(defun c:tt()
  (defun dxf (code elist) (cdr (assoc code elist)))
  (vl-load-com)
  (command "ucs" "w")
  (while(not(setq pt1(entsel "\n\t选择第1条线: "))))
  (while(not(setq pt2(entsel "\n\t选择第2条线: "))))
  (setq l1 (entget(car pt1)))
  (setq l2 (entget(car pt2)))
  (setq p1 (dxf 10 l1) p2 (dxf 11 l1) p3 (dxf 10 l2) p4 (dxf 11 l2))
  (setq ang1 (angle p1 p2) ang2 (angle p3 p4))
  (setq dang (- ang1 ang2))
  (print dang)
  (if (or(equal (abs dang) 0 1e-3)(equal (abs dang) pi 1e-3))
    (progn
      (while(not(setq a4(getreal "\n\t请输入层板厚度 :"))))
      (while(not(setq a5(getint "\n\t请输入层板数量 :"))))
      (setq w (angle p1 p3) w1 (angle p2 p4))
      (setq w10 (/ (- (distance p1 p3) (* a4 a5)) (+ a5 1)) w11 (/ (- (distance p2 p4) (* a4 a5)) (+ a5

1)))
(setq b1 1 b2 0)   
(repeat a5
        (setq p10 (polar p1 w w10))
        (setq p11 (polar p2 w1 w11))
        (setq p8 (polar p1 w (+ (* w10 b1) (* a4 b2))))
        (setq p9 (polar p2 w1 (+ (* w11 b1) (* a4 b2))))
        (entmake (list '(0 . "LINE") (cons 10 p8) (cons 11 p9)))
         (setq b2(+ b2 1))
        (setq p15 (polar p1 w (+ (* w10 b1) (* a4 b2))))
        (setq p16 (polar p2 w1 (+ (* w11 b1) (* a4 b2))))
        (entmake (list '(0 . "LINE") (cons 10 p15) (cons 11 p16)))
        (setq b1(+ b1 1))
      ))
    (alert "\n两条线不平行不符合条件!")
    )
  (princ)
  )
发表于 2016-5-5 09:04:49 | 显示全部楼层
...
    (while(not(setq a5(getint "\n\t请输入层板数量 :"))))
    (if (> (distance p1 p3) (distance p2 p3)) (setq p1 (dxf 11 l1) p2 (dxf 10 l1)));加上这句试试
...
发表于 2016-5-5 20:45:28 | 显示全部楼层
本帖最后由 feng83 于 2016-5-5 21:34 编辑
H-浩浩-H 发表于 2016-5-4 21:26
非常感谢    我看到有这两个问题    距离没有均分       如果是矩形炸开的线会出现如图的问题

你说的二个问题:
1炸天矩形图形会变的问题是因为,系统在选二条线的时候,会自动,都是从左或从右,所以我没做判断,矩形炸开大概是首尾相连性的问题,所以看到后面有人加了一句判断10和11点的问题
2 关于不等距的问题,开始我仅做了对二条线之间距离进行等分,所以如果是测中间线对边,应该等距分的,呵呵,没作细细的测试

在你改动的基础上,在把ZZXXQQ版主的这句加上就可以了(if (> (distance p1 p3) (distance p2 p3)) (setq p1 (dxf 11 l1) p2 (dxf 10 l1)))
 楼主| 发表于 2016-5-6 20:15:11 | 显示全部楼层
ZZXXQQ 发表于 2016-5-5 09:04
...
    (while(not(setq a5(getint "\n\t请输入层板数量 :"))))
    (if (> (distance p1 p3) (distance ...

完美解决    感谢
 楼主| 发表于 2016-5-6 20:15:56 | 显示全部楼层
feng83 发表于 2016-5-5 20:45
你说的二个问题:
1炸天矩形图形会变的问题是因为,系统在选二条线的时候,会自动,都是从左或从右,所以 ...

非常感谢 !!!!
发表于 2016-5-24 21:39:57 | 显示全部楼层
发表于 2024-12-6 10:21:37 | 显示全部楼层

太厉害了  楼主这个插件在哪里下载?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-1-23 00:58 , Processed in 0.167922 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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