明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2454|回复: 21

一次偏移多条线的代码可以简化吗 最好能列表输入数值

[复制链接]
发表于 2020-8-28 13:59 | 显示全部楼层 |阅读模式
5明经币
本帖最后由 xmq1103 于 2020-9-2 15:14 编辑

(defun c:TT()  
  (setq l(entsel"请选择偏移的基线:"))
  (setq p (getpoint "点取偏移方向:"))
     (setq a 2)
         (command "offset" a l p "")
     (setq b(+ a 16))
        (command "offset"  b l p "")        
     (setq c(+ b 2))
        (command "offset"  c l p "")                 
     (setq d(+ c 12))
        (command "offset"  d l p "")        
  )

自己写的上面的代码,如果好几条线,这样输感觉定量有点乱,能不能直接把一个数字集一起偏移呀,类似于下面的方式:
(defun c:TT()  
  (setq l(entsel"请选择偏移的基线:"))
  (setq p (getpoint "点取偏移方向:"))
     (setq aa(2 16 2 12 )) :这样直接输入一排数
(command "offset"  aa  l  p "")        )
这个代码是不对的哦,就想找一种可以实现的编码方式,求大神不吝赐教,谢过了!!



最完美的函数在16楼!!!!!!!!


最佳答案

查看完整内容

了解下子函数应用,写码会省事很多 (defun c:tt5(/ l lst p) (setq l(entsel"请选择偏移的基线:")) (setq p (getpoint "点取偏移方向:")) (setq lst '(2 16 2 12)) (pianyi l p lst) (princ) ) (defun pianyi (ent pt lst / d);间隔数值列表偏移子函数 (setq d 0) (foreach x lst (setq d (+ d x)) (command "offset" d ent pt "") ) )
发表于 2020-8-28 13:59 | 显示全部楼层
了解下子函数应用,写码会省事很多

(defun c:tt5(/ l lst p)  
  (setq l(entsel"请选择偏移的基线:"))
  (setq p (getpoint "点取偏移方向:"))
  (setq lst '(2 16 2 12))           
        (pianyi l p lst)
        (princ)       
  )

(defun pianyi (ent pt lst / d);间隔数值列表偏移子函数
        (setq d 0)
        (foreach x lst
        (setq d (+ d x))
        (command "offset" d ent pt "")
        )       
)
回复

使用道具 举报

 楼主| 发表于 2020-8-28 14:48 | 显示全部楼层
代码特定情况特定数值的时候使用,一组数值在代码里面改就可以的
回复

使用道具 举报

 楼主| 发表于 2020-8-28 15:40 | 显示全部楼层
start4444 发表于 2020-8-28 14:59
了解下子函数应用,写码会省事很多

(defun c:tt5(/ l lst p)  

谢谢,谢谢,就是这个意思,学习啦。
回复

使用道具 举报

发表于 2020-8-29 02:39 | 显示全部楼层
谢谢大神们的教导   学习了  
回复

使用道具 举报

 楼主| 发表于 2020-9-1 18:11 | 显示全部楼层
start4444 发表于 2020-8-28 13:59
了解下子函数应用,写码会省事很多

(defun c:tt5(/ l lst p)  

您好,请问能实现往两个方向偏移吗,正向用正数,反向用负数
例如:
(defun c:tt5(/ l lst p)  
  (setq l(entsel"请选择偏移的基线:"))
  (setq p (getpoint "点取偏移方向:"))
  (setq lst '(5 10 15 -5 -10 -15))         ;我尝试这样输,程序不能执行呢,麻烦您给想个法吧,谢谢了!  
        (pianyi l p lst)
        (princ)      
  )

(defun pianyi (ent pt lst / d);间隔数值列表偏移子函数
        (setq d 0)
        (foreach x lst
        (setq d (+ d x))
        (command "offset" d ent pt "")
        )      
)

回复

使用道具 举报

发表于 2020-9-1 22:14 | 显示全部楼层
能不能做成函数?
回复

使用道具 举报

发表于 2020-9-2 10:06 | 显示全部楼层
xmq1103 发表于 2020-9-1 18:11
您好,请问能实现往两个方向偏移吗,正向用正数,反向用负数
例如:

给你个双向自定义函数,列表不用写负数,还是原来的就行

(defun pianyi-2 (ent pt lst / d);间隔数值列表双向偏移子函数
  (vl-load-com)
        (setq d 0)
        (setq obj (vlax-ename->vla-object (car ent)))
        (foreach x lst
        (setq d (+ d x))                               
        (vla-Offset obj d)
        (vla-Offset obj (* -1 d))       
        )       
)
回复

使用道具 举报

 楼主| 发表于 2020-9-2 10:18 | 显示全部楼层
本帖最后由 xmq1103 于 2020-9-2 10:19 编辑
start4444 发表于 2020-9-2 10:06
给你个双向自定义函数,列表不用写负数,还是原来的就行

(defun pianyi-2 (ent pt lst / d);间隔数值 ...

不好意思,抱歉抱歉,表达的不够全面,写的那个例子太特殊了,正好对称,如果是处理不对称的情况呢。
例如:
(setq lst '(5 10 15 -2 -7 -20))  
回复

使用道具 举报

发表于 2020-9-2 10:29 | 显示全部楼层
xmq1103 发表于 2020-9-2 10:18
不好意思,抱歉抱歉,表达的不够全面,写的那个例子太特殊了,正好对称,如果是处理不对称的情况呢。
例 ...

不对称的双向偏移是比较麻烦的事情,建议你选取两点重复两次单向偏移,这样代码就简单很多了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 21:19 , Processed in 0.775490 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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