乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 79|回复: 2

[编程交流] 表中的可选列

[复制链接]

55

主题

243

帖子

188

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2022-7-6 11:35:09 | 显示全部楼层 |阅读模式
这段聪明的代码是由ASMI编写的,它在选取一条pline后生成一个坐标表
打开或关闭。我想稍微修改一下,所以有一个选项
显示或不显示显示“Radius”的最后一列
因此,用户将有3列或4列。有人能看一下吗?
谢谢
 
  1. (defun c:tabord(/ aCen cAng cCen cPl cRad cReg
  2.        fDr it lCnt lLst mSp pCen pT1
  3.        pT2 ptLst R tHt tLst vlaPl vlaTab
  4.        vLst cTxt oldCol nPl clFlg *error*)
  5. (vl-load-com)
  6. (defun Extract_DXF_Values(Ent Code)
  7.    (mapcar 'cdr
  8.     (vl-remove-if-not
  9.      '(lambda(a)(=(car a)Code))
  10.     (entget Ent)))
  11.    ); end of
  12. (defun *error*(msg)
  13.    (setvar "CMDECHO" 1)
  14.    (princ)
  15.    ); end of *error*
  16. (if
  17.    (and
  18.      (setq cPl(entsel "\nSelect LwPoliline > "))
  19.      (= "LWPOLYLINE"(car(Extract_DXF_Values(car cPl)0)))
  20.      ); end and
  21.    (progn
  22.      (setq vlaPl(vlax-ename->vla-object(car cPl))
  23.        ptLst(mapcar 'append
  24.                   (setq vLst(Extract_DXF_Values(car cPl)10))
  25.                   (mapcar 'list(Extract_DXF_Values(car cPl)42)))
  26.        lLst '("A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M"
  27.            "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z")
  28.        r 2 lCnt 0
  29.        tLst '((1 0 "Point")(1 1 "X")(1 2 "Y")(1 3 "Radius"))
  30.        mSp(vla-get-ModelSpace
  31.             (vla-get-ActiveDocument
  32.               (vlax-get-acad-object)))
  33.        tHt(getvar "TEXTSIZE")
  34.            ); end setq
  35.        (setvar "CMDECHO" 0)
  36.        (foreach vert ptLst
  37.          (setq vert(trans vert 0 1)
  38.            tLst(append tLst
  39.              (list(list r 0 (nth lCnt lLst))
  40.              (list r 1(rtos(car vert)2 4))
  41.              (list r 2(rtos(cadr vert)2 4))
  42.              (list r 3 ""))))
  43.          (if(and
  44.           (/= 0.0(last vert))
  45.            (setq pt1(vlax-curve-GetPointAtParam vlaPl lCnt))
  46.            (setq pt2(vlax-curve-GetPointAtParam vlaPl(1+ lCnt)))
  47.           ); end and
  48.        (setq r(1+ r)
  49.              cRad(abs(/(distance pt1 pt2)
  50.              2(sin(/(* 4(atan(abs(last vert))))2))))
  51.              aCen(vlax-curve-GetPointAtParam vlaPl(+ 0.5 lCnt))
  52.              fDr(vlax-curve-getFirstDeriv vlaPl
  53.               (vlax-curve-getParamAtPoint vlaPl aCen))
  54.              pCen(trans
  55.                (polar aCen(-(if(minusp(last vert)) pi(* 2 pi))
  56.                  (atan(/(car fDr)(cadr fDr))))cRad)0 1)
  57.              tLst(append tLst(list
  58.                (list r 0 "center")
  59.                (list r 1(rtos(car pCen)2 4))
  60.                (list r 2(rtos(cadr pCen)2 4))
  61.                (list r 3(rtos cRad 2 4))))
  62.              ); end setq
  63.        ); end if
  64.          (setq r(1+ r) lCnt(1+ lCnt))
  65.          ); end foreach
  66.      (setq vlaTab(vla-AddTable mSp (vlax-3D-point '(0 0 0))
  67.            (+ 1(/(length tLst)4)) 4 (* 3 tHt)(* 18 tHt)))
  68.      (foreach i tLst
  69.        (vl-catch-all-apply 'vla-SetText(cons vlaTab i))
  70.        (vla-SetCellTextHeight vlaTab(car i)(cadr i)tHt)
  71.        (vla-SetCellAlignment vlaTab(car i)(cadr i)acMiddleCenter)
  72.        ); end foreach
  73.      (vla-DeleteRows vlaTab 0 1)
  74.      (princ "\n<<< Place Table >>> ")
  75.      (command "_.copybase" (trans '(0 0 0)0 1)(entlast) "")
  76.      (command "_.erase" (entlast) "")
  77.      (command "_.pasteclip" pause)
  78.      (if(= :vlax-true(vla-get-Closed vlaPl))
  79.        (progn
  80.         (setq nPl(vla-Copy vlaPl))
  81.         (command "_.region" (entlast) "")
  82.         (setq cCen(vlax-get(setq cReg
  83.         (vlax-ename->vla-object(entlast)))'Centroid))
  84.          (vla-Delete cReg)
  85.          (setq clFlg T)
  86.         ); end progn
  87.        ); end if
  88.      (setq lCnt 0)
  89.      (foreach v vLst
  90.        (if clFlg
  91.         (setq cAng(angle cCen(trans v 0 1))
  92.               iPt(polar v cAng (* 2 tHt)))
  93.         (setq fDr(vlax-curve-getFirstDeriv vlaPl
  94.               (vlax-curve-getParamAtPoint vlaPl v))
  95.           iPt(trans
  96.            (polar v(-(* 2 pi)(atan(/(car fDr)(cadr fDr))))
  97.                   (* 2 tHt))0 1)
  98.           ); end if
  99.          ); end if
  100.        (setq cTxt(vla-AddText mSp(nth lCnt lLst)
  101.               (vlax-3d-point iPt) tHt)
  102.          lCnt(1+ lCnt)
  103.          ); end setq
  104.        (setq oldCol(getvar "CECOLOR"))
  105.        (setvar "CECOLOR" "1")
  106.        (command "_.circle" v (/ tHt 3))
  107.        (setvar "CECOLOR" oldCol)
  108.        ); end foreach
  109.      (setvar "CMDECHO" 1)
  110.      ); end progn
  111.     (princ "\n<!> It isn't LwPolyline! Quit. <!> ")
  112.    ); end if
  113.    (princ)
  114.    ); end of c:tabord
回复

使用道具 举报

55

主题

243

帖子

188

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2022-7-6 12:05:25 | 显示全部楼层
别介意,伙计们,我自己已经解决了。。。。
回复

使用道具 举报

4

主题

26

帖子

22

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 12:41:51 | 显示全部楼层
你能给我们展示一下你的“调整过的”lisp程序吗?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-6 01:59 , Processed in 0.983167 second(s), 58 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表