明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2519|回复: 10

请教这程序有那些问题 谢谢!!!

[复制链接]
发表于 2003-9-10 10:31:00 | 显示全部楼层 |阅读模式

本帖子中包含更多资源

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

x
发表于 2003-9-10 10:57:00 | 显示全部楼层
程序本身的问题就
(repeat n2 ...) 应该为(repeat (fix n2)...)
最后的erase选择对象后需要回车。

就功能上,不知你想干什么,一条从Q2到Q3的直线为什么要重复画那么多遍?
你是想将某一直线打散成某一长度的线段吗?
程序循环中注意n2是不会变化的,你必须自己设置一个变量来产生变化。
修改后如下:
  1. (defun c:mc()
  2. (setq l1 (entsel "请选择直线:"))
  3. (setq l1_data (entget (car l1)))
  4. (setq pts (assoc 10 l1_data))
  5. (setq p1 (cdr pts))
  6. (setq pte (assoc 11 l1_data))
  7. (setq p2 (cdr pte))
  8. (setq ang (angle p1 p2))
  9. (setq dd (distance p1 p2))
  10. (setq n1 (rem dd 2.4))
  11. (setq n2 (/ (- dd n1) 2.4))
  12. (setq p0 (polar p1 ang n1))
  13. (setq i n2)
  14. (repeat (fix n2)
  15.    (setq q1 (polar p0 ang (* 2.4 i)))
  16.    (setq q2 (polar p0 ang (- (* 2.4 i) 0.8)))
  17.    (setq q3 (polar p0 ang (- (* 2.4 i) 2.4)))
  18.    (command "line" q3 q2 "")
  19.    (setq i (1- i))
  20. )
  21. (command "line" p1 p0 "")
  22. (command "erase" l1 "")
  23. (princ)
  24. )
发表于 2003-9-10 11:16:00 | 显示全部楼层
(defun c:mc()
(setq l1 (entsel "请选择直线:"))
(setq l1_data (entget (car l1)))
(setq pts (assoc 10 l1_data))
(setq p1 (cdr pts))
(setq pte (assoc 11 l1_data))
(setq p2 (cdr pte))
(setq ang (angle p1 p2))
(setq dd (distance p1 p2))
(setq n1 (rem dd 2.4))
(setq n2 (/ (- dd n1) 2.4))
(setq p0 (polar p1 ang n1))
(setq n2 (rtos n2))
(setq n2 (atoi n2))
(repeat n2
   (setq q1 (polar p0 ang (* 2.4 n2)))
   (setq q2 (polar p0 ang (- (* 2.4 n2) 0.8)))
   (setq q3 (polar p0 ang (- (* 2.4 n2) 2.4)))
   (command "line" q3 q2 "")
   (setq n2 (1- n2))
)
(command "line" p1 p0 "")
(command "erase" (car l1) "")
(princ)
)
不知道程序的原意。现在不报错了。
 楼主| 发表于 2003-9-10 11:29:00 | 显示全部楼层
谢谢meflying!!! 但实行时说 INTERSECT 所选对象太多。

本帖子中包含更多资源

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

x
 楼主| 发表于 2003-9-10 11:33:00 | 显示全部楼层
将一条直线按1.6:0.8的比例,1.6长度画线,0.8不画,不能用线形来解决
发表于 2003-9-10 11:58:00 | 显示全部楼层
可以,如下:
*abc,Dash __ __ __ __
A,1.6,-.8

我不明白你为什么要写成1.6:0.8,既然是比例,2:1不也一样吗?
 楼主| 发表于 2003-9-10 13:16:00 | 显示全部楼层
我搞定了,


(defun c:zmc(/ ss nn l1 l1_data pts p1 pte p2 ang dd n1 n2 po q1 n q2 q3)
(setq ocmde (getvar "cmdecho"))
(setq oblip (getvar "blipmode"))
(setq oosmode (getvar "osmode"))
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setvar "osmode" 0)
(setq ss (ssget '((0 . "LINE"))))
(setq nn 0)
(repeat (sslength ss)
(setq l1 (ssname ss nn))
(setq l1_data (entget l1))
(setq pts (assoc 10 l1_data))
(setq p1 (cdr pts))
(setq pte (assoc 11 l1_data))
(setq p2 (cdr pte))
(setq ang (angle p1 p2))
(setq dd (distance p1 p2))
(setq n1 (rem dd 2.4))
(setq n2 (fix (/ dd 2.4)))
(setq p0 (polar p1 ang n1))
(setq q1 (polar p0 ang n1))
(setq n 1)
(repeat n2
(setq q2 (polar p0 ang (- (* n 2.4) 1.6)))
(setq q3 (polar p0 ang (* n 2.4)))
(command "line" q2 q3 "")
(setq n (1+ n))
)
(command "line" p1 p0 "")
(command "erase" l1 "")
(setq nn (1+ nn))
)
(setq ss nil)
(setvar "blipmode" oblip)
(setvar "cmdecho" ocmde)
(setvar "osmode" oosmode)
(princ)
)
发表于 2003-9-10 13:39:00 | 显示全部楼层
为什么要修改blipmode?好象用不上啊
 楼主| 发表于 2003-9-10 15:20:00 | 显示全部楼层
类似的情况,换为椭圆怎样计算
发表于 2003-9-10 15:41:00 | 显示全部楼层
用measure,
不过如果将其断为一段一段的,比较麻烦,如果是一段有,一段空的,就比较方便了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-26 22:33 , Processed in 0.184647 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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