verb222 发表于 2022-7-5 17:27:51

添加街道名称和地址编号

你好
我需要建议/想法。
我上传了示例1。图纸
这是解释我需要建议的最简单的方法。
我的工作是设计电缆。我需要在图纸中输入的数据是cable_编号和connection_编号,我有办法做到这些。但是
 
以后,我还需要在excel表格中显示数据,如附件所示。我计划通过导出属性信息来实现。
 
现在,想象一下整个城镇,有很多不同的街道名称和门牌号。
我需要建议如何轻松地将现有土地基础图(街道名称、房屋编号)中的数据放入块中,因为我没有想到其他制作xls表的方法。
 
也许可以使用一些地理信息系统程序来完成,如果有人说服我这是可能的,我会学习它。
也许可以通过Lisp程序、例行公事。。。(这些是我的中文)
 
手工填写表格的方法是不填写街道名称和门牌号,只填写电缆数据。。。而且。。。打开excel并键入数据。
 
我希望你能给我一些建议/想法,告诉我如何用最简单的方法做这件事。
 
感谢Tnx思考一下。
示例1.xlsx
示例1.dwg

BIGAL 发表于 2022-7-5 17:38:37

相当容易需要一些时间,输入电缆编号,选择st名称,重复->选择房屋编号,放置块。另一种选择是先放置大量的方块,很好地排队等,然后重复->拣房子不,拣方块。
 
太阳出来了,我要去钓鱼。

BIGAL 发表于 2022-7-5 17:49:37

这是如此接近它有一个错误,有些时候你只是看不到它。匹配示例dwg。
 

code fixed see next post

BIGAL 发表于 2022-7-5 17:51:26

试试这个
 

(vl-load-com)
(defun c:HOUSE ( / cableno stname blkobj)
(setq Connectno (Getint "\nConnection Number"))
(setq Cableno (getstring "\nEnter Cable No"))
(setq stname (vla-get-textstring (vlax-ename->vla-object (car (entsel "\nPick Street Name")))))
(while (/= nil (setq Hnum (vla-get-textstring (vlax-ename->vla-object (car (entsel "\nSelect House number pick nothing to exit"))))))
   (setq blkobj (vlax-ename->vla-object (car (entsel "\nPick House block"))))
   (foreach att (vlax-invoke blkobj 'getattributes)
       (if (= "STREET_NAME" (vla-get-tagstring att))
       (vla-put-textstring att stname)
       ) ; end if
       (if (= "ADDRESS_NUMBER" (vla-get-tagstring att))
       (vla-put-textstring att Hnum)
       ) ; end if
       (if (= "CABLE_NUMBER" (vla-get-tagstring att))
       (vla-put-textstring att Cableno)
       ) ; end if
       (if (= "CONNECTION_NUMBER" (strcase (vla-get-tagstring att)))
       (vla-put-textstring att (rtos Connectno 2 0))
       ) ; end if
    ) ; foreach
    (setq Connectno (+ 1 Connectno))
) ;while
(princ) ; exit neatly
) ; Defun
(c:house) ;for testing remove after

verb222 发表于 2022-7-5 18:00:19

比加尔,
非常感谢。
 
您的代码是进一步增强想法的灵感来源。从中,我做了两个口吃。一个将拾取的文本中的房屋编号输入到属性中,另一个将拾取的文本中的街道名称输入到属性中。为此,不需要电缆材料属性。
我更改了你的代码,删除了我认为过多的代码。请不要笑。可能需要减少一些,但我不太理解,所以我只是让它对我有用,如下所示:
1、门牌号

(vl-load-com)
(defun c:Han ( / cableno stname blkobj)


(while (/= nil (setq Hnum (vla-get-textstring (vlax-ename->vla-object (car (entsel "\nSelect House number pick nothing to exit"))))))
   (setq blkobj (vlax-ename->vla-object (car (entsel "\nPick House block"))))
   (foreach att (vlax-invoke blkobj 'getattributes)
      
       (if (= "ADDRESS_NUMBER" (vla-get-tagstring att))
       (vla-put-textstring att Hnum)
       ) ; end if
      
    ) ; foreach
   
) ;while
(princ) ; exit neatly
) ; Defun
(c:house) ;for testing remove after
Now


2. street name
Code:
(vl-load-com)
(defun c:hsn ( / cableno stname blkobj)


(while (/= nil (setq Hnum (vla-get-textstring (vlax-ename->vla-object (car (entsel "\nSelect House number pick nothing to exit"))))))
   (setq blkobj (vlax-ename->vla-object (car (entsel "\nPick House block"))))
   (foreach att (vlax-invoke blkobj 'getattributes)
      
       (if (= "STREET_NAME" (vla-get-tagstring att))
       (vla-put-textstring att Hnum)
       ) ; end if
      
    ) ; foreach
   
) ;while
(princ) ; exit neatly
) ; Defun
(c:house) ;for testing remove after
 
拜托,你能为我再做一件事吗。制作第二个代码(街道地址)如下:
首先,我选择带有街道名称的文本,然后命令继续执行,我不需要再为街道名称选择源输入,只需要能够将其粘贴到多个块属性中。类似于MATCH属性的工作方式。您拾取源,然后所有单击都将相同的特性“粘贴”到不同的对象(在本例中为块)。
 
再一次,tnx!

verb222 发表于 2022-7-5 18:09:33

嗨,我做到了。我把WHILE循环,它的工作。
关于Lisp程序的阅读时间很长,但我做了一些工作。。。即使它改变了其他人的代码,但是。。。我很高兴
我必须承认,这对以后学习LISPing非常有激励作用。希望是时候了。再一次,tnx。

BIGAL 发表于 2022-7-5 18:19:11

不用担心,更改块属性相对简单。还有第二种方法,您只需使用属性创建顺序att1 att2等,并更改所需顺序,这样就不需要担心属性名称。Ps下次使用代码标签,这是#选项,否则管理员会跟踪你。

verb222 发表于 2022-7-5 18:22:50

对不起,我以为“代码:”就像“#”。很抱歉
 

;just wanna try it

 
我现在有个问题:我意识到了编程/组合LISP的可能性。现在我花了几个小时学习,浏览,阅读。。。幸运的是,我在度假

BIGAL 发表于 2022-7-5 18:29:57

没有空格的和
 
重新度假始于1980年的lisp。但其他人就是那么聪明,一直在学习。
页: [1]
查看完整版本: 添加街道名称和地址编号