明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1561|回复: 4

[提问] 开新帖继续求弯头的完善LISP

[复制链接]
发表于 2013-5-18 09:45 | 显示全部楼层 |阅读模式
首先谢谢smartstar的弯头程式,点选方向的方法很特别。但也不太稳定。。 希望能高人指定修改成直接内弯生成弯头。真的很需要!请大大们帮忙,谢谢!



本帖子中包含更多资源

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

x
 楼主| 发表于 2013-5-18 09:46 | 显示全部楼层
  1. (defun c:df1 (/   ip1 ip2 ip3 la  a   co  e   a1  d1  d2  d3  dn  p
  2.        li  l1  l2  l3  l4  l5  l6  lt  i   m1  n1  m2  n2  m3
  3.        n3  r   f   a   b   c   x   y   z
  4.       )
  5.   (setvar "cmdecho" 0)
  6.   (setq a (ssget))
  7.   (setq n (sslength a))
  8.   (cond ((= n 6)
  9.   (setq i 1)
  10.   (setq pt0 (getpoint "请选择倒角方向点:"))
  11.   (setq p (trans pt0 1 0))
  12.   (setq d1 (dis (ssname a 0)))
  13.   (setq a1 (ang (ssname a 0)))
  14.   (setq m1 0
  15.         n1 100
  16.         m2 100
  17.         n2 100
  18.         m3 100
  19.         n3 100
  20.   )
  21.   (repeat 5
  22.     (sort i)
  23.     (setq i (1+ i))
  24.   )
  25.   (setq l1 (ssname a m1))
  26.   (setq l2 (ssname a n1))
  27.   (setq l3 (ssname a m2))
  28.   (setq l4 (ssname a n2))
  29.   (setq l5 (ssname a m3))
  30.   (setq l6 (ssname a n3))
  31.   (setq la (cdr (assoc 8 (entget l1))))
  32.   (setq co (cdr (assoc 62 (entget l1))))
  33.   (setq lt (cdr (assoc 6 (entget l1))))
  34.   (setq a (cdr (assoc 10 (entget l1))))
  35.   (setq b (cdr (assoc 11 (entget l1))))
  36.   (setq c (cdr (assoc 10 (entget l5))))
  37.   (setq x (cdr (assoc 10 (entget l2))))
  38.   (setq y (cdr (assoc 11 (entget l2))))
  39.   (setq z (cdr (assoc 10 (entget l6))))
  40.   (setq ip1 (pinter l1 l2))
  41.   (setq ip2 (pinter l3 l4))
  42.   (setq ip3 (pinter l5 l6))
  43.   (setq
  44.     d1 (abs (* (sin (- (angle a b) (angle a c))) (distance a c)))
  45.   )
  46.   (setq
  47.     d2 (abs (* (sin (- (angle x y) (angle x z))) (distance x z)))
  48.   )
  49.   (if (<= d1 d2)
  50.     (setq r1 (/ d1 3))
  51.     (setq r1 (/ d2 3))
  52.   )
  53.   (setq
  54.     r
  55.      (getdist (strcat "\n请输入倒角半径<" (rtos r1 2)">:")
  56.      )
  57.   )
  58.   (if (= r nil)
  59.     (setq r r1)
  60.   )
  61.   (lu l1 ip1)
  62.   (lu l2 ip1)
  63.   (lu l3 ip2)
  64.   (lu l4 ip2)
  65.   (lu l5 ip3)
  66.   (lu l6 ip3)
  67.   (if (<= d1 d2)
  68.     (progn
  69.       (setq d3 (+ (/ d1 2) r))
  70.       (setq f (+ d1 r))
  71.     )
  72.     (progn
  73.       (setq d3 (+ (/ d2 2) r))
  74.       (setq f (+ d2 r))
  75.     )
  76.   )
  77.   (setvar "filletrad" r)
  78.   (command "fillet" l1 l2)
  79.   (setq j (entget (entlast)))
  80.   (setvar "filletrad" d3)
  81.   (command "fillet" l3 l4)
  82.   (setvar "filletrad" f)
  83.   (command "fillet" l5 l6)
  84.   (setq k (entget (entlast)))
  85.   (command "line"
  86.     (trans (polar (cdr (assoc 10 j))
  87.     (cdr (assoc 50 j))
  88.     (cdr (assoc 40 j))
  89.     )
  90.     0
  91.     1
  92.     )
  93.     (trans (polar (cdr (assoc 10 k))
  94.     (cdr (assoc 50 k))
  95.     (cdr (assoc 40 k))
  96.     )
  97.     0
  98.     1
  99.     )
  100.     ""
  101.   )
  102.   (setq li (ssadd))
  103.   (setq li (ssadd (entlast) li))
  104.   (command "line"
  105.     (trans (polar (cdr (assoc 10 j))
  106.     (cdr (assoc 51 j))
  107.     (cdr (assoc 40 j))
  108.     )
  109.     0
  110.     1
  111.     )
  112.     (trans (polar (cdr (assoc 10 k))
  113.     (cdr (assoc 51 k))
  114.     (cdr (assoc 40 k))
  115.     )
  116.     0
  117.     1
  118.     )
  119.     ""
  120.   )
  121.   (setq li (ssadd (entlast) li))
  122.   (COMMAND "chprop" li "" "la" la "")
  123.   (if (= co nil)
  124.     (command "chprop" li "" "c" "bylayer" "")
  125.     (command "chprop" li "" "c" co "")
  126.   )
  127.   (if (= lt nil)
  128.     (command "chprop" li "" "lt" "bylayer" "")
  129.     (command "chprop" li "" "lt" lt "")
  130.   )
  131. )
  132. ((= n 4)
  133.   (setq i 1)
  134.   (setq pt0 (getpoint "请选择倒角方向点:"))
  135.   (setq p (trans pt0 1 0))
  136.   (setq d1 (dis (ssname a 0)))
  137.   (setq a1 (ang (ssname a 0)))
  138.   (setq m1 0
  139.         n1 100
  140.         m2 100
  141.         n2 100
  142.   )
  143.   (repeat 3
  144.     (sort i)
  145.     (setq i (1+ i))
  146.   )
  147.   (setq l1 (ssname a m1))
  148.   (setq l2 (ssname a n1))
  149.   (setq l3 (ssname a m2))
  150.   (setq l4 (ssname a n2))
  151.   (setq la (cdr (assoc 8 (entget l1))))
  152.   (setq co (cdr (assoc 62 (entget l1))))
  153.   (setq lt (cdr (assoc 6 (entget l1))))
  154.   (setq a (cdr (assoc 10 (entget l1))))
  155.   (setq b (cdr (assoc 11 (entget l1))))
  156.   (setq c (cdr (assoc 10 (entget l3))))
  157.   (setq x (cdr (assoc 10 (entget l2))))
  158.   (setq y (cdr (assoc 11 (entget l2))))
  159.   (setq z (cdr (assoc 10 (entget l4))))
  160.   (setq ip1 (pinter l1 l2))
  161.   (setq ip2 (pinter l3 l4))
  162.   (setq
  163.     d1 (abs (* (sin (- (angle a b) (angle a c))) (distance a c)))
  164.   )
  165.   (setq
  166.     d2 (abs (* (sin (- (angle x y) (angle x z))) (distance x z)))
  167.   )
  168.   (if (<= d1 d2)
  169.     (setq r1 (/ d1 3))
  170.     (setq r1 (/ d2 3))
  171.   )
  172.   (setq
  173.     r
  174.      (getdist (strcat "\n请输入倒角半径<" (rtos r1 2)">:")
  175.      )
  176.   )
  177.   (if (= r nil)
  178.     (setq r r1)
  179.   )
  180.   (lu l1 ip1)
  181.   (lu l2 ip1)
  182.   (lu l3 ip2)
  183.   (lu l4 ip2)
  184.   (if (<= d1 d2)
  185.     (setq f (+ d1 r))
  186.     (setq f (+ d2 r))
  187.   )
  188.   (setvar "filletrad" r)
  189.   (command "fillet" l1 l2)
  190.   (setq j (entget (entlast)))
  191.   (setvar "filletrad" f)
  192.   (command "fillet" l3 l4)
  193.   (setq k (entget (entlast)))
  194.   (command "line"
  195.     (trans (polar (cdr (assoc 10 j))
  196.     (cdr (assoc 50 j))
  197.     (cdr (assoc 40 j))
  198.     )
  199.     0
  200.     1
  201.     )
  202.     (trans (polar (cdr (assoc 10 k))
  203.     (cdr (assoc 50 k))
  204.     (cdr (assoc 40 k))
  205.     )
  206.     0
  207.     1
  208.     )
  209.     ""
  210.   )
  211.   (setq li (ssadd))
  212.   (setq li (ssadd (entlast) li))
  213.   (command "line"
  214.     (trans (polar (cdr (assoc 10 j))
  215.     (cdr (assoc 51 j))
  216.     (cdr (assoc 40 j))
  217.     )
  218.     0
  219.     1
  220.     )
  221.     (trans (polar (cdr (assoc 10 k))
  222.     (cdr (assoc 51 k))
  223.     (cdr (assoc 40 k))
  224.     )
  225.     0
  226.     1
  227.     )
  228.     ""
  229.   )
  230.   (setq li (ssadd (entlast) li))
  231.   (COMMAND "chprop" li "" "la" la "")
  232.   (if (= co nil)
  233.     (command "chprop" li "" "c" "bylayer" "")
  234.     (command "chprop" li "" "c" co "")
  235.   )
  236.   (if (= lt nil)
  237.     (command "chprop" li "" "lt" "bylayer" "")
  238.     (command "chprop" li "" "lt" lt "")
  239.   )
  240. )
  241. (t (princ "\n选择的线数目不对"))
  242.   )
  243.   (princ)
  244. )
  245. (defun sort(i / ai e de)
  246.   (setq e (ssname a i))
  247.   (setq ai (ang e))
  248.   (setq de (dis e))
  249.   (if (or (equal ai a1 0.1) (equal ai (- pi a1) 0.1))
  250.       (if (< d1 de)
  251.           (if (< m2 100)
  252.               (if (< (dis (ssname a m2)) de)
  253.                   (setq m3 i)
  254.                   (progn (setq m3 m2)
  255.                          (setq m2 i)
  256.                   )
  257.               )
  258.               (setq m2 i)
  259.           )
  260.           (progn (setq d1 de)
  261.                  (setq m3 m2)
  262.                  (setq m2 m1)
  263.                  (setq m1 i)
  264.           )
  265.       )
  266.       (if (< n1 100)
  267.           (if (< dn de)
  268.               (if (< n2 100)
  269.                   (if (< (dis (ssname a n2)) de)
  270.                       (setq n3 i)
  271.                       (progn (setq n3 n2)
  272.                              (setq n2 i)
  273.                       )
  274.                   )
  275.                   (setq n2 i)
  276.               )
  277.               (progn (setq dn de)
  278.                      (setq n3 n2)
  279.                      (setq n2 n1)
  280.                      (setq n1 i)
  281.               )
  282.           )
  283.           (progn (setq n1 i)
  284.                  (setq dn de)
  285.           )
  286.       )
  287. )
  288. )

  289. (defun dis(a / pa pb)
  290.   (setq pa (cdr (assoc 10 (entget a))))
  291.   (setq pb (cdr (assoc 11 (entget a))))
  292.   (abs (* (sin (- (angle pa pb) (angle pa p))) (distance pa p)))
  293. )
  294. (defun pinter(l1 l2 / ip)
  295.   (setq ip (inters (cdr (assoc 10 (entget l1))) (cdr (assoc 11 (entget l1))) (cdr (assoc 10 (entget l2))) (cdr (assoc 11 (entget l2))) nil))
  296. )
  297. (defun lu(l ip / j k pa pb ang ang1 ang2)
  298.   (setq j (entget l))
  299.   (setq pa (cdr (assoc 10 j)))
  300.   (setq pb (cdr (assoc 11 j)))
  301.   (setq ang1 (angle pa pb))
  302.   (setq ang2 (angle p ip))
  303.   (setq ang (abs (- ang1 ang2)))
  304.   (if (or (< ang (/ pi 2)) (> ang (* pi 1.5)))
  305.       (setq k (subst (cons 11 ip) (assoc 11 j) j))
  306.       (setq k (subst (cons 10 ip) (assoc 10 j) j))
  307.   )
  308.   (entmod k)
  309. )

  310. (defun ang (a / pa pb)
  311.   (setq pa (cdr (assoc 10 (entget a))))
  312.   (setq pb (cdr (assoc 11 (entget a))))
  313.   (rem (angle pa pb) pi)
  314. )
 楼主| 发表于 2013-5-19 10:03 来自手机 | 显示全部楼层
继续顶帖。。。
发表于 2013-5-19 19:31 | 显示全部楼层
我看不懂这个lsp里面 if n=6之后是干嘛的,n=4的能看懂
发表于 2021-12-4 20:48 | 显示全部楼层
我写了一个类似的看我的帖子

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-5-9 05:15 , Processed in 0.658642 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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