乐筑天下

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

[编程交流] 多个增强属性ed

[复制链接]

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:02:08 | 显示全部楼层 |阅读模式
你好
我是新来的,所以如果我要求一些已经写好的东西,不要生气。
 
所以,正如标题所说,我需要一个lisp例程来更改块的属性。
具体来说,我需要更改块中多个点的高程。
 
我在网上找到了一些lisp例程,但并没有达到我的预期。
 
这是一个最接近我要求的Lisp程序的句子:
 
  1. (defun pluserr (msg)
  2. (if msg (princ msg))
  3. (command "_.undo" "_end")
  4. (if ps (setvar "pickstyle" ps))
  5. (if olderr (setq *error olderr))
  6. (princ)
  7. )
  8. (defun c:smileytongue:lus (/ ps plusval ent elist numstr num tval plcs elist2)
  9. (setq ps nil plusval nil ent nil elist nil numbstr nil num nil tval nil
  10. plcs nil elis2 nil)
  11. (setq olderr *error* *error* pluserr)
  12. (command "_.undo" "_g")
  13. (setq ps (getvar "pickstyle"))
  14. (setvar "pickstyle" 0)
  15. (setq plusval (getreal "\n Plus value: "))
  16. (setq plcs (getint "\nHow many decimal places? <0>: "))
  17. (if (null plcs) (setq plcs 0))
  18. (setq ent (nentsel))
  19. (while ent
  20. (setq elist (entget (car ent)))
  21. (setq numstr (cdr (assoc 1 elist)))
  22. (setq num (atof numstr))
  23. (setq tval (+ plusval num))
  24. (setq total (rtos tval 2 plcs))
  25. (setq elist2 (subst (cons 1 total) (cons 1 numstr) elist))
  26. (entmod elist2)
  27. (if (= (cdr (assoc 0 elist)) "ATTRIB")(command "regen"))
  28. (setq ent (nentsel))
  29. );end while
  30. (setvar "pickstyle" ps)
  31. (command "_.undo" "_end")
  32. (setq *error olderr)
  33. (princ)
  34. )

 
好这很好,但它允许选择多个对象或整个块。
它还改变了点的整个高程,但我想将原始高程添加到新高程。举个例子:如果我有一个高程为230,33的点,并想“删除”该高程为0,5。所以一个新的高度是229,83。
因此,如果我为多个点更改此高程,则会将选定点的所有高程减0,5(或我确定的其他值)。
 
我附上了一张我的点块看起来是什么样子的照片
 
如果有人能帮助我,我会很高兴。
180209abet22ueumqtg220.jpg
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 17:06:49 | 显示全部楼层
希望我能让你康复。。。。
 
  1. (defun c:TesT (/ st ss i n e x)
  2. (vl-load-com)
  3. ;; Tharwat 12. Dec. 2011 ;;
  4. (cond ((not acdoc)
  5.         (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
  6.        )
  7. )
  8. (if (and (setq st (getdist "\n Enter Number to substract :"))
  9.           (setq ss (ssget "_:L" '((0 . "INSERT") (66 . 1))))
  10.      )
  11.    (progn
  12.      (vla-StartUndoMark acdoc)
  13.      (repeat (setq i (sslength ss))
  14.        (setq n (entnext (ssname ss (setq i (1- i)))))
  15.        (while
  16.          (not
  17.            (eq (cdr (assoc 0 (setq e (entget n))))
  18.                "SEQEND"
  19.            )
  20.          )
  21.           (if (and
  22.                 (eq (cdr (assoc 0 e)) "ATTRIB")
  23.                 (not (eq (atof (cdr (assoc 1 e))) 0.))
  24.               )
  25.             (entmod
  26.               (subst (cons 1 (rtos (- (atof (cdr (assoc 1 e))) st)2 )) (assoc 1 e) e)
  27.             )
  28.           )
  29.           (setq n (entnext n))
  30.        )
  31.      )
  32.      (vla-EndUndoMark acdoc)
  33.    )
  34.    (princ)
  35. )
  36. (princ)
  37. )
回复

使用道具 举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-5 17:10:34 | 显示全部楼层
请阅读代码发布指南并编辑您的帖子。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 17:12:35 | 显示全部楼层
 
现在很多人都是新手,大多数人不熟悉代码发布,但肯定会按时来
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:17:35 | 显示全部楼层
谢谢你的快速回复。
我测试了你的例程,它可以工作,但通过更改点高度(高程),它也会更改点编号。
我只想更改一个属性,即点高度(高程)。
 
还有一个问题,我试图将rtos精度设置为2位小数(rtos x 2 2),但我找不到这个设置数字的位置。我只找到了设置rtos模式的数字。
现在我将点高度精度设置为4位小数。(这对于我需要的东西来说有点太精确了)
请告诉我在哪里可以更改rtos精度?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 17:20:01 | 显示全部楼层
不客气,科贝克。
 
更改例程中数字的精度,这与您在示例中所示的相同。
 
这是你可以改变精度的部分,你增加精度的数字也会增加。
 
  1. (if (and                 
  2. (eq (cdr (assoc 0 e)) "ATTRIB")                 
  3. (not (eq (atof (cdr (assoc 1 e))) 0.)))        
  4.      (entmod  (subst (cons 1 (rtos (- (atof (cdr (assoc 1 e))) st) 2 [color=blue][b]2[/b][/color])) ;;;<-- Change the Blue colored number to see the changes in precisions.
  5.                      (assoc 1 e) e)))
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:23:21 | 显示全部楼层
... Do't mean to step your toes there tharwat,i also post the same mod for your code on my post.我不是有意在那里踩你的脚,我也在我的帖子上为你发布了相同的mod代码。
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:25:13 | 显示全部楼层
 
完全没有,我的朋友。
 
我确实希望看到在同一问题上有许多编码方式。
 
干杯pBe。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:28:18 | 显示全部楼层
非常感谢大家的帮助!
我试图理解这个lisp代码,有人能解释一下这部分代码的含义吗:“(0)”插入“)(66.1))”?
 
好的,现在出现了一个新问题。在以前的lisp例程中,我想添加或删除点高度(高程),但现在我需要将每个示例中相同点的文本高度从0.350更改为0.500。
有人能帮我做这个吗?
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-5 17:33:48 | 显示全部楼层
Kocbek你需要一个不同的程序,基本上是对提供的程序的修改,唯一的区别是额外的一行
 
输入存在值
输入新值
该行也将更改,它不执行-(entmod(subst(cons 1(rtos)((atof(cdr(assoc 1 e)))st)2 2))(assoc 1 e)
 
上面的海报最好能有所改变,以防我搞砸了什么
 
Ps Tharwat getdist应该是getreal吗
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 08:58 , Processed in 0.769538 second(s), 75 queries .

© 2020-2025 乐筑天下

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