明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 啵浪鼓

[基础] 圆生成特定4处小缺圆

  [复制链接]
 楼主| 发表于 2009-10-15 12:43 | 显示全部楼层

選擇了所有圓﹐內含2個直徑1.25的圓,2個直徑0.6325的圓,1個直徑0.53的圓,2個直徑0.47的圓

程序運行后﹐2個直徑為1的圓和2個直徑為0.6的圓未做變化(這3個超過0.6應予以執行)

提示也不對

有 7 个半径小于的圆未转换 (應該是3個0.59以下的圓不轉換)

发表于 2009-10-15 17:15 | 显示全部楼层
(defun c:tt ()
  (cmdla0)
  (SETQ DIST (UDIST 7 "" "半径<输入或鼠标直接量取>" DIST nil)
 ss   (ssget '((0 . "CIRCLE")))
 i    -1
 j    0
  )
  (setvar "osmode" 0)
  (while (setq en (ssname ss (setq i (1+ i))))
    (setq ent (entget en)
   d1  (cdr (assoc 40 ent))
    )
    (if (> d1 0.6)
      (progn
 (setq p0 (cdr (assoc 10 ent))
       p1 (polar p0 (* pi 0.25) (- d1 0.18))
       p2 (polar p1 (* pi 1.25) dist)
 )
 (command ".CIRCLE" P1 DIST)
 (command ".trim" en "" p2 "")
 (command "array" (entlast) "" "p" p0 4 360 "y")
      )
      (setq j (1+ j))
    )
  )
  (if (> j 0)
    (princ (strcat "\n有" (itoa j) "个半径小于0.6的圆未转换。"))
  )
  (cmdla1)
)
发表于 2009-10-15 19:44 | 显示全部楼层
五楼又改了,再试试。
发表于 2009-10-15 21:45 | 显示全部楼层
  1. (defun c:tt ()
  2.   (cmdla0)
  3.   (defun main-pro (/ ss rad i j s1 d1 p0 p1 p2)
  4.     (SETQ ss  (ssget '((0 . "CIRCLE")))
  5.    rad (/ pi int 1.)
  6.    i   -1
  7.    j   0
  8.     )
  9.     (setvar "osmode" 0)
  10.     (while (setq s1 (ssname ss (setq i (1+ i))))
  11.       (if (> (setq d1 (xyp-get-dxf 40 s1)) rr)
  12. (progn
  13.    (setq p0 (xyp-get-dxf 10 s1)
  14.   p1 (polar p0 rad d1)
  15.   p2 (polar p1 (+ rad pi) dist)
  16.    )
  17.    (command ".CIRCLE" P1 DIST)
  18.    (command ".trim" s1 "" p2 "")
  19.    (command "array" (entlast) "" "p" p0 int 360 "y")
  20. )
  21. (setq j (1+ j))
  22.       )
  23.     )
  24.     (if (> j 0)
  25.       (princ (strcat "\n有" (itoa j) "个半径小于0.6的圆未转换。"))
  26.     )
  27.   )
  28.   (xyp-initSet '(int dist rr) '(4 1. 0.6))
  29.   (setq Ilst '(("int" "数量" "int" "10")
  30.         ("dist" "半径" "real" "10")
  31.         ("rr" "最小半径" "real" "10")
  32.        )
  33.   )
  34.   (if (= (xyp-Dcl-Init Ilst "【TEST】" t) 1)
  35.     (main-pro)
  36.   )
  37.   (cmdla1)
  38. )

本帖子中包含更多资源

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

x
 楼主| 发表于 2009-10-16 00:35 | 显示全部楼层

5楼的程序测试ok,如果所选择的圆内有线或是其它,有可能在trim时会乱删或是删不断!

如果像xyp1964版主的程序一样,增加数量的写入(目前程序默认为4个),另外增加指定小圆的大小(目前程序是0.2的直径的圆),以及指定凸出圆的距离(目前程序是凸出0.02mm),这个程序那就非常大要写好多内容了吧,哈哈,不写了,省得麻烦,够用就行,如有需求人工干预去处理吧!

再次感谢ZZXXQQ版主不厌其烦的帮助!

发表于 2009-10-16 07:57 | 显示全部楼层
本帖最后由 作者 于 2009-10-19 17:27:21 编辑

啵浪鼓发表于2009-10-16 0:35:005楼的程序测试ok,如果所选择的圆内有线或是其它,有可能在trim时会乱删或是删不断!如果像xyp1964版主的程序一样,增加数量的写入(目前程序默认为4个),另外增加指定小圆的大小(目前程序是0.2的直径

程序應可把trim時的亂像改正(雙元表),並處理理論至小圓0.48左右吧!

发表于 2009-10-19 17:29 | 显示全部楼层
  1. ;;LUCAS
  2. (defun SS_LAI (EN / SS)
  3.   (setq SS (ssadd))
  4.   (while (setq EN (entnext EN))
  5.     (if (not (member (cdr (assoc 0 (entget EN)))
  6.        '("ATTRIB" "VERTEX" "SEQEND")
  7.       )
  8. )
  9.       (ssadd EN SS)
  10.     )
  11.   )
  12.   SS
  13. )
  14. (defun C:TTT_LAI (/  A ANG    B      C      D     D1
  15.     DZB  EN EN1    ENT    HOLDECHO     HOLDOSMODE
  16.     HOLDPTYPE I      P1     SS     WW
  17.    )
  18.   (setq HOLDECHO (getvar "CMDECHO"))
  19.   (setq HOLDOSMODE (getvar "OSMODE"))
  20.   (setvar "CMDECHO" 0)
  21.   (setvar "OSMODE" 0)
  22.   (setq HOLDPTYPE (getvar "PLINETYPE"))
  23.   (setvar "PLINETYPE" 2)
  24.   (command "_.UNDO" "BE")
  25.   (if (setq SS (ssget '((0 . "CIRCLE")
  26.    ;;(8 . "*_W")
  27.    ;;(62 . 1)
  28.    ;;(-4 . ">=")
  29.    ;;(40 . 0.24)
  30.          )
  31.         )
  32.       )
  33.     (progn
  34.       (if (= (setq A (getdist "\n凸出量<0.02>: ")) NIL)
  35. (setq A 0.02)
  36.       )
  37.       (if (= (setq B (getdist "\n小缺口半徑<0.2>: ")) NIL)
  38. (setq B 0.2)
  39.       )
  40.       (if (= (setq C (getint "\n小缺口數量<4>: ")) NIL)
  41. (setq C 4)
  42.       )
  43.       (if (= (setq D (getangle "\n小缺口起始角度<45度>: ")) NIL)
  44. (setq D (/ pi 4))
  45.       )
  46.       (setq I 0
  47.      ANG (/ (* 2 pi) C)
  48.       )
  49.       (repeat (sslength SS)
  50. (setq EN1 (entlast)
  51.        EN  (ssname SS I)
  52.        ENT (entget EN)
  53.        D1  (cdr (assoc 40 ENT))
  54.        DZB (cdr (assoc 10 ENT))
  55.        P1  (polar DZB D (- D1 (- B A)))
  56. )
  57. (command "_.CIRCLE" P1 B)
  58. (command "_.trim"
  59.    EN
  60.    ""
  61.    (list (entlast) (polar P1 (+ D pi) D1))
  62.    ""
  63. )
  64. (command "_.array" (entlast) "" "p" DZB C 360 "y")
  65. (setq WW (SS_LAI EN1))
  66. (repeat C
  67.    (command "_.trim"
  68.      WW
  69.      ""
  70.      (list EN (polar DZB (setq D (- D ANG)) D1))
  71.      ""
  72.    )
  73. )
  74. (command "_.pedit" "M" EN (SS_LAI EN1) "" "Y" "j" "0" "")
  75. (setq I (1+ I))
  76.       )
  77.     )
  78.   )
  79.   (command "_.UNDO" "E")
  80.   (setvar "PLINETYPE" HOLDPTYPE)
  81.   (setvar "OSMODE" HOLDOSMODE)
  82.   (setvar "CMDECHO" HOLDECHO)
  83.   (princ)
  84. )
 楼主| 发表于 2009-10-20 00:56 | 显示全部楼层

龙版主的程序太好了,正是想要的,修正了乱剪的现象了,增加了小缺口半径/凸出值/数量/角度的设置,可谓人性化多了!

程序中省略的(62 . 1)是什么,像素表里好像没这个.

程序能不能再追加记住上次的设定值,打开的新图默认A/B/C/D的值为程序目前的设定,如果用户进行了输入,需记住此次的值

如果要写出错功能要写是不是很难,比如用户选了很多圆,且不在同一屏幕下,无法知道程序运行后的最终效果,出错了可能用户无法知道,所选的圆与设定的值冲突,如直径为0.5的圆设置的缺圆的数量是8,那就无法生成了,

一种想法:如果将A/B/C/D这4项选好以后,如设置的值与所选的圆冲突,就出警示"所选圆与设置不匹配,N乎略,<Y继续>"此时的窗口缩放到当前问题圆下,等待用户给出回应.

出错程序可能很难,怎样让程序判断是否冲突,我也没办法判断所设的值是否冲突,只有结果出来了才知道不对,哈哈哈...我看这个出错还是不去写了,麻烦了!




本帖子中包含更多资源

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

x
 楼主| 发表于 2009-10-24 11:56 | 显示全部楼层
程序能不能再追加记住上次的设定值,打开的新图默认A/B/C/D的值为程序目前的设定,如果用户进行了输入,需记住此次的值
发表于 2009-10-24 16:59 | 显示全部楼层
  1. ;;(62 . 1)是顏色
  2. ;;LUCAS
  3. (defun SS_LAI (EN / SS)
  4.   (setq SS (ssadd))
  5.   (while (setq EN (entnext EN))
  6.     (if (not (member (cdr (assoc 0 (entget EN)))
  7.        '("ATTRIB" "VERTEX" "SEQEND")
  8.       )
  9. )
  10.       (ssadd EN SS)
  11.     )
  12.   )
  13.   SS
  14. )
  15. (defun C:TTTT_LAI (/   A  ANG B      C      D      D1
  16.      DZB   EN  EN1 ENT    HOLDECHO      HOLDOSMODE
  17.      HOLDPTYPE  I P1     SS     WW
  18.     )
  19.   (setq HOLDECHO (getvar "CMDECHO"))
  20.   (setq HOLDOSMODE (getvar "OSMODE"))
  21.   (setvar "CMDECHO" 0)
  22.   (setvar "OSMODE" 0)
  23.   (setq HOLDPTYPE (getvar "PLINETYPE"))
  24.   (setvar "PLINETYPE" 2)
  25.   (command "_.UNDO" "BE")
  26.   (if (null AA)
  27.     (setq AA 0.02
  28.    BB 0.2
  29.    CC 4
  30.    DD (/ pi 4)
  31.     )
  32.   )
  33.   (if (setq SS (ssget '((0 . "CIRCLE")
  34.    ;;(8 . "*_W")
  35.    ;;(62 . 1)
  36.    ;;(-4 . ">=")
  37.    ;;(40 . 0.24)
  38.          )
  39.         )
  40.       )
  41.     (progn
  42.       (if (= (setq A (getdist (strcat "\n凸出量<" (rtos AA) ">: ")))
  43.       NIL
  44.    )
  45. (setq A AA)
  46. (setq AA A)
  47.       )
  48.       (if
  49. (= (setq B (getdist (strcat "\n小缺口半徑<" (rtos BB) ">: ")))
  50.     NIL
  51. )
  52.   (setq B BB)
  53.   (setq BB B)
  54.       )
  55.       (if
  56. (= (setq C (getint (strcat "\n小缺口數量<" (rtos CC) ">: ")))
  57.     NIL
  58. )
  59.   (setq C CC)
  60.   (setq CC C)
  61.       )
  62.       (if
  63. (= (setq
  64.       D (getdist (strcat "\n小缺口起始角度<"
  65.     (rtos (/ (* DD 180) pi))
  66.     ">: "
  67.    )
  68.         )
  69.     )
  70.     NIL
  71. )
  72.   (setq D (/ (* DD 180) pi))
  73.   (setq DD (/ (* D pi) 180))
  74.       )
  75.       (setq I 0
  76.      ANG (/ (* 2 pi) C)
  77.       )
  78.       (repeat (sslength SS)
  79. (setq EN1 (entlast)
  80.        EN  (ssname SS I)
  81.        ENT (entget EN)
  82.        D1  (cdr (assoc 40 ENT))
  83.        DZB (cdr (assoc 10 ENT))
  84.        P1  (polar DZB D (- D1 (- B A)))
  85. )
  86. (command "_.CIRCLE" P1 B)
  87. (command "_.trim"
  88.    EN
  89.    ""
  90.    (list (entlast) (polar P1 (+ D pi) D1))
  91.    ""
  92. )
  93. (command "_.array" (entlast) "" "p" DZB C 360 "y")
  94. (setq WW (SS_LAI EN1))
  95. (repeat C
  96.    (command "_.trim"
  97.      WW
  98.      ""
  99.      (list EN (polar DZB (setq D (- D ANG)) D1))
  100.      ""
  101.    )
  102. )
  103. (command "_.pedit" "M" EN (SS_LAI EN1) "" "Y" "j" "0" "")
  104. (setq I (1+ I))
  105.       )
  106.     )
  107.   )
  108.   (command "_.UNDO" "E")
  109.   (setvar "PLINETYPE" HOLDPTYPE)
  110.   (setvar "OSMODE" HOLDOSMODE)
  111.   (setvar "CMDECHO" HOLDECHO)
  112.   (princ)
  113. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-17 16:15 , Processed in 0.427632 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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