找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 506|回复: 5

[求助] 大师们帮我看看这个代码问题在哪里?

[复制链接]

已领礼包: 3199个

财富等级: 富可敌国

发表于 2016-11-5 15:50:03 来自手机 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 newer 于 2016-11-5 16:21 编辑

原贴在:http://bbs.mjtd.com/forum.php?mod=viewthread&tid=91590&extra=page%3D1%26filter%3Dtypeid%26typeid%3D114
0.jpg


(defun c:DTM(/ os olderr scl obj ename edata ename0 edata0 ename1 edata1 ename2 edata2)
  (vl-load-com)
  
  (defun dtmerr(msg)
    (command "undo" "e")
    (setvar "osmode" os)
    (if ename0 (entdel ename0))
    (if ename1 (entdel ename1))
    (if ename2 (entdel ename2))
    (setq *error* olderr)
  )
  (defun createdatum(/ blk)
    (setq ename0 nil)
    (setq ename1 nil)
    (setq ename2 nil)
    (if (setq obj (nentsel))
      (progn
        (setq spnt (cadr obj))
        (setq obj (vlax-ename->vla-object (car obj)))
        (entmake (list '(0 . "BLOCK")(cons 2 "*U")'(70 . 1)'(10 0.0 0.0 0.0)))
        (entmake (list '(0 . "TEXT")'(10 0.0 0.0 0.0)'(11 0.0 0.0 0.0)'(8 . "DIM")'(40 . 3.5)'(62 . 3)'(72 . 4)'(1 . "")))
        (entmake (list '(0 . "CIRCLE")'(8 . "DIM")'(10 0.0 0.0 0.0)'(40 . 3.5)))
        (setq blk (entmake '((0 . "ENDBLK"))))
        (entmake (list '(0 . "INSERT")'(10 0.0 0.0 0.0)(cons 41 scl)(cons 42 scl)(cons 2 blk)))
        (setq ename0 (entlast))
        (setq edata0 (entget ename0))
        (setq ename (entnext (tblobjname "BLOCK" blk)))
        (setq edata (entget ename))
        (entmake (list '(0 . "LINE")'(8 . "DIM")'(10 0.0 1.6 0.0)'(11 0.0 6.5 0.0)))
        (setq ename1 (entlast))
        (setq edata1 (entget ename1))
        (entmake (list '(0 . "LWPOLYLINE")'(8 . "DIM")'(100 . "AcDbEntity")'(100 . "AcDbPolyline")'(90 . 2)'(43 . 0.4)'(10 3.5 1.6 0.0)'(10 -3.5 1.6 0.0)))
        (setq ename2 (entlast))
        (setq edata2 (entget ename2))
      )
    )
  )
  
  (defun do_move(/ mpos npnt ang spnt epnt pnt0 pnt1)
    (setq mpos (cadr code))
    (setq npnt (vlax-curve-getClosestPointTo obj mpos T))
    
    (setq ang (angle npnt mpos))
    (if (< (distance mpos npnt) (* scl 10.0)) (setq mpos (polar npnt (angle npnt mpos) (* scl 10.0))))
    (setq edata0 (subst (cons 10 mpos) (assoc 10 edata0) edata0))
    (setq spnt (polar npnt ang (* scl 1.6)))
    (setq epnt (polar npnt ang (- (distance mpos npnt)(* scl 3.5))))
    (setq edata1 (subst (cons 10 spnt) (assoc 10 edata1) edata1))
    (setq edata1 (subst (cons 11 epnt) (assoc 11 edata1) edata1))
    (setq pnt0 (polar spnt (+ ang (/ pi 2.0)) (* scl 3.5)))
    (setq pnt1 (polar spnt (- ang (/ pi 2.0)) (* scl 3.5)))
    (setq edata2 (subst (cons 10 pnt0) (assoc 10 edata2) edata2))
    (setq edata2 (subst (cons 10 pnt1) (nth 4 (member (assoc 10 edata2) edata2)) edata2))
    (entmod edata0)
    (entmod edata1)
    (entmod edata2)
    (entupd ename0)
    (entupd ename1)
    (entupd ename2)
  )
  (defun do_datum (/ ref string)
    (setq ref (cadr code))
    (if (or (<= 65 ref 90) (<= 97 ref 122))
      (progn
        (setq string (strcase (chr ref)))
        (setq edata (subst (cons 1 string)(assoc 1 edata) edata))
        (entmod edata)
        (entupd ename)
      )
    )
  )
  (setvar "cmdecho" 0)
  (setq os (getvar "osmode"))
  (setvar "osmode" 0)
  (command "undo" "be")
  (setq olderr *error*)
  (setq *error* dtmerr)
  (setq scl (getvar "dimscale"))
  
  (prompt "Please select object:\n")
  (createdatum)
  (setq loop T)
  (while (and obj loop)
    (setq code (grread T 8))
    (cond
      ((= (car code) 5)(do_move))                                ;;;move
      ((= (car code) 3)(createdatum))                            ;;;left-right
      ((or (= (car code) 11)(= (car code) 25))(setq loop nil))   ;;;button-right
      ((= (car code) 2)(do_datum))                               ;;;datum
    )
  )
  
  (command "undo" "e")
  (setvar "osmode" os)
  (setq *error* olderr)
  (princ)
)



可不知道为什么,有时候标出来是这样的
原帖楼层中也有反映这个问题

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

已领礼包: 40个

财富等级: 招财进宝

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

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2016-11-5 15:56:29 | 显示全部楼层

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-11-5 16:55:28 | 显示全部楼层

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

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2016-11-5 17:10:53 来自手机 | 显示全部楼层
N版,问题解决了!我之前用也没发现问题,我现在用的新版本cad2014才出现,刚才请教了明经的edata大师,解决了此问题,是nth4的问题,替换成(setq edata2(reverse edata2))     (setq edata2 (subst (cons 10 pnt1) (assoc 10 edata2) edata2))     (setq edata2(reverse edata2)) 改成这样就可以了。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2226个

财富等级: 金玉满堂

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 08:32 , Processed in 0.256991 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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