乐筑天下

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

[编程交流] 增量属性

[复制链接]

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:36:06 | 显示全部楼层
不用担心,我今天在办公室写了一个关于这个问题的例行程序,所以明天我会发布代码,因为现在我在家。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:39:40 | 显示全部楼层
试试这个。。。
 
  1. (defun c:Test (/ *error* IsAttributed Spread_The_Block s d l blk at)
  2. (vl-load-com)
  3. ;; Tharwat 15. 01. 2013 ;
  4. (defun *error* (x)
  5.    (if at
  6.      (setvar 'attdia at)
  7.    )
  8.    (princ "\n*Cancel*")
  9. )
  10. (or Doc (setq Doc (vla-get-ActiveDocument (vlax-get-acad-object))))
  11. (defun IsAttributed (Doc name / yes)
  12.    (vlax-for o (vla-item (vla-get-blocks Doc) name)
  13.      (if (eq "AcDbAttributeDefinition" (vla-get-objectname o))
  14.        (setq yes t)
  15.      )
  16.    )
  17.    yes
  18. )
  19. (defun Spread_The_Block (s l d rm blk / sg i mrk)
  20.    (if rm
  21.      (setq sg  rm
  22.            i   (* d (fix (/ l d)))
  23.            mrk '-
  24.      )
  25.      (setq sg  d
  26.            i   d
  27.            mrk '+
  28.      )
  29.    )
  30.    (repeat (fix (/ l d))
  31.      (vl-cmdf "_.-insert"
  32.               blk
  33.               "_non"
  34.               (vlax-curve-getpointatdist s sg)
  35.               "1."
  36.               "1.0"
  37.               "0."
  38.               (strcat "DC-" (rtos i 2 0))
  39.      )
  40.      (setq sg (+ sg d)
  41.            i  (apply mrk (list i d))
  42.      )
  43.    )
  44. )
  45. (setq blk "DC")  ;; Specify Attibuted block name here with one attributes
  46. (if (and (if (not (tblsearch "BLOCK" blk))
  47.             (progn (princ "\n Block name is not found in Drawing !!") nil)
  48.             t
  49.           )
  50.           (if (not (IsAttributed Doc blk))
  51.             (progn (princ "\n Block name is not Attributed Block !!") nil)
  52.             t
  53.           )
  54.           (setq d (getreal "\n Increment Distance:"))
  55.           (setq s (car (entsel "\n Select Polyline:")))
  56.      )
  57.    (progn (setq at (getvar 'attdia))
  58.           (setvar 'attdia 0)
  59.           (setq l (vlax-curve-getdistatparam s (vlax-curve-getendparam s)))
  60.           (if (> (car (vlax-curve-getstartpoint s)) (car (vlax-curve-getendpoint s)))
  61.             (Spread_The_Block s l d (rem l d) blk)
  62.             (Spread_The_Block s l d nil blk)
  63.           )
  64.           (setvar 'attdia at)
  65.    )
  66. )
  67. (princ "\nWritten by Tharwat Al Shoufi")
  68. (princ)
  69. )
回复

使用道具 举报

gS7

35

主题

244

帖子

212

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
180
发表于 2022-7-5 18:41:42 | 显示全部楼层
Tharwat我印象深刻谢谢
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:45:46 | 显示全部楼层
 
我很高兴你喜欢它。
回复

使用道具 举报

0

主题

3

帖子

3

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 18:46:34 | 显示全部楼层
塔尔瓦特,
 
我刚刚发现了沿多段线放置属性块的lisp例程。它非常好,几乎完全符合我的要求,我有一个问题要问你。
 
是否很难使块插入,使其垂直于多段线(甚至围绕曲线),而不是当前的垂直?
 
我正在努力学习lisp,如果你能给我指出正确的方向,我愿意试一试!
 
当做
约翰
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:49:33 | 显示全部楼层
欢迎来到Cadboot rayboy。
 
你能举一个例子来说明你对这个项目的期望目标吗,不管这个项目在这个线程中是什么?
 
如果可以,请上载样例图形。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:53:18 | 显示全部楼层
或者这里是如何玩角度的方法。
 
注意:不要忘记在程序中本地化变量“p”。
 
  1. (vl-cmdf "_.-insert"
  2.               blk
  3.               "_non"
  4.               (setq p (vlax-curve-getpointatdist s sg))
  5.               "1."
  6.               "1.0"
  7.               (/ (* (angle '(0. 0. 0.)
  8.                            (vlax-curve-getfirstderiv
  9.                              s
  10.                              (vlax-curve-getparamatpoint s p)
  11.                            )
  12.                     )
  13.                     180.0
  14.                  )
  15.                  pi
  16.               )
  17.               (strcat "DC-" (rtos i 2 0))
  18.      )
回复

使用道具 举报

0

主题

3

帖子

3

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 18:57:29 | 显示全部楼层
 
谢谢塔瓦,很高兴来到这里。
 
我附上了一个简单的图纸显示了一个例子。
 
最上面的示例是lisp生成的内容。下面的例子是我想要的。
 
块应垂直于多段线(如齿轮上的齿)。
 
如果它可以在起点(0.0)插入一个块,并将其编号为0.0、0.5、1.0、1.5等,那也很好。
kp测试。图纸
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:59:35 | 显示全部楼层
这并不完美,但效果很好,现在您可以选择更多的对象,而不仅仅是多段线。
 
试试看。
 
  1. (defun c:Test (/ *error* do isattributed spread_the_block s d l blk vals
  2.               p
  3.              )
  4. ;; Tharwat 26. 08. 2015 ;
  5. (defun *error* (x)
  6.    (if vals
  7.      (mapcar 'setvar '(attdia dimzin) vals)
  8.    )
  9. )
  10. (defun isattributed (doc name / yes)
  11.    (vlax-for o (vla-item (vla-get-blocks doc) name)
  12.      (if (eq "AcDbAttributeDefinition" (vla-get-objectname o))
  13.        (setq yes t)
  14.      )
  15.    )
  16.    yes
  17. )
  18. (defun spread_the_block (s l d blk / sg i mrk)
  19.    (setq sg  d
  20.          i   d
  21.          mrk '+
  22.    )
  23.    (vl-cmdf "_.-insert"
  24.             blk
  25.             "_non"
  26.             (setq p (vlax-curve-getstartpoint s))
  27.             "1."
  28.             "1.0"
  29.             (/ (* (angle '(0. 0. 0.)
  30.                          (vlax-curve-getfirstderiv
  31.                            s
  32.                            (vlax-curve-getparamatpoint s p)
  33.                          )
  34.                   )
  35.                   180.0
  36.                )
  37.                pi
  38.             )
  39.             (strcat "DC-" "0.0")
  40.    )
  41.    (repeat (fix (/ l d))
  42.      (vl-cmdf "_.-insert"
  43.               blk
  44.               "_non"
  45.               (setq p (vlax-curve-getpointatdist s sg))
  46.               "1."
  47.               "1.0"
  48.               (/ (* (angle '(0. 0. 0.)
  49.                            (vlax-curve-getfirstderiv
  50.                              s
  51.                              (vlax-curve-getparamatpoint s p)
  52.                            )
  53.                     )
  54.                     180.0
  55.                  )
  56.                  pi
  57.               )
  58.               (strcat "DC-" (rtos i 2 1))
  59.      )
  60.      (setq i  (apply mrk (list i d))
  61.            sg (+ sg d)
  62.      )
  63.    )
  64. )
  65. (setq blk      "kptag1"
  66.        do       (vla-get-activedocument (vlax-get-acad-object))
  67.        *incval* (if *incval*
  68.                   *incval*
  69.                   0.5
  70.                 )
  71. )
  72. ;; Specify Attibuted block name here with one attributes
  73. (if
  74.    (and
  75.      (if (not (tblsearch "BLOCK" blk))
  76.        (progn (princ "\nBlock name is not found in Drawing !!")
  77.               nil
  78.        )
  79.        t
  80.      )
  81.      (if (not (isattributed do blk))
  82.        (progn (princ "\nBlock name is not Attributed Block !!")
  83.               nil
  84.        )
  85.        t
  86.      )
  87.      (progn (initget 6)
  88.             (setq
  89.               *incval* (cond ((getdist (strcat "\n Increment Distance <"
  90.                                                (rtos *incval* 2 2)
  91.                                                "> :"
  92.                                        )
  93.                               )
  94.                              )
  95.                              (t *incval*)
  96.                        )
  97.             )
  98.      )
  99.      (setq s (car (entsel "\nPick on [Polyline,Line,Arc,Spline]:")))
  100.      (wcmatch (cdr (assoc 0 (entget s)))
  101.               "LWPOLYLINE,LINE,ARC,SPLINE"
  102.      )
  103.    )
  104.     (progn (setq vlas (mapcar 'getvar '(attdia cmdecho dimzin)))
  105.            (mapcar 'setvar '(attdia cmdecho dimzin) '(0 0 0))
  106.            (setq l (vlax-curve-getdistatparam s (vlax-curve-getendparam s)))
  107.            (vla-startundomark do)
  108.            (spread_the_block s l *incval* blk)
  109.            (vla-endundomark do)
  110.     )
  111. )
  112. (*error* nil)
  113. (princ "\nWritten by Tharwat Al Shoufi")
  114. (princ)
  115. )(vl-load-com)
回复

使用道具 举报

0

主题

3

帖子

3

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 19:02:39 | 显示全部楼层
谢谢Tharwat,这已经很接近了。
 
我无法让文本从0开始(从0.5开始),然后它不显示整数的小数位(它显示1而不是1.0)。我已经调整了RTOS值,但它没有显示1.0格式。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-12 12:58 , Processed in 1.676964 second(s), 70 queries .

© 2020-2025 乐筑天下

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