明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 9447|回复: 79

【求助】请大侠门来编一个这样的程序!

  [复制链接]
发表于 2011-6-25 11:28:00 | 显示全部楼层 |阅读模式
本帖最后由 daidong013 于 2011-6-25 12:10 编辑

请大侠门编一个这样的程序!

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2011-6-25 11:32:47 | 显示全部楼层
本帖最后由 zhynt 于 2011-6-25 11:33 编辑

看不到图!!!
 楼主| 发表于 2011-6-25 12:11:52 | 显示全部楼层
回复 zhynt 的帖子

初次发图没发上去不好意思!~呵呵!~~
发表于 2011-6-25 12:18:15 | 显示全部楼层
 楼主| 发表于 2011-6-25 12:26:19 | 显示全部楼层
回复 zhynt 的帖子

九楼这个只是简单的等分工具,没有生成交叉的X线,希望大侠可以编一个!~~期待中!~
发表于 2011-6-25 13:16:23 | 显示全部楼层
本帖最后由 ljpnb 于 2011-6-25 14:37 编辑

简单版的:



  1. (defun c:test (/ p1 p2 p3 p4 n os dx dy xlst ylst l p5 p6 ent1 ent2 ent3)
  2.   (setq p1 (getpoint "\n方框第一个角:"))
  3.   (setq p2 (getcorner p1 ":\n方框另一个角:"))
  4.   (setq n (getint ":\n输入等分数:"))
  5.   (setq os (getvar "osmode"))
  6.   (setvar "osmode" 0)
  7.   (setvar "cmdecho" 0)
  8.   (command "undo" "g")
  9.   (setq xlst (vl-sort (list (car p1) (car p2)) '<))
  10.   (setq ylst (vl-sort (list (cadr p1) (cadr p2)) '<))
  11.   (setq dx (- (nth 1 xlst) (nth 0 xlst)))
  12.   (setq dy (- (nth 1 ylst) (nth 0 ylst)))
  13.   (if (> dx dy)
  14.     (progn
  15.       (setq p1 (list (nth 1 xlst) (nth 0 ylst))
  16.      ;;右下角
  17.      p2
  18.         (polar p1 pi dx)
  19.      ;;左下角
  20.      p3
  21.         (polar p2 (* pi 0.5) dy)
  22.      ;;左上角
  23.      p4
  24.         (polar p1 (* pi 0.5) dy)
  25.         ;;右上角
  26.       )
  27.       (setq l dx)
  28.     )
  29.     (progn
  30.       (setq p1 (list (nth 1 xlst) (nth 1 ylst))
  31.      ;;右上角
  32.      p2
  33.         (polar p1 (* pi 1.5) dy)
  34.      ;;右下角
  35.      p3
  36.         (polar p2 pi dx)
  37.      ;;左下角
  38.      p4
  39.         (polar p1 pi dx)
  40.         ;;左上角
  41.       )
  42.       (setq l dy)
  43.     )
  44.   )
  45.   (setq p5 (polar p2 (angle p2 p1) (/ l n)))
  46.   (setq p6 (polar p3 (angle p2 p1) (/ l n)))
  47. ;;;(command "line" p1 p2 p3 p4 "")
  48.   (command "line" p2 p6 "")
  49.   (setq ent1 (entlast))
  50.   (command "line" p6 p5 "")
  51.   (setq ent2 (entlast))
  52.   (command "line" p5 p3 "")
  53.   (setq ent3 (entlast))
  54.   (if (> dx dy)
  55.     (progn
  56.       (command "-array" ent1 ent3 "" "r" 1 n (/ dx n))
  57.       (command "-array" ent2 "" "r" 1 (1- n) (/ dx n))
  58.     )
  59.     (progn
  60.       (command "-array" ent1 ent3 "" "r" n 1 (/ dy n))
  61.       (command "-array" ent2 "" "r" (1- n) 1 (/ dy n))
  62.     )
  63.   )
  64.   (command "undo" "e")
  65.   (setvar "osmode" os)
  66.   (setvar "cmdecho" 1)
  67.   (princ)
  68. )
发表于 2011-6-25 13:29:21 | 显示全部楼层
游客,本帖隐藏的内容需要发帖数高于 5 才可浏览,你当前发帖数只有 0
 楼主| 发表于 2011-6-25 13:52:06 | 显示全部楼层
本帖最后由 daidong013 于 2011-6-25 14:01 编辑

回复 ljpnb 的帖子

不错不错!~非常感谢大侠!~建议简单版的在完成后可以把四边的线去掉!~~
这样就不会有重线的问题了!~~
希望大侠还可以做个升级版的,这样如果是进缩20mm的话四边的线就可以保留了!~~~
 楼主| 发表于 2011-6-25 13:59:18 | 显示全部楼层
回复 ZZXXQQ 的帖子

非常感谢大侠!~~画完后感觉还是6楼的好用些,因为四面的线都是段开的!~~
针对于简单版的最好是矩形的四面都不要线。
发表于 2011-6-25 14:38:08 | 显示全部楼层
本帖最后由 zhynt 于 2011-6-25 14:39 编辑
  1. ;;升级版的:
  2. (defun err (s)
  3.   (if (and
  4.         (/= s "console break")
  5.         (/= s "Function cancelled")
  6.         (/= s "quit/exit abort")
  7.       )
  8.     (progn
  9.       (setvar "LUPREC" oldlup)
  10.       (setvar "LUNITS" oldlun)
  11.       (setvar "osmode" oldos)
  12.       (setvar "cmdecho" oldcmd)
  13.       (setvar "clayer" oldlay)
  14.       (setq *error* olderr)
  15.       (princ (strcat "\n程序出错或用户退出:" s))
  16.     )
  17.   )
  18. )
  19. (defun c:ldf (/                wk_pt1          wk_pt2    wk_pt3    wk_pt4
  20.               nk_pt1        nk_pt2          nk_pt3    nk_pt4    olds
  21.               oldcmd        oldlup          oldlay    nk_n      nk_kd
  22.               ptax        ptay          ptaz            ptbx      ptby
  23.               ptbz        l_pt1_pt4 l_pt2_pt3 l_n              ang_pt1_pt4
  24.              )
  25.   (setq oldos (getvar "osmode"))
  26.   (if (< oldos 16384)
  27.     (setvar "osmode" (+ oldos 16384))
  28.   )
  29.   (setq        oldcmd        (getvar "cmdecho")
  30.         oldlun        (getvar "LUNITS")
  31.         oldlup        (getvar "LUPREC")
  32.         olderr        *error*
  33.         *error*        err
  34.         oldlay        (getvar "clayer")
  35.   )
  36.   (setvar "cmdecho" 0)
  37.   (setvar "LUPREC" 8)
  38.   (setvar "LUNITS" 2)
  39.   (if (= (TBLOBJNAME "LAYER" "wk_line") nil)
  40.     (command "layer" "m" "wk_line" "c" "2" "" "")
  41.   )
  42.   (if (= (TBLOBJNAME "LAYER" "nk_line") nil)
  43.     (command "layer" "m" "nk_line" "c" "1" "" "")
  44.   )
  45.   (setvar "clayer" "wk_line")
  46.   (setq        wk_pt1 (getpoint "\n指定第一角点")
  47.         wk_pt3 (getcorner wk_pt1 "\n指定第二角点:")
  48.         nk_n   (getint "\n请输入大于零的等分数:")
  49.         wk_kd  (getreal "\n输入边框宽度<20mm>:")
  50.   )
  51.   (if (= wk_kd nil)
  52.     (setq wk_kd 20.0)
  53.   )
  54.   (setq        ptax (car wk_pt1)
  55.         ptay (cadr wk_pt1)
  56.         ptbx (car wk_pt3)
  57.         ptby (cadr wk_pt3)
  58.   )
  59.   (setq        wk_pt2 (list ptax ptby)
  60.         wk_pt4 (list ptbx ptay)
  61.   )
  62.   (setq        nk_pt1
  63.          (polar        wk_pt1
  64.                 (/ (- (angle wk_pt1 wk_pt2) (angle wk_pt1 wk_pt4)) 2.0)
  65.                 (* wk_kd (* 2 (sqrt 2)))
  66.          )
  67.   )
  68.   (setq        nk_pt3
  69.          (polar        wk_pt3
  70.                 (+ (/ (- (angle wk_pt3 wk_pt2) (angle wk_pt3 wk_pt4)) 2.0)
  71.                    (/ (* pi 3.0) 2.0)
  72.                 )
  73.                 (* wk_kd (* 2 (sqrt 2)))
  74.          )
  75.   )
  76.   (setq        ptax (car nk_pt1)
  77.         ptay (cadr nk_pt1)
  78.         ptbx (car nk_pt3)
  79.         ptby (cadr nk_pt3)
  80.   )
  81.   (setq        nk_pt2 (list ptax ptby)
  82.         nk_pt4 (list ptbx ptay)
  83.   )
  84.   (setq        l_pt1_pt4   (distance nk_pt1 nk_pt4)
  85.         l_pt1_pt2   (distance nk_pt1 nk_pt2)
  86.         ang_pt1_pt4 (angle nk_pt1 nk_pt4)
  87.         l_n            (/ l_pt1_pt4 nk_n)
  88.   )
  89.   (command "_.rectang" wk_pt1 wk_pt3)
  90.   (setvar "clayer" "nk_line")
  91.   (command "_.rectang" nk_pt1 nk_pt3)
  92.   (setq        n_pt1 nk_pt1
  93.         n_pt2 nk_pt2
  94.   )
  95.   (repeat (- nk_n 1)
  96.     (setq n_pt3        (polar n_pt1 ang_pt1_pt4 l_n)
  97.           n_pt4        (polar n_pt3 (+ ang_pt1_pt4 (/ pi 2.0)) l_pt1_pt2)
  98.     )
  99.     (command "_.line" n_pt1 n_pt4 n_pt3 n_pt2 "")
  100.     (setq n_pt1        n_pt3
  101.           n_pt2        n_pt4
  102.     )
  103.   )
  104.   (command "_.line" n_pt1 nk_pt3 "")
  105.   (command "_.line" nk_pt4 n_pt2 "")
  106.   (setvar "osmode" oldos)
  107.   (setvar "cmdecho" oldcmd)
  108.   (setvar "clayer" oldlay)
  109.   (setvar "LUPREC" oldlup)
  110.   (setvar "LUNITS" oldlun)
  111.   (princ)
  112. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-28 01:37 , Processed in 0.187873 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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