caohong25 发表于 2009-2-13 19:42:00

请高手帮帮忙

(vl-load-com)<br/>  (setvar "cmdecho" 0)<br/>  (setvar "osmode" 0)<br/>  (setq hxss (ssadd))<br/>  (setq s (ssget '((0 . "line"))))<br/>  (repeat (setq s1 (sslength s))<br/>    (setq s_ent (ssname s (setq s1 (1- s1))))<br/>    (setq ent (entget s_ent))<br/>    (setq pt1 (cdr (assoc 10 ent))<br/>          pt2 (cdr (assoc 11 ent))<br/>    )<br/>    (setq zw_s (ssget "_F" (list pt1 pt2) '((0 . "insert"))))<br/>    (if (/= zw_s nil)<br/>      (progn<br/>        (repeat (setq zw_s1 (sslength zw_s))<br/>       (setq bjyxlst '() lsts 0)<br/>          (setq zw_ent (ssname zw_s (setq zw_s1 (1- zw_s1))))<br/>          (if (not (ssmemb zw_ent hxss))<br/>            (progn<br/>          (setq hxss (ssadd zw_ent hxss))<br/>              (setq zwent (entget zw_ent))<br/>              (setq tkm (cdr (assoc 2 zwent)))<br/>              (setq pins (cdr (assoc 10 zwent)))<br/>              (setq ang (cdr (assoc 50 zwent)))<br/>              (setq zty (entget (cdr (assoc -2 (tblsearch "block" tkm)))))<br/>              (ch_z zty pins ang)<br/>          (setq bjyxlst (reverse bjyxlst))<br/>          (repeat (length bjyxlst)<br/>                (setq zbd (cdr (nth lsts bjyxlst)))<br/>            (setq zjd (vlax-curve-getClosestPointTo s_ent zbd T))<br/>                (if (/= (distance zbd zjd) 0)<br/>              (command "_dimaligned" zbd zjd (polar zjd pi 1000))<br/>            )<br/>          (setq lsts (1+ lsts))<br/>          )<br/>            )<br/>          )<br/>        )<br/>      )<br/>    )<br/>  )<br/>  (setvar "osmode" 37)<br/>  (setvar "cmdecho" 1)<br/>  (princ)<br/><br/><br/>这段代码是对直线上图块里的圆进行标注~为什么每个图块第一次标注时正常~~<br/>把标注删除后~~再对该图块进行标注时确无法标注了~~也没有任何出错信息<br/>把图纸关了重新打开又能标注了~但同一图块只能标一次~<br/>

carrot1983 发表于 2009-2-13 23:16:00

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq bjyxlst '() lsts 0)</p><p>(ch_z zty pins ang)<br/>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq bjyxlst (reverse bjyxlst))</p><p>啥意思。。。</p><p>听不懂你要干嘛???</p><p></p>

caohong25 发表于 2009-2-13 23:25:00

bjyxlst里面是由ch_z函数提取出来的圆心坐标~<br/><br/>我的意思是为什么同一个图块只能标注一次~<br/>把标注删了~再重新标注时就没反应了~~<br/>也没提示出错~运行完代码但不标注<br/><br/>把图纸关了重新打开又能标注了~~但也只能标一次~~<br/>删了标注重标就又不行了~~<br/>

carrot1983 发表于 2009-2-13 23:26:00

<p>最好抓个图来。。。</p><p>上面的代码太乱。。。</p><p>懒的看。</p><p>把需求说清楚,重新写更快。</p>

caohong25 发表于 2009-2-13 23:30:00

怎么把电脑里的图发上来???

carrot1983 发表于 2009-2-14 00:00:00

是不是这样子的。。。
以线选择块。。。
按你的需求,我猜测的。。。


;;LINE-BLOCK-DIMALIGNED 线和块标注 By carrot1983 2009-02-13
(defun C:TT (/ ELIST PT SS SS1 V10 CMDECHO)
;;(CAI-SS-VALUES SS -1) By carrot1983
(defun CAI-SS-VALUES (SS ITEM / I VALUES)
    (repeat (setq I (sslength SS))
      (setq
VALUES
(cons
    (cdr (assoc ITEM (entget (ssname SS (setq I (1- I))))))
    VALUES
)
      )
    )
    VALUES
)
(defun CAI-DXF (ITEM ELIST)
    (cdr (assoc ITEM ELIST))
)
(command "._UNDO" "_BEGIN")
(setq CMDECHO (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(if (setq SS (ssget '((0 . "LINE"))))
    (foreach E (CAI-SS-VALUES SS -1)
      (if
(and (setq ELIST (entget E))
      (setq
      SS1 (ssget "_F"
   (list (CAI-DXF 10 ELIST) (CAI-DXF 11 ELIST))
   '((0 . "INSERT"))
   )
      )
)
(foreach E1 (CAI-SS-VALUES SS1 -1)
    (setq ELIST (entget E1)
   V10   (CAI-DXF 10 ELIST)
    )
    (setq PT (vlax-curve-getclosestpointto E V10))
    (command "._DIMALIGNED"
      "_NONE"
      PT
      "_NONE"
      V10
      "_NONE"
      (polar V10 (+ (* 0.5 pi) (angle PT V10)) 1000) ;_标注尺寸界线长度1000
    )
)
      )
    )
)
(setvar "CMDECHO" CMDECHO)
(command "._UNDO" "_END")
(princ)
)

caohong25 发表于 2009-2-14 10:02:00

差不多是这个意思~~<br/><br/>我写的也能标出来~~<br/>可为什么把标好的尺寸删除~或撤消后~<br/>再对那些标过的圆进行标注时却没反映了,也没见出错信息<br/><br/><br/>那个动画咋发的???????<br/>

caohong25 发表于 2009-2-14 10:53:00

弄清了~~原来有个存圆心坐标的表没有设为局部变量<br/><br/>郁闷~~弄了半天就这原因<br/>
页: [1]
查看完整版本: 请高手帮帮忙