明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: userzhl

一个非常好的程序,但有时候会出错,龙哥,再帮忙来看看

  [复制链接]
发表于 2006-1-13 13:48 | 显示全部楼层

;;在XDCAD 狂刀 & LUCAS 给你提到问题点,但你好像没有看到....(非要写完整吗?)

dispbbs.asp?boardid=3&id=18494

 

 楼主| 发表于 2006-1-13 15:26 | 显示全部楼层
本帖最后由 作者 于 2006-1-13 20:38:17 编辑

谢谢龙哥,再帮我看看下面这段程序好吗?有时时候也出问题的:

;★长度型标注断开
(defun zm (et x /) (cdr (assoc x (entget et))))
(defun pzm (nwzm y obj /)
  (entmod(subst(cons y nwzm)(assoc y (entget obj))
         (entget obj)))
)
(defun objnm (ent)
  (vla-get-objectname (vlax-ename->vla-object ent))
)
(defun maxlst (pts / js i x tt jl ds)
  (setq    js 0 i  0)
  (repeat (length pts)
    (setq tt (nth i pts))
    (mapcar '(lambda (x)
           (if (> (setq ds (distance tt x)) js)
         (setq js ds
               jl (list x tt)))
         )pts)
    (setq i (1+ i)))jl
)
(defun c:db (/ ENT ENT1 GETPT JPT PT1 PT2 XL)
  (vl-load-com)(vl-cmdf "undo" "be")
  (if (setq ent (car (entsel "\n选择要断开的标注<退出>:")))
    (progn
      (redraw ent 3)
      (setq getpt (getpoint "\n点取断开点:"))
      (redraw ent 4)
      (vl-cmdf ".copy" ent "" '(0 0) "@")
      (setq ent1 (entlast))
      (setq pt1    (zm ent 13)pt2(zm ent 14))
      (if (= (objnm ent) "AcDbAlignedDimension")
    (vl-cmdf ".xline" pt1 pt2 "")
    (vl-cmdf ".xline" "a" (angtos (zm ent 50) 0 4) pt1 "")
      )
      (setq xl(entlast))
      (pzm(setq jpt (vlax-curve-getClosestPointTo xl getpt))13 ent)
      (pzm jpt 14 ent1)(vl-cmdf ".erase" xl ""))
  )(vl-cmdf "undo" "e")(princ)
)

发表于 2006-1-13 16:10 | 显示全部楼层
  1. (defun 2OF_OPTION (/ DCL_ID LAYER_LIST NEXT_STEP)
  2.   (setq NEXT_STEP 2)
  3.   (while (>= NEXT_STEP 2)
  4.     (if (and
  5.    (not DCL_ID)
  6.    (minusp (setq DCL_ID (load_dialog "DD2OF")))
  7. )
  8.       (exit)
  9.     )
  10.     (if (not (new_dialog "DD2OF" DCL_ID))
  11.       (exit)
  12.     )
  13.     (if OF_LAY
  14.       (progn
  15. (set_tile "chlay" "1")
  16. (mode_tile "layerlist" 0)
  17. (MK_LIST)
  18.       )
  19.       (progn
  20. (set_tile "chlay" "0")
  21. (mode_tile "layerlist" 1)
  22.       )
  23.     )
  24.     (if OF_E
  25.       (set_tile "delold" "1")
  26.       (set_tile "delold" "0")
  27.     )
  28.     (if OF_DIST
  29.       (set_tile "ofdist" (rtos OF_DIST))
  30.     )
  31.     (action_tile "chlay" "(chlay_act)")
  32.     (action_tile "accept" "(accept_option)")
  33.     (action_tile "no" "(done_dialog 0)")
  34.     (action_tile "pickdis" "(done_dialog 4)")
  35.     (setq NEXT_STEP (start_dialog))
  36.     (if (= NEXT_STEP 4)
  37.       (setq OF_DIST (getdist "\nOffset distanc: "))
  38.     )
  39.   )
  40. )
  41. (defun CHLAY_ACT ()
  42.   (if (= (get_tile "chlay") "0")
  43.     (progn
  44.       (start_list "layerlist")
  45.       (end_list)
  46.       (mode_tile "layerlist" 1)
  47.     )
  48.     (progn
  49.       (mode_tile "layerlist" 0)
  50.       (MK_LIST)
  51.     )
  52.   )
  53. )
  54. (defun ACCEPT_OPTION ()
  55.   (if (= (get_tile "chlay") "0")
  56.     (setq OF_LAY NIL)
  57.     (setq OF_LAY (nth (atoi (get_tile "layerlist")) LAYER_LIST))
  58.   )
  59.   (if (= (get_tile "delold") "1")
  60.     (setq OF_E 1)
  61.     (setq OF_E NIL)
  62.   )
  63.   (setq DIST (distof (get_tile "ofdist")))
  64.   (done_dialog 1)
  65. )
  66. (defun MK_LIST (/ LAYER_NAME)
  67.   (setq LAYER_LIST (list))
  68.   (setq LAYER_NAME (cdr (assoc 2 (tblnext "layer" t))))
  69.   (while LAYER_NAME
  70.     (if (= LAYER_NAME OF_LAY)
  71.       NIL
  72.       (setq LAYER_LIST
  73.       (append
  74.         LAYER_LIST
  75.         (list LAYER_NAME)
  76.       )
  77.       )
  78.     )
  79.     (setq LAYER_NAME (cdr (assoc 2 (tblnext "layer"))))
  80.   )
  81.   (setq LAYER_LIST (acad_strlsort LAYER_LIST))
  82.   (if OF_LAY
  83.     (setq LAYER_LIST
  84.     (append
  85.       (list OF_LAY)
  86.       LAYER_LIST
  87.     )
  88.     )
  89.   )
  90.   (start_list "layerlist")
  91.   (mapcar
  92.     'add_list
  93.     LAYER_LIST
  94.   )
  95.   (end_list)
  96. )
  97. (defun PTLAY (X Y)
  98.   (if Y
  99.     (vla-put-layer
  100.       (car (vlax-safearray->list (vlax-variant-value X)))
  101.       Y
  102.     )
  103.   )
  104. )
  105. (defun C:2Q (/ OBJ SS)
  106.   (vl-load-com)
  107.   (if OF_DIST
  108.     (progn
  109.       (if OF_LAY
  110. (princ (strcat "\n目标图层: " (strcase OF_LAY) ", "))
  111. (princ "\n保留原图层, ")
  112.       )
  113.       (if OF_E
  114. (princ "删除原线段, ")
  115. (princ "保留原线段, ")
  116.       )
  117.       (princ "偏移距离: ")
  118.       (if OF_DIST
  119. (princ OF_DIST)
  120. (princ "0.0")
  121.       )
  122.       (initget "Option")
  123.       (setq KWD (getkword "\n设置(O)/<选择>: "))
  124.       (if (= KWD "Option")
  125. (2OF_OPTION)
  126.       )
  127.     )
  128.     (2OF_OPTION)
  129.   )
  130.   (XD-CLEARCSET)
  131.   (setq SS (ssget '((0 . "Arc,Circle,Ellipse,*Line"))))
  132.   (if SS
  133.     (progn
  134.       (vlax-for OBJ (vla-get-activeselectionset
  135.         (vla-get-activedocument
  136.    (vlax-get-acad-object)
  137.         )
  138.       )
  139. (PTLAY (vla-offset OBJ DIST) OF_LAY)
  140. (PTLAY
  141.    (vla-offset
  142.      OBJ
  143.      (* DIST -1)
  144.    )
  145.    OF_LAY
  146. )
  147.       )
  148.       (setq OF_DIST DIST)
  149.       (if OF_E
  150. (progn
  151.    (setvar "cmdecho" 0)
  152.    (command "erase" SS "")
  153.    (setvar "cmdecho" 1)
  154. )
  155.       )
  156.     )
  157.   )
  158.   (princ)
  159. )
  160. ;;http://www.xdcad.net/forum/showthread.php?s=&threadid=454619
  161. (defun XD-CLEARCSET (/ CSET)
  162.   (if (not (vl-catch-all-error-p
  163.       (setq CSET
  164.       (vl-catch-all-apply
  165.         'vla-item
  166.         (list
  167.    (vla-get-selectionsets
  168.      (vla-get-activedocument (vlax-get-acad-object))
  169.    )
  170.    "CURRENT"
  171.         )
  172.       )
  173.       )
  174.     )
  175.       )
  176.     (vla-delete CSET)
  177.   )
  178.   (princ)
  179. )
  180. (princ)
 楼主| 发表于 2006-1-13 20:52 | 显示全部楼层
龙兄,再帮忙看看12楼的这个程序,为何有时会出错呢?
发表于 2006-1-13 21:26 | 显示全部楼层

我感觉程序中这句始终有问题(PTLAY   (vla-offset  OBJ  (* DIST -1))   OF_LAY )

不知道楼主原先贴的那个程序问题解决了吗?

 楼主| 发表于 2006-1-13 22:57 | 显示全部楼层
楼上,我也不知道,先用用看还有没有问题,因我也不知道它是在什么情况下出问题的,只能拿龙兄的也试一下先!
发表于 2006-1-14 08:00 | 显示全部楼层
当偏移的不是直线,比如圆弧,如果圆弧半径R=5,而的偏移距离为6,就会出现1楼的错误。
 楼主| 发表于 2006-1-14 08:55 | 显示全部楼层
本帖最后由 作者 于 2006-1-14 20:06:15 编辑

楼上,情况不是像你说的这样的,但只是偶尔出现这种情况,重新打开CAD程序又没有问题了。

龙兄,帮忙看看这段程序错在哪里呀(有时真的是乱来的,根本没法用):

;★长度型标注断开
(defun zm (et x /) (cdr (assoc x (entget et))))
(defun pzm (nwzm y obj /)
  (entmod(subst(cons y nwzm)(assoc y (entget obj))
         (entget obj)))
)
(defun objnm (ent)
  (vla-get-objectname (vlax-ename->vla-object ent))
)
(defun maxlst (pts / js i x tt jl ds)
  (setq    js 0 i  0)
  (repeat (length pts)
    (setq tt (nth i pts))
    (mapcar '(lambda (x)
           (if (> (setq ds (distance tt x)) js)
         (setq js ds
               jl (list x tt)))
         )pts)
    (setq i (1+ i)))jl
)
(defun c:db (/ ENT ENT1 GETPT JPT PT1 PT2 XL)
  (vl-load-com)(vl-cmdf "undo" "be")
  (if (setq ent (car (entsel "\n选择要断开的标注<退出>:")))
    (progn
      (redraw ent 3)
      (setq getpt (getpoint "\n点取断开点:"))
      (redraw ent 4)
      (vl-cmdf ".copy" ent "" '(0 0) "@")
      (setq ent1 (entlast))
      (setq pt1    (zm ent 13)pt2(zm ent 14))
      (if (= (objnm ent) "AcDbAlignedDimension")
    (vl-cmdf ".xline" pt1 pt2 "")
    (vl-cmdf ".xline" "a" (angtos (zm ent 50) 0 4) pt1 "")
      )
      (setq xl(entlast))
      (pzm(setq jpt (vlax-curve-getClosestPointTo xl getpt))13 ent)
      (pzm jpt 14 ent1)(vl-cmdf ".erase" xl ""))
  )(vl-cmdf "undo" "e")(princ)
)

发表于 2006-1-16 17:15 | 显示全部楼层
把抓取关闭试试
 楼主| 发表于 2006-1-16 17:37 | 显示全部楼层
龙兄,老弟不明白呀,你能不能把它改好发上来给大家学习呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-6 11:55 , Processed in 0.852193 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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