明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 22271|回复: 70

[函数] [已解决]请高手帮忙做个简单的等分工具

  [复制链接]
发表于 2011-6-20 17:33:58 | 显示全部楼层 |阅读模式
本帖最后由 raimo 于 2011-6-25 00:28 编辑

经常需要用到线段等分,每次都是算来算去的.如果有这样的工具就好了
因为我不会弄,只能提出想法,所以只能请高手帮帮手拉.感谢为先!

如图所示..我考虑程序的大致思路是
1.选择绿色的两条平行线,确定距离(这里也可以从白色线入手确定起始距离,然后选择绿色线确定长度)
2.指定间距,图中红色线段的间距
3.指定等分数量,比如图中就是等分6段
4.最后得到如图的效果..



本帖子中包含更多资源

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

x
发表于 2011-6-24 02:18:43 | 显示全部楼层
本帖最后由 zhynt 于 2011-6-24 02:41 编辑

更新内容:
1、修改了几处错误。
2、修改了文件读取方式(文件对话框直接到文件所在目录)。
3、修改了数据格式。
4、增加顺时针分弧和逆时针分弧功能,对应的命令是huz和huf。

本帖子中包含更多资源

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

x

评分

参与人数 2金钱 +40 收起 理由
T_T + 20
1078815748 + 20 已完美解决问题,,,zhynt 你太好人了....

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2011-6-20 20:33:14 | 显示全部楼层
是不是这样的效果?

本帖子中包含更多资源

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

x

点评

兄弟,你这个插件是什么插件?能否传到论坛里与大伙分享下??  发表于 2019-12-1 15:53

评分

