明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: futuremh

[求助]求几个小程序,有的请帮忙帖上来。谢谢了。

  [复制链接]
 楼主| 发表于 2007-9-13 02:19 | 显示全部楼层

增量的我用了没反应

第二个无论怎么做它总是变成水平的.不能变成竖直的,还有他旋转时的旋转点不是直线的其中一端点

发表于 2007-9-13 08:21 | 显示全部楼层

增量的那个一定要保证这条直线的两个端点都在屏幕范围之内才有反应,这个我在注意中都说了,你没有注意吧。现在修改了一下,有一个放大的过程,如果你不喜欢可以去掉(command "zoom" "e" "")这句话。

第二个你还要竖直的话,就要一个选项了,我已经加上了。当需要你选择点的时候,一定要选择这条线的一个端点,就会以这条线旋转了。不要任选一点。如果你任选点的话,一定是以你选择的点为基点去转了

程序中红色为修改的地方,你可以跟原来程序对照一下,如有问题再联系

(defun c:jj()
(setq ent (car  (entsel "\n 请选择一条线:")))
(setq zen (getreal "\n 请输入增量:"))
(setq qidian (cdr (assoc 10 (entget ent))))
(setq duandian (cdr (assoc 11 (entget ent))))

(command "zoom" "e" "")
(command "lengthen" "de" zen  qidian duandian "")
(princ)
)

旋转角度的

(defun c:jj()
(setq old (getvar "osmode" ))
(setq ent (car  (entsel "\n 请选择一条线:")))

(setq du (getreal "\n 请输入角度:"))
(setq qidian (cdr (assoc 10 (entget ent))))
(setq duandian (cdr (assoc 11 (entget ent))))
(setvar "osmode" 1)
(command "rotate" ent "" pause "r"  qidian duandian du)
(setvar "osmode" old)
(princ)
)

 楼主| 发表于 2007-9-13 10:55 | 显示全部楼层
对于转角度的,为什么要输角度呢,可不可以自自己判断,大于45小于135就变90度 除此之外变180度
发表于 2007-9-13 12:17 | 显示全部楼层

这样的话,也需要定点的

如果起点终点不一样的话,角度是不一样的

发表于 2007-9-13 22:57 | 显示全部楼层

好像补圆的用不了

发表于 2007-9-19 22:37 | 显示全部楼层
本帖最后由 作者 于 2007-9-20 8:18:19 编辑

2。就是把斜线变成横平竖直的线。

(defun c:xyline ()
  (setq new-line (entget (car (entsel "\nSelect a line: "))))
  (setq p1 (cdr (assoc 10 new-line))
 p2 (cdr (assoc 11 new-line))
  )
  (setq p01 (list (max (nth 0 p1) (nth 0 p2))
    (min (nth 1 p1) (nth 1 p2))
     )
 p02 (list (min (nth 0 p1) (nth 0 p2))
    (min (nth 1 p1) (nth 1 p2))
     )
  )
  (if (> (* (- (nth 0 p1) (nth 0 p2)) (- (nth 1 p1) (nth 1 p2)))
  0
      )
    (command "line" p1 p01 p2 "")
    (command "line" p1 p02 p2 "")
  )
)

还有下面这个:

(defun c:x_y (/ new-line p1 p2 dtan p0 d01 sp ep key dx dy)
  (setq new-line (entget (car (entsel "\nSelect a line: "))))
  (setq p1 (cdr (assoc 10 new-line))
 p2 (cdr (assoc 11 new-line))
  )
  (setq p0 (getpoint "\nSelect rotate center:"))
  (setq sp ()
 ep ()
  )
  (if (< (- (distance p0 p1) (distance p0 p2)) 0)

    (setq sp  p1
   key p2
    )
    (setq sp  p2
   key p1
    )
  )
  (setq dx (* (/ (- (nth 0 key) (nth 0 sp))
   (abs (- (nth 0 key) (nth 0 sp)))
       )
       (distance p1 p2)
    )
 dy (* (/ (- (nth 1 key) (nth 1 sp))
   (abs (- (nth 1 key) (nth 1 sp)))
       )
       (distance p1 p2)
    )
  )
  (if (< (/ (abs (- (nth 1 p1) (nth 1 p2)))
     (abs (- (nth 0 p1) (nth 0 p2)))
  )
  1
      )
    (setq ep (list (+ (nth 0 sp) dx) (nth 1 sp)))
    (setq ep (list (nth 0 sp) (+ (nth 1 sp) dy)))
  )
  (command "line" sp ep "")
  (command "erase" (cdr (assoc -1 new-line)) "")
)

选择旋转中心时,靠近旋转端就可以了,不必是直线端点.

如果不删除原来的直线,把最后一句(command "erase" (cdr (assoc -1 new-line)) "")删除就可以了.

发表于 2007-9-19 22:47 | 显示全部楼层
第一个圆弧是arc呢还是包括弧形多段线呢?
发表于 2007-9-20 01:12 | 显示全部楼层
本帖最后由 作者 于 2007-9-20 1:13:11 编辑

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

本版积分规则

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

GMT+8, 2024-5-17 19:28 , Processed in 0.159128 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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