乐筑天下

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

[编程交流] 它应该将区域写入atribu

[复制链接]

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:08:40 | 显示全部楼层 |阅读模式
相反,我得到的是:
 
命令:ppp
地区
指定第一个角点或[对象(Object)/添加面积(Add area)/减去面积(Subtract area)]:0,0
指定下一点或[弧/长度/撤消]:
需要点或选项关键字。
; 错误:功能已取消
 
指定下一点或[弧/长度/撤消]:*取消*
 
 
谁能帮帮我,因为我对Lisp程序这件事还不熟悉。
 
(定义C:PPP()
(命令“区域“0,0”)
(命令“AREA”“E”暂停)
(命令)
(setq di(getvar“dimzin”))
(setvar“dimzin”0)
(setq uprec 2)
(SETQ R(GETVAR“区域”))
(SETQ P(/R 10000))
(SETQ P(RTOS P uprec))
(SETQ P(距离P 2))
(如果(等式R 0)(SETQ P1“nic”)(SETQ P1(RTOS P 2 2)))
(命令“ATTEDIT”“Y”“*”“*”“*”“PAUSE”“V”“R”P1“”)
(setvar“dimzin”di)
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 10:27:51 | 显示全部楼层
有更有效的方法来实现这一点。。
但我们从你的代码开始
  1. (setq di (getvar "dimzin"))

当你不处理维度时,检索这个有什么意义?
作为最终结果,RTOS功能将处理您的任何意图
 
  1. ((SETQ R (GETVAR "AREA"))
  2. (SETQ P (/ R 10000))
  3. (SETQ P (RTOS P uprec))
  4. (SETQ P (DISTOF P 2))

 
你可以用一个围棋来做这件事。。。
 
  1. (setq p (distof (rtos (/ (getvar "area")  10000) 2 )))

但是再一次,你需要变量R作为你的线
为此。。。
  1. (IF (EQ R 0) (SETQ P1 "nic") (SETQ P1 (RTOS P 2 2)))

 
这是您检查所选对象是否没有区域数据的部分吗?(r可变)
或者与单位有关?
我测试时,你的代码运行良好。
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:42:58 | 显示全部楼层
这是我检查所选对象是否没有区域数据的部分。。
 
所以你说它有效。。
奇怪,因为我有ACAD 2011,但它没有。。
 
但在2009年,一切都很好。。。我用的是2011年的完整版本。。。
 
正如我之前所说,我对这个完全陌生,不太懂双簧管Lisp程序。
我现在无法在2009年查看。
 
你在什么版本的ACAD上试用过?
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 10:55:43 | 显示全部楼层
我们可以继续走这条路,或者尝试这样的方式
 
  1. (defun c:test (/ Pline_Hatch object_area attrib_text)
  2. (vl-load-com)  
  3. (cond
  4.   ((setq Pline_Hatch (ssget "_:S" '((0 . "LWPOLYLINE,HATCH"))))
  5.   (setq object_area (vla-get-area (vlax-ename->vla-object (ssname Pline_Hatch 0))))
  6.   (setq attrib_text (nentsel))
  7.   (vla-put-textstring (vlax-ename->vla-object (car attrib_text)) object_area)
  8.    )
  9. )
  10. )

 
现在是小数点
您可以使用LUPREC系统变量
或者改变这个
  1. (setq object_area (rtos (vla-get-area (vlax-ename->vla-object (ssname Pline_Hatch 0))) 2 2))

取决于你工作的单位
工程建筑的十进制的
 
祝你好运
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:07:20 | 显示全部楼层
非常感谢。
 
哦,我明白了,我很烂。。
 
所以我补充说
 
(SETQ object\u areab(/object\u area 10000))
 
我现在得到了我想要的平方米面积。
但我不知道怎么把它缩短,我的意思是在逗号后只留下两个位置。。
 
这可能没什么难的,但对我来说,这仍然是黑魔法。。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:11:06 | 显示全部楼层
你考虑过使用字段吗?
 
也许有一些值得思考的地方:
 
[code]------------------=={Areas 2属性}==----------------;;[color];;[color];;使用字段引用填充选定属性;;[color];;选定对象的面积总和;;;;---------------------------------------------------------------------------;;[color];;作者:Lee Mac,版权所有©2010-www.Lee-Mac。通用域名格式;;;;------------------------------------------------------------;;defun[color]c:A2Anil[color]c:Areas2Attribute[color=BLUE b][color=BLUE/*错误*\u StartUndo_EndUndo doc att ss(vl load com;;©Lee Mac 2010defun*错误*[color=BLUE ifdoc[U EndUndo doc[wcmatchstrcasemsgprinc[color=BLUE princ color][color=BLUE strcat][color]“\n**错误:“msg”**“ 【color=RED】)princdoc\U EndUndo doc)[/颜色vla StartUndoMarkdocdefundoc b][color]([/color b]如果[color b]==009900]8logand8getvar'UNDOCTL[color][color=BLUE BLUE vla ENDUDOMARK][docsetqdocvla get ActiveDocument[color=RED如果[/color b][color=RED([/color b][color=RED蓝色]黑色0“圆弧、圆、椭圆、图案填充、LW多段线、区域、样条线”[color=BLUE setq][color]attLM:Selectif b]lambdax[color]eq[color]“ATTRIB”[color=BLUE cdr][color=BLUE BLUE assoc color]0entgetx]]]]]NTERSEL[color][\n选择属性:“[color=BLUE progn color][U StartUndo doc[(lambdass fldsetq[color]fld([/color b][color=BLUE strcat[color]fld[color=BLUE strcat[color]fld“%+”vla put TextString[color=BLUE vlax ename->vla objectattT[color]substr[color]fld1[color][color=BLUE strlen][fld)[/color b]([/color b][color=BLUE b]红色](
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 21:21 , Processed in 0.419824 second(s), 64 queries .

© 2020-2025 乐筑天下

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