参与人数 1金钱 +5 收起 理由
raimo + 5 不是我想要的.不过看起来功能很强大哦

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2020-3-25 13:03:10 | 显示全部楼层
198526 发表于 2011-6-20 19:22
粗略的写了下
(defun c:tt ()
(setq PL1 (entsel "\n请选取第一条直线:")

如果能在范围内等分就好了
发表于 2011-6-20 17:40:49 | 显示全部楼层
你外面两条绿线和两条白线都是已知的吗?
如果说长度不是刚好等分要怎么处理?
 楼主| 发表于 2011-6-20 18:18:00 | 显示全部楼层
198526 发表于 2011-6-20 17:40
你外面两条绿线和两条白线都是已知的吗?
如果说长度不是刚好等分要怎么处理?

范围肯定是已知的..
都说是等分啦,没有限制等分长度的情况下,怎么会出现不是刚好等分的情况...
发表于 2011-6-20 18:28:21 | 显示全部楼层
这个不难,只是一系列点的计算。
发表于 2011-6-20 19:13:08 | 显示全部楼层
我也不会,参照论坛那个三等份改了一个
(defun c:Test ()
(setq num (getint "/n数量:" ))
(setq ss (ssget '((0 . "LINE"))))
     (setq ee1 (ssname ss 0)
           ee2 (ssname ss 1)
            pa (cdr (assoc 10 (entget ee1)))
            pb (cdr (assoc 11 (entget ee1)))
            pc (cdr (assoc 10 (entget ee2)))
            pd (cdr (assoc 11 (entget ee2)))
            px (inters pa pb pc pd T)
     )
     (if px
       (setq px pc pc pd pd px)
     )
     (setq dd1 (/ (distance pa pc) num)
           dd2 (/ (distance pb pd) num)
           vv1 (angle pa pc)
           vv2 (angle pb pd)
            pe (polar pa vv1 dd1)
            pf (polar pb vv2 dd2)
     )
     (command "Line" "none" pe "none" pf "")
(repeat (- num 1)
(setq pg (polar pe vv1 dd1)
      ph (polar pf vv2 dd2)
      pe pg
      pf ph
)
(command "Line" "none" pe "none" pf "")
)
(princ)
)

评分

参与人数 1金钱 +10 收起 理由
raimo + 10 谢谢你的帮助

查看全部评分

发表于 2011-6-20 19:22:55 | 显示全部楼层
粗略的写了下
(defun c:tt ()
(setq PL1 (entsel "\n请选取第一条直线:")
       PL2 (entsel "\n请选取第二条直线:")
       j-j (GETREAL "\n请指定间距:")
       OFW (GETINT "\n指定等分数量:")
       n 1)
  (if (< j-j 0)(progn(princ "指定间距小于0,按0计算")(setq j-j 0)))
  (if (< OFW 2)(progn(princ "指定等分数量小于2,按2计算")(setq OFW 2)))
  (Setq pl1p1 (cdr (assoc 10 (entget (car pl1))))
        pl1p2 (cdr (assoc 11 (entget (car pl1))))
        pl2p1 (cdr (assoc 10 (entget (car pl2))))
        pl2p2 (cdr (assoc 11 (entget (car pl2))))
        )
  (if (< (DISTANCE pl1p1 pl2p1) (DISTANCE pl1p1 pl2p2))
    (setq jl (DISTANCE pl1p1 pl2p1)
          jd (ANGLE pl1p1 pl2p1))
    (setq jl (DISTANCE pl1p1 pl2p2)
          jd (ANGLE pl1p1 pl2p2))
    )
  (while (< n ofw)
    (entmake (list '(0 . "line")'(62 . 1)(cons 10 (polar pl1p1 jd (- (* n (/ jl ofw)) (/ j-j 2.))))(cons 11 (polar pl1p2 jd (- (* n (/ jl ofw)) (/ j-j 2.))))) )
    (if (/= j-j 0)
      (entmake (list '(0 . "line")'(62 . 1)(cons 10 (polar pl1p1 jd (+ (* n (/ jl ofw)) (/ j-j 2.))))(cons 11 (polar pl1p2 jd (+ (* n (/ jl ofw)) (/ j-j 2.))))) )
      )
    (setq n (+ 1 n))
    )
  )

评分

参与人数 1金钱 +10 收起 理由
raimo + 10 谢谢你的帮助

查看全部评分

发表于 2011-6-20 20:30:12 | 显示全部楼层
6#计算有点错误

  1. (defun c:tt ()
  2.   (setq        PL1 (entsel "\n请选取第一条直线:")
  3.         PL2 (entsel "\n请选取第二条直线:")
  4.         j-j (GETREAL "\n请指定间距:")
  5.         OFW (GETINT "\n指定等分数量:")
  6.         n   1
  7.   )
  8.   (if (< j-j 0)
  9.     (progn (princ "指定间距小于0,按0计算") (setq j-j 0))
  10.   )
  11.   (if (< OFW 2)
  12.     (progn (princ "指定等分数量小于2,按2计算") (setq OFW 2))
  13.   )
  14.   (Setq        pl1p1 (cdr (assoc 10 (entget (car pl1))))
  15.         pl1p2 (cdr (assoc 11 (entget (car pl1))))
  16.         pl2p1 (cdr (assoc 10 (entget (car pl2))))
  17.         pl2p2 (cdr (assoc 11 (entget (car pl2))))
  18.   )
  19.   (if (< (DISTANCE pl1p1 pl2p1) (DISTANCE pl1p1 pl2p2))
  20.     (setq jl (DISTANCE pl1p1 pl2p1)
  21.           jd (ANGLE pl1p1 pl2p1)
  22.     )
  23.     (setq jl (DISTANCE pl1p1 pl2p2)
  24.           jd (ANGLE pl1p1 pl2p2)
  25.     )
  26.   )
  27.   (setq dis(/ (- jl (* j-j (1- OFW))) OFW))
  28.   (while (< n ofw)
  29.     (entmake
  30.       (list '(0 . "line")
  31.             '(62 . 1)
  32.             (cons 10 (polar pl1p1 jd (+ (* dis n) (* j-j (1- n)))))
  33.             (cons 11 (polar pl1p2 jd (+ (* dis n) (* j-j (1- n)))))
  34.       )
  35.     )
  36.     (if        (/= j-j 0)
  37.       (entmake
  38.         (list '(0 . "line")
  39.               '(62 . 1)
  40.               (cons 10 (polar pl1p1 jd (+ (* dis n) (* j-j n))))
  41.               (cons 11 (polar pl1p2 jd (+ (* dis n) (* j-j n))))
  42.         )
  43.       )
  44.     )
  45.     (setq n (+ 1 n))
  46.   )
  47. )

评分

参与人数 1金钱 +20 收起 理由
raimo + 20 好程序,谢谢你的帮助

查看全部评分

发表于 2011-6-20 21:05:55 | 显示全部楼层
本帖最后由 zhynt 于 2011-6-21 00:44 编辑

也来凑个热闹(改了一下)
修改了一下,相对完美了一些。

本帖子中包含更多资源

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

x

点评

这个程序能加个框选和点选,再确定方向,然后加个增加和减少就更完美  发表于 2020-12-17 12:11

评分

参与人数 1金钱 +20 收起 理由
raimo + 20 好程序,谢谢你的帮助

查看全部评分

 楼主| 发表于 2011-6-21 05:16:20 | 显示全部楼层
首先感谢大家热心的帮助!!!

5楼的没有判断部分,选择操作容易出错
6楼的计算有点问题
7楼的好用,是按照第一种选择方式来做的..从使用方便的角度更直观一些
8楼的功能看挺强大的,但不是我想要的效果,而且只能算重新绘制,不是等分
9楼的也好用,程式上看更严谨清晰,是按照第二种选择方式来做的..我个人更喜欢这种选择方式..


楼上的每一位都深表感谢啦!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-3-11 15:46 , Processed in 0.286865 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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