找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: xtdwynij

[求助] 表循环生成图元

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-5-21 22:55:49 | 显示全部楼层
xtdwynij 发表于 2013-5-21 22:36
(defun c:tt ()
  (setq pt1 (getpoint "\n111:"))
  (setq xpt1 (car pt1))

你还是没有说清要画什么形,下面是按你的程序修改的
[pcode=lisp,true]
(defun c:tt (/ mkln p1 p2 p3 p4) ;_ 变量一定要回收
  ;;(setq pt1 (getpoint "\n111:"))
  ;;(setq xpt1 (car pt1))
  ;;(setq ypt1 (cadr pt1))
  ;;(setq aa (list (list xpt1 ypt1) (list (+ xpt1 6) (+ ypt1 8)))) ;_创建起点
  (defun mkln (sp ep) ;_经常用的做成子函数
    (entmake (list '(0 . "Line")
                   '(100 . "AcDEntity")
                   '(100 . "AcDbLine")
                   (cons 10 sp)
                   (cons 11 ep)
             )
    )
  )
  (while (setq p1 (getpoint "\nPoint: ")) ;_如果有拾取动作才执行下面代码,避免出错,while 循环
    (progn
      ;;(setq bb (list (list (+ xpt1 3) ypt1) (list (+ xpt1 15) (+ ypt1 12)))) ;_创建终点
      (setq p2 (mapcar '+ p1 '(6. 8. 0.))
            p3 (mapcar '+ p1 '(3. 0. 0.))
            p4 (mapcar '+ p1 '(15. 12. 0.))
      )
      ;|(setq i        0    new      ()    )
      (repeat (length aa)
        (setq new (entmake (append (list (cons 0 "LINE")))
                           (append '(10) (nth 0 aa))
                           (append '(11) (nth 0 bb))
                  )
        ) ;_提取起点和终点并合表
        (setq i (1+ i))
      )
      (mapcar '(lambda (x y) (mkln x y))
              (list p1  p3)
              (list p2  p4)
      )|;
      (mkln p1 p2)
      (mkln p3 p4)
    )
  )
  (princ) ;_抑制回显
)
[/pcode]
[pcode=lisp,true]
(defun c:tt (/ mkln p1 p2 p3 p4)
  (defun mkln (sp ep)
    (entmake (list '(0 . "Line")
                    '(100 . "AcDEntity")
                    '(100 . "AcDbLine")
                    (cons 10 sp)
                    (cons 11 ep)
      )
    )
  )
  (while (setq p1 (getpoint "\nPoint: "))
    (setq p2 (mapcar '+ p1 '(6. 8. 0.))
          p3 (mapcar '+ p1 '(3. 0. 0.))
          p4 (mapcar '+ p1 '(15. 12. 0.))
    )
    (mkln p1 p2)
    (mkln p3 p4)
  )
  (princ)
)[/pcode]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

已领礼包: 10242个

财富等级: 富甲天下

发表于 2013-5-21 22:56:27 | 显示全部楼层
本帖最后由 zxq0220 于 2013-5-22 08:09 编辑
  1. (defun c:tt ()
  2. (setq pt1 (getpoint "\n111:"))
  3. (setq aa (list (mapcar '+ pt1 '(0 0)) (mapcar '+ pt1 '(6 8)))) ; 创建起点
  4. (setq bb (list (mapcar '+ pt1 (list 3 0)) (mapcar '+ pt1 '(15 12)))) ; 创建终点
  5. (setq i 0)
  6. (repeat (length aa)
  7.   (entmake
  8.    (list
  9.     (cons 0 "LINE")
  10.     (cons 10 (nth i aa))
  11.     (cons 11 (nth i bb))
  12.    )
  13.   )                                       ; 提取起点和终点并合表
  14.   (setq i (1+ i))
  15. )
  16. (princ)
  17. )
  1. (defun c:tt ()
  2. (setq pt1 (getpoint "\n111:"))
  3. (setq aa (list (mapcar '+ pt1 '(0 0)) (mapcar '+ pt1 '(6 8)))) ; 创建起点
  4. (setq bb (list (mapcar '+ pt1 (list 3 0)) (mapcar '+ pt1 '(15 12)))) ; 创建终点
  5. (mapcar
  6.   '(lambda (a b)
  7.    (entmake (list (cons 0 "LINE") (cons 10 a) (cons 11 b)))        ; 提取起点和终点并合表
  8.   )
  9.   aa
  10.   bb
  11. )
  12. (princ)
  13. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-5-21 23:02:02 | 显示全部楼层
XDSoft 发表于 2013-5-21 22:55
你想要的,看看,不要X,Y分开,在加啊,减的,用MAPCAR

理解下

正是如此!呵呵!我再慢慢思考一下吧!今天坐车坐了四个小时.头有点晕!谢谢晓东!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-5-21 23:15:07 | 显示全部楼层

(mapcar '+ pt1 '(0 0))

有问题,PT1是三维点,后面的 '(0 0) -----> '(0 0 0),前面表几个元素,对应几个元素加,你这样就把三维点变成二维点了。

另外,entget返回格式的,是点对,所以你处理时候要用CONS,别用APPEND

点评

因为楼主要用两维点,所以用(mapcar '+ pt1 '(0 0))将pt1转成两维点。  发表于 2013-5-22 08:01
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-5-21 23:33:18 | 显示全部楼层
eachy 发表于 2013-5-21 22:09
在这个最小表一般加上(100 . "AcDbEntity")(100 . "AcDbLine"),另外把你的循环代码贴上来,用图说明执行结 ...

这二个是什么啊?有什么作用呢?请副站长大人指点!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-5-21 23:54:55 | 显示全部楼层
xtdwynij 发表于 2013-5-21 23:33
这二个是什么啊?有什么作用呢?请副站长大人指点!

不知道从哪个版本起 Entmake 要加上 100 组码,否则可能Entmake失败,所以现在习惯所有的entmake都加上 类型
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-5-21 23:55:06 | 显示全部楼层
XDSoft 发表于 2013-5-21 23:15
(mapcar '+ pt1 '(0 0))

有问题,PT1是三维点,后面的 '(0 0) -----> '(0 0 0),前面表几个元素,对应 ...

明白了!再问一个问题!( 1 2 0)和 (1 2)是等价的么?我曾经请教过Z版关于文字包围盒问题。貌似二维点和三维点是不等价的!比如:(vl-cmdf "矩形命令" (1 2 0) (3 4))这样是不能画出矩形的吧?因为二个点一个是三维点一个是二维点?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-5-21 23:59:29 | 显示全部楼层
xtdwynij 发表于 2013-5-21 23:55
明白了!再问一个问题!( 1 2 0)和 (1 2)是等价的么?我曾经请教过Z版关于文字包围盒问题。貌似二维点 ...

不用纠结在这个问题了,CAD是三维的,尽量用三维点。命令能画,不给Z,默认是0
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-5-22 00:00:37 | 显示全部楼层
xtdwynij 发表于 2013-5-21 23:55
明白了!再问一个问题!( 1 2 0)和 (1 2)是等价的么?我曾经请教过Z版关于文字包围盒问题。貌似二维点 ...

如果在 Wcs 下 (1 2 0) (1 2) 是一个点,但是在程序中他们的意义不同,不能说等价
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-5-22 00:22:12 | 显示全部楼层

最简洁的代码!!!!简洁而不简单啊!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

发表于 2013-10-24 00:35:54 | 显示全部楼层
楼主比我进步要快啊。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 79个

财富等级: 招财进宝

发表于 2020-11-19 07:58:58 | 显示全部楼层
mapcar函数果然强大!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-23 02:33 , Processed in 0.400502 second(s), 50 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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