明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7068|回复: 28

[基础] [求助]很长时间没碰程序,帮忙看下。

    [复制链接]
发表于 2010-5-6 17:04:00 | 显示全部楼层 |阅读模式

(defun c:zxx
      (/ ss en os oldlayer endata y_endata pt10 pt11 p10 p11 ptx
       pt k pt_y)
  (setq os (getvar "osmode"))
  (setq oldlayer (getvar "CLAYER"))
  (command "_.undo" "be")
  (setvar "clayer" "中心线")
  (prompt "选取投影圆和投影中心线位置")
  (prompt "选取投影圆:")
  (setq ss (ssget '((0 . "CIRCLE"))))
  (prompt "选取投影中心线第一条边线:")
  (setq en (nentsel))
  (setq pt     (osnap (cadr en) "nea")
 endata
        (entget (car en))
  )
  (setq pt10
      (cdr (assoc 10 endata))
 pt11
      (cdr (assoc 11 endata))
  )
  (setvar "osmode" 128)
  (setq ptf (getpoint pt "\n投影中心线第二条边线:"))
  (setq ang1 (angle ptf pt))
  (setq ang2 (angle pt ptf))
  (setq dis (distance pt ptf))
  (setq k 0)
  (repeat (sslength ss)
    (setq y_endata (entget (ssname ss k)))
    (setq pt_y
    (cdr (assoc 10 y_endata))
    )
    (setq ptx (inters pt_y
        (polar pt_y ang2 5.0)
        pt10
        pt11
        t
       )
    )
    (setq p10 (polar ptx ang1 3.0))
    (setq p11 (polar ptx ang2 (+ 3.0 dis)))
    (setvar "osmode" 0)
    (command "line" p10 p11 "")
    (setq k (1+ k))
  )
  (command "_.undo" "e")
  (setvar "osmode" os)
  (setvar "clayer" oldlayer)
  (princ)
)


(princ "**zxx**")
在p10 处出错了,!endata时,返回nil

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2010-5-6 19:43:00 | 显示全部楼层
两平行线无交点(inters pt_y (polar pt_y ang2 5.0) pt10 pt11 T)
 楼主| 发表于 2010-5-6 22:53:00 | 显示全部楼层

二楼版主,是正交线,如何变成平行了?

ptx是有值的,我再查查,最早是可以画线的。

 楼主| 发表于 2010-5-7 21:38:00 | 显示全部楼层
昏,没找出错处。
 楼主| 发表于 2010-5-10 23:45:00 | 显示全部楼层
再来提提这个问题
发表于 2010-5-11 20:18:00 | 显示全部楼层
因(setvar "osmode" 128)捕捉的是垂直点,所以直线(pt,ptf)与直线(pt10,pt11)平行。
因为不明白楼主到底原来的目的是什么,所以没法改程序。最好给个示意图。
 楼主| 发表于 2010-5-11 21:13:00 | 显示全部楼层
ZZXXQQ发表于2010-5-11 20:18:00因(setvar \"osmode\" 128)捕捉的是垂直点,所以直线(pt,ptf)与直线(pt10,pt11)平行。因为不明白楼主到底原来的目的是什么,所以没法改程序。最好给个示意图。

刚才,抽了点时间修改,现在对水平和垂直线可行,对任意平行线,还没做到。

(defun c:zxx (/      os     oldlayer   ss  en pt     endata
       pt10   pt11   ang    dist   k  y_endata      pt_y
       pt_yy  p10    p11    ptx
      )
  (setq os (getvar "osmode"))
  (setq oldlayer (getvar "CLAYER"))
  (command "_.undo" "be")
  (setvar "clayer" "中心线")
  (prompt "\选取投影圆:")
  (setq ss (ssget '((0 . "CIRCLE"))))
  (prompt "选取投影中心线第一条边线:")
  (setq en (nentsel))
  (setq pt     (osnap (cadr en) "nea")
 endata
        (entget (car en))
  )
  (setq pt10
      (cdr (assoc 10 endata))
 pt11
      (cdr (assoc 11 endata))
  )
  (cond
    ((or (= pi (abs (angle pt10 pt11)))
  (= 0.0 (abs (angle pt10 pt11)))
     )
     (setq ang (* 0.5 pi))
    )
    ((or (= (* 0.5 pi) (abs (angle pt10 pt11)))
  (= (* 1.5 pi) (abs (angle pt10 pt11)))
     )
     (setq ang 0.0)
    )
  )
  (setvar "osmode" 128)
  (setq dist (getdist pt "\n投影中心线第二条边线:"))
  (setvar "osmode" 0)
  (setq k 0)
  (repeat (sslength ss)
    (setq y_endata (entget (ssname ss k)))
    (setq pt_y
  (cdr (assoc 10 y_endata))
   pt_yy (polar pt_y ang 5.0)
    )
    (setq ptx (inters pt_y pt_yy pt10 pt11 nil)
    )
    (setq p10 ptx)
    (setq p11 (polar ptx ang dist))
    (setq p10 (polar p10 (angle p11 p10) 3)
   p11 (polar p11 (angle p10 p11) 3)
    )
    (setvar "osmode" 0)
    (command "line" p10 p11 "")
    (setq k (1+ k))
  )
  (command "_.undo" "e")
  (setvar "osmode" os)
  (setvar "clayer" oldlayer)
  (princ)
)


(princ "**zxx**")

已知,圆、一组平行线,画出圆之圆心,在平行线上的对应的线,线两端超出平行线距离3。

见图,如能改成不限水平和垂直线,就完善了。

本帖子中包含更多资源

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

x
 楼主| 发表于 2010-5-11 21:20:00 | 显示全部楼层

从PROE转DWG图,用来补中心线,这个程序还是很好用的。

当选直线时,再加入出错处理,防止没选到线,就更好。

 楼主| 发表于 2010-5-11 23:06:00 | 显示全部楼层
选直线时,现在只能先选近圆端线,否则中心线不在平行线之间。
发表于 2010-5-12 13:24:00 | 显示全部楼层
本帖最后由 作者 于 2010-5-12 19:13:04 编辑

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-2-22 02:23 , Processed in 0.221138 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